Défi
Étant donné un seul mot en entrée, déterminez si le mot est impair ou pair.
Mots pairs et impairs
Supposons les règles générales:
odd + odd = even
even + odd = odd
odd + even = odd
even + even = even
Dans l'alphabet, les lettres impaires sont:
aeiou
Et les lettres paires sont:
bcdfghjklmnpqrstvwxyz
Il en va de même pour les majuscules ( AEIOU
sont impairs et BCDFGHJKLMNPQRSTVWXYZ
pairs).
Vous «ajoutez» ensuite chacune des lettres du mot ensemble. Par exemple, le mot cats
équivaut à:
even + odd + even + even
Ce qui simplifie:
odd + even
Ce qui simplifie encore plus:
odd
Donc, le mot cats
est étrange.
Exemples
Input: trees
Output: even
Input: brush
Output: odd
Input: CAts
Output: odd
Input: Savoie
Output: even
Input: rhythm
Output: even
Règles
Toutes les entrées seront un seul mot qui ne contiendra que des caractères alphabétiques.
Si le mot est impair, sortez une valeur véridique. Si le mot est pair, sortez une valeur de falsey.
Gagnant
Le code le plus court en octets gagne.
code-golf
string
decision-problem
Beta Decay
la source
la source
Réponses:
05AB1E , 6 octets
Explication
Essayez-le en ligne!
la source
EXCEL, 79 octets:
entrée:
Cette fonction peut être placée n'importe où SAUF A1
Mettez votre mot en question dans A1.
Sortie: 0 si pair, 1 si impair.
la source
JavaScript (ES6),
34413332 octets1 octets enregistrés grâce à Arnauld:
1
0
Solutions précédentes:
33 octets grâce à Arnauld:
1
0
Une autre façon sans opérateurs au niveau du bit:
41 octets:
1
0
null
42 octets à renvoyer
0
au lieu denull
:34 octets, pause sur les mots sans lettres impaires:
Enregistré 2 octets grâce à Shaun H
la source
f=
n'est pas nécessaire, et l'appel à exec sur l'objet regex est plus court.s=>/[aeiou]/ig.exec(s).length%2
exec
avec leg
drapeau.s=>s.split(/[aeiou]/i).length&1^1
?s=>~s.split(/[aeiou]/i).length&1
est en fait un octet plus court.Brain-Flak
206196192178 + 3 = 181 octetsEssayez-le en ligne!
Cela nécessite que l'
-c
indicateur s'exécute en mode ASCII en ajoutant 3 octets supplémentaires à la longueur du programme.Non golfé
Explication
Stockez d'abord la hauteur de la pile pour de futures utilisations
Ensuite, alors que la pile n'est pas vide (suppose qu'aucun des caractères n'est nul)
Soustrayez quatre-vingt-dix-sept (et stockez 3 pour des optimisations ultérieures)
S'il n'est pas nul (c'est-à-dire pas a)
Soustrayez 4 (et stockez 4 pour des optimisations ultérieures)
Si ce n'est pas zéro (c'est-à-dire pas e)
Soustrayez 4 (et stockez 4 pour des optimisations ultérieures)
Si ce n'est pas zéro (c'est-à-dire pas i)
Soustrayez 6 (et stockez 6 pour des optimisations ultérieures)
Si ce n'est pas zéro (c'est-à-dire pas o)
Soustrayez 6 (stockez 6 car le programme en attend un plus tard)
Si ce n'est pas zéro (c'est-à-dire pas u)
Déplacez le reste dans l'autre pile et mettez un zéro sur la pile active pour échapper à tous les ifs
Une fois tous les ifs échappés, supprimez le zéro et les six
Une fois que tous les caractères ont été traités, soustrayez la hauteur du décalage de la hauteur initialement stockée.
Mod par deux
la source
-c
c'est seulement +1 octet depuis que la réponse Perl n'ajoute que 1 octet / indicateur.perl -pe'code'
n'est qu'un octet de plus queperl -e'code'
.C, 42 octets
Cela fonctionne avec GCC 4.x sur un processeur x86-64. Les résultats peuvent varier selon les différentes configurations.
Testez - le sur repl.it .
Au prix de 5 octets supplémentaires, un comportement indéfini peut être évité, donc le code devrait fonctionner tant que les int s ont une largeur d'au moins 32 bits.
Comment ça marche
Modulo 32 , les codes de caractères de toutes les lettres impaires sont 1 , 5 , 9 , 15 et 21 . 2130466 est l'entier 32 bits qui a défini des bits à ces positions et des bits non définis à tous les autres.
Lorsque f est appelé sur une chaîne, il vérifie d'abord si le premier caractère de la chaîne est un octet nul (terminateur de chaîne). Si c'est le cas,
*s
donne 0 et f renvoie 0 . Sinon,*s
donnez le code de caractère d'une lettre et l'argument de droite du AND logique (&&
) est exécuté.Pour
>>
, GCC génère une instruction de décalage. Sur un processeur x86-64, l'instruction correspondante pour un entier 32 bits ignore tout sauf les 5 bits inférieurs de l'argument de droite, ce qui évite de réduire le*s
modulo 32 . Le décalage à droite et le ET suivant au niveau du bit avec 1 extrait le bit de 2130466 qui correspond à la lettre, qui sera 1 si et seulement si la lettre est impaire.Ensuite, nous incrémentons le pointeur s (en supprimant effectivement la première lettre), appelons f récursivement sur la chaîne décapitée et prenons le XOR au niveau du bit du résultat d'en haut et le résultat de l'appel récursif.
la source
sed
44(42 + 1 pour -n) 43-1 merci à Neil
Imprime
o
pour impair et rien pour pairla source
s/[aeiou][^aeiou]*[aeiou]//gi
pourrait vous faire économiser un octet, si j'ai compté correctement.Python, 41 octets
la source
Python, 42 octets
Pas grand chose à expliquer ici. Une fonction sans nom qui renvoie 0 ou 1.
la source
Brain-Flak ,
524, 446, 422 octetsEssayez-le en ligne!
Version non lue, plus lisible:
la source
Gelée ,
13 1211 octets-1 octet grâce à @Luis Mendo (utilisé
Ḃ
pour remplacer%2
)-1 octet grâce à @Dennis (utiliser une compression de chaîne)
Tous les cas de test sont sur TryItOnline
Comment?
Non concurrent, 5 octets (puisque je viens d'ajouter la fonction
Øc
)Cas de test également à TryItOnline
Comme ci-dessus, mais
Øc
donne les voyelles de l'alphabet latin,'AEIOUaeiou'
la source
%2
parḂ
“¡ẎṢɱ»
.“”«»‘’
(il y en a aussi⁾
pour une chaîne de deux caractères, mais qui est utilisé dans les chaînes compressées).Haskell,
3837 octetsMerci à Angs pour un octet!
la source
odd
place deeven
. Enregistre un octet!Python 3, 53 octets
Cela peut probablement être joué plus loin:
la source
in
et'aeiou'
etfor
et utilisezsum
pour économiser 8 octets:lambda n:sum(x in'aeiou'for x in n.lower())&1
(bien que, comme vous pouvez le voir dans le post de DJMcMayhem, l'utilisation des dix voyelles soit également plus courte)sum()
commande avant ce golf alors encore une fois j'ai appris quelque chose! Bonne journée :)Java, 73
vu quelques autres réponses java, sinon n'aurait pas partagé. Merci à Phaeze d'avoir enregistré un octet.
la source
%2>0
C 52 octets
le principal et le résultat:
la source
h(o){return~-o?1^h(1+strpbrk(o,"aeiouAEIOU")):1;}
enregistre 3 octets.Pyth, 14 octets
Essayez-le en ligne!
Explication:
la source
Rubis, 30 octets
la source
Vim,
32, 31, 29 touchesL'interpréteur V étant rétrocompatible, vous pouvez l' essayer en ligne! ici.
UnTrois octets économisés grâce à m-chrzan!la source
s/.../gi
place des/\c.../g
?'<C-r>"'
->@"
.@"
15 minutes. La meilleure astuce vim que j'ai est d'utiliser:help foo
et/
la documentation: P.:h foo
c'est plus court. : PJava 7, 88
Non golfé:
la source
dimwit , 14 octets (non concurrent)
Je pensais que ce serait un défi amusant et simple pour commencer avec une nouvelle langue.
Explication
a
- pousser un nouveau tableau vers la matricer[aeiou]}
- compter les occurrences de toutes les valeurs correspondant à l'expression régulière "[aeiou]" dans le premier tableau (puisque le premier tableau contient l'entrée), en ignorant la casse, et pousser cette valeur à la fin du dernier tableau.e
- si le dernier nombre du dernier tableau est pair (que nous fixons au nombre d'occurrences), effectuez les opérations suivantes jusqu'à une parenthèse fermante ("}")t
- arrêtez l'exécution, effacez la matrice et définissez la première valeur sur false}
- fin due
bloc de codeT
- arrêtez l'exécution, effacez la matrice et définissez la première valeur sur trueEssayez-le en ligne!
Utilisez le champ de saisie pour saisir le mot.
Je vais bientôt ajouter de la documentation ...
la source
PowerShell v2 +,
4542 octetsPrend l'entrée
$args[0]
, l'envoie à travers-replace
pour supprimer tous les caractères non voyelle, prend le résultat.length
, et%2
vérifie s'il est impair / pair.Exemples
la source
J, 20 octets
Approche directe
Explication
la source
Japt, 7 octets
Testez-le en ligne! Sorties 1 pour impair, 0 pour pair.
Comment ça marche
la source
Octave, 34 octets
Ceci est 6 octets plus court que l'approche traditionnelle utilisant
ismember
,@(s)mod(sum(ismember(s,'aeiouAEIOU')),2)
et deux octets plus courte que l'approche regex:@(s)mod(nnz(regexpi(s,'[aeiou]')),2)
.Testez-le ici .
la source
PHP, 41 octets
Cela donne -1 pour true et 0 pour falsey.
la source
Mathematica, 44 octets
Donne True pour une chaîne impaire et False pour une chaîne paire.
la source
q, 29 octets
la source
C #
64625650 octetsNous utilisons déjà linq, donc Contains enregistre 2 octets sur IndexOfL'utilisation de la surcharge de méthode de Count économise 6 octetsUne fonction anonyme qui prend une chaîne et compte les lettres impaires renvoie ensuite true s'il y en a un nombre impair ou false s'il n'y en a pas.
Cette nouvelle solution divise la chaîne sur l'un des caractères du tableau de caractères donné. La mécanique de cette inversion du sens du
%2
résultat; 0 est maintenant impair et 1 même d'où le1>
.Essayez-le en ligne ici!
la source
string.Split()
pour compter les voyelles et vous n'avez pas besoin de LINQ.s=>1>s.Split("aeiouAEIOU".ToCharArray()).Length%2;
Rétine , 19 octets
Essayez-le en ligne!(La première ligne active une suite de tests séparés par un saut de ligne.)
La première ligne compte les voyelles dans l'entrée. La deuxième ligne vérifie que le résultat est impair.
la source
MATL ,
8, 7 octetsEssayez-le en ligne!
Explication:
la source
Pyke, 10 octets
Essayez-le ici!
la source