Après avoir entré une chaîne [longueur 1-20], contenant uniquement les caractères y pour oui et n pour non, votre programme devrait afficher le résultat (y ou n). Exemple d'entrée: yynynynny
produirait y.
Le résultat est déterminé en combinant les y et les n de la manière suivante:
y es et n o égaux n o
y es et y es égaux y es
n o et n o est égal à y es
Si la chaîne contient plus de 2 caractères (probablement ...), le calcul se ressemblerait. Exemples:
y es et y es et n o est égal à n o (parce que le non fusionne avec le premier oui à non. alors il n'y a pas et oui à gauche et la même chose se reproduit)
n o et n o et n o est égal à n o (les deux premiers non fusionnent à oui, puis il y a oui et non à gauche, qui émergent à non)
Exemple d'entrée avec sortie:
yynynynynyyn
= n
Astuce: gardez à l'esprit que l'ordre des caractères sur lesquels votre programme fonctionne ne se soucie pas. (par exemple, vous pouvez lire l'entrée de l'arrière ou de l'arrière, mélanger les lettres, les trier, peu importe. Ce qui compte, c'est la bonne sortie) amusez-vous!
Critères de victoire: c'est le code-golf , donc le code le plus court en octets gagne.
la source
1
poury
et0
pourn
.["y", "n", "n"]
Réponses:
Fusain , 6 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication:
la source
Octave ,
2927 octetsMerci à @RickHithcock d' avoir signalé une erreur, maintenant corrigée. Aussi, 2 octets de réduction grâce à @StewieGriffin!
Essayez-le en ligne!
Explication
Le point de code ASCII de
'y'
est impair et celui de'n'
est pair. Le code1
à chaque caractère dans la chaîne d'entrée pour rendre'y'
pair et'n'
impair;1
si pair,2
si impair;'yn'
.la source
JavaScript (ES6), 28 octets
Prend l'entrée sous forme de chaîne.
Essayez-le en ligne!
JavaScript (ES6), 30 octets
Prend l'entrée comme un tableau de caractères.
Essayez-le en ligne!
la source
s=>'yn'[s.match(/n/g).length&1]
Pn
.Haskell ,
3328 octetsIndexe le nombre de n dans la liste infinie "ynynynyn…". L'approche précédente (33 octets) consistait à replier des paires d'éléments différents en n, sinon y:
Essayez-le en ligne!
la source
Gelée , 7 octets
Essayez-le en ligne!
ċ ount nombre de ”n , ị ndex dans la chaîne ⁾ny . (avec modulo 2)
Essayez-le en ligne!
{ Ċ nombre ontant de prendre la ¯h ead, puis ì ndex dans} chaîne ⁾ny .
Essayez-le en ligne!
Similaire à la réponse d'Octave ci-dessus. Calculer la valeur O rd, prendre le complément C (pour chaque valeur ord x calculer 1-x ), S um, puis ị ndex dans la chaîne ⁾ny .
la source
APL (Dyalog Unicode) , 15 octets
Essayez-le en ligne!
Remarque: TIO par défaut est
⎕IO = 1
. Si vous courez avec⎕IO←0
,APL (Dyalog Unicode) , 13 octets
Essayez-le en ligne!
Il s'agit de la fonction XNOR (parfois appelée EQV, en particulier dans les anciens BASIC).
Décomposition / Analyse:
la source
Pyth, 9 octets
Essayez-le ici
Explication
la source
dc , 39
La chaîne d'entrée est lue depuis STDIN et doit être au format
[yynynynynyyn]
.dc n'est pas connu pour sa gestion des chaînes, mais nous avons juste assez ici pour que cela fonctionne. L'approche ici consiste à compter les
n
s et à les sortiry
s'ils sont pairs oun
impairs. Cela se fait en exécutant la chaîne d'entrée en tant que macro.dc
affichera des'y' (0171) unimplemented
erreurs pour tous lesy
s et tentera de faire apparaître des chaînes et de les imprimer pour tous lesn
s. Donc, d'abord, nous nous assurons que nous avons beaucoup (longueur totale de la chaîne d'entrée) de chaînes vides[]
sur la pile à éclater. Ensuite, nous exécutons la chaîne d'entrée et voyons combien il en[]
reste sur la pile. La longueur de chaîne d'origine est soustraite de cela pour donner le nombre total (-ve) den
s. Le reste est arithmétique pour faire le mod 2 et faire sortir la sortie directement en ASCIIy
oun
.Essayez-le en ligne!
la source
Japt , 8 octets
Essayez-le en ligne!
Explication:
Japt utilise l'index-wrapping, donc s'il
Uèn
revient2
, il reviendray
lors de la récupération du caractère"yn"
.la source
Perl 6 , 21 octets
Essayez-le
Étendu:
la source
Python 2 , 29 octets
Essayez-le en ligne!
la source
Java 8, 35 octets
Un décideur pour une langue régulière! Je peux le faire.
Essayez-le en ligne
la source
J ,
109 octetsEssayez-le en ligne!
la source
{&'ny'@=/
enregistre un octet.R ,
4644 octetsEssayez-le en ligne!
Down 2 octets grâce à Giuseppe et ngm. Réponse de Port of the Octave par Luis Mendo.
la source
sum(utf8ToInt(scan(,""))%%2)%%2
enregistre un octet.n
est malheureusement même si vous devez ajouter + 1 en premier ..Japt, 9 octets
Oliver m'a battu à la solution la plus courte alors voici quelques couples qui sont juste un octet de plus.
Essayez-le
Essayez-le
Explications
la source
/// , 24 octets
Essayez-le en ligne!
Je crois que c'est le programme /// le plus court possible, car faire une substitution à un caractère est inutile (si vous insérez quelque chose à sa place) ou l'empêche d'être une sortie (si vous n'insérez rien). Cependant, étant donné que le programme doit traiter les deux cas de caractères, cela doit être minimal.
Supprime d'abord tous
y
les droits d'unn
. Remplace ensuite le doublen
s pary
s, en profitant de la substitution LTR. À ce stade, il y a plusieursy
s suivis par au plus unn
; nous dédupliquons lesy
s et s'il y a unen
utilisation pour éponger le derniery
.la source
MATL , 8 octets
Essayez-le en ligne!
Enregistré 2 octets grâce à Luis Mendo! J'ai précédemment utilisé la commande explicite de module pour obtenir l'index dans la plage
1,2
.Explication
Cela utilise le fait que MATL a une indexation modulaire, ce qui signifie que les 1er, 3e, 5e ... éléments de la chaîne
ny
sont les mêmes (n
). Il en va de même pour les 2e, 4e, 6e ... éléments de la chaîne (y
).la source
'yn'3)
donney
...? Maintenant, c'est un design intelligent Luis =) Merci pour les conseils! :)Python 2 , 26 octets
Essayez-le en ligne!
la source
Rétine , 11 octets
Essayez-le en ligne!
la source
Gelée ,
87 octetsEssayez-le en ligne!
la source
Ẉ
peut être utilisé à la place deL€
.05AB1E , 8 octets
Essayez-le en ligne!
la source
Java (OpenJDK 8) , 143 octets
Essayez-le en ligne!
Et si nous prenons l'entrée comme une liste:
Java (OpenJDK 8) , 118 octets
Essayez-le en ligne!
Explication:
(entrée sous forme de chaîne)
la source
char[]u
(-1 octet); etif(u.length==1)
peut êtreif(u.length<2)
(-1 octet). Il y a probablement plus au golf, mais je n'ai pas vraiment le temps en ce moment. :)Rubis , 24 octets
Essayez-le en ligne!
Un lambda prenant une chaîne et renvoyant une chaîne.
la source
Cubix ,
2420 octetsCela fait un moment que je n'ai pas joué avec Cubix, alors ...
Essayez-le en ligne!
Implémentation assez naïve qui parcourt la chaîne et compare le caractère au résultat actuel.
Démo interactive
Cela se déroule sur le cube comme suit
W
décalage ip vers la gauchei
obtenir le caractère initiali?
obtenir le caractère et tester EOI (-1), également le début de la boucle;o@
supprime TOS, sortez TOS comme caractère et quittez.-W!
soustraire, déplacer l'ip vers la gauche, tester la véracité'n
pousser le caractère n vers TOS|!'y
réfléchit, teste et pousse le caractère y vers TOSv'.;w
rediriger autour du cube en poussant et en supprimant a. caractère et se replacer dans la bouclela source
Scala, 50 octets
la source
Befunge-98 , 13 octets
Essayez-le en ligne!
Inverse fondamentalement un 0 pour chaque
n
entrée, et encore une fois pour faire bonne mesure, puis les sortiesy
pour1
etn
pour0
la source
Nettoyer ,
2623 octetsEssayez-le en ligne!
la source
foldr1\a b|a==b='y'='n'
. (Au fait, malheureusement, les importations font généralement partie du bytecode.)JavaScript,
3937 octetsFonction de réduction simple après division de la chaîne d'entrée.
la source
s
, ce qui n'est pas une méthode d'entrée valide ici. Vous pouvez à la place faire de votre réponse une fonction lambda prenant l'entrée comme argument en ajoutants=>
à votre réponse 42 octets.s.split('')
par[...s]
pour 37 octets:s=>[...s].reduce((x,y)=>x==y?'y':'n')
C (gcc) ,
5250 octetsMerci à @Neil pour les suggestions.
J'ai emprunté la solution de compter
n
s, mais au lieu de garder un compte, je bascule simplement entre l'état initial et son inverse sur unn
.Essayez-le en ligne!
la source
*a&1?0:23
enregistre un octet etreturn i
enregistre un autre.i;f(char*a){for(i=*a;*++a;i^=*a&1?:23);a=i;}
Kotlin , 32 octets
Essayez-le en ligne!
la source