Un mot à chiffres est un mot où, après avoir éventuellement supprimé certaines lettres, vous vous retrouvez avec un seul chiffre: UN, DEUX, TROIS, QUATRE, CINQ, SIX, SEPT, HUIT ou NEUF (pas ZÉRO).
Par exemple, BOUNCE et ANNOUNCE sont des mots numériques, car ils contiennent le chiffre un.
ENCODE n'est pas un mot numérique, même s'il contient un O, N et E, car ils ne sont pas en ordre.
Écrivez un programme / fonction qui prend un seul mot (majuscule ou minuscule - vous choisissez) comme entrée ou paramètre et détermine s'il s'agit d'un mot numérique. Rendez le code aussi court que possible.
Si le mot n'est pas un mot à chiffres, vous devez retourner «NON», 0 ou toute valeur «falsey» (cela peut varier en fonction de votre langue). Si le mot est un mot numérique, vous devez sortir le chiffre qu'il contient, sous forme de nombre.
Vous pouvez supposer qu'aucun mot ne contient plus d'un chiffre, vous n'aurez donc rien comme ONFIVE.
Cas de test
BOUNCE
1
ENCODE
NO
EIGHT
8
BLACKJACK
NO
FABULOUS
NO
EXERCISE
NO
DRIFTWOOD
2
SERVICEMAN
7
INSIGNIFICANCE
9
THROWDOWN
2
ZERO
NO
OZNERO
1
Ce défi est tiré de (et est une très légère modification de) la question 1 de BIO 2009 . La plupart des cas de test sont tirés du schéma de marque .
NOFELINEVET
contient à la fois 5 et 9 ... que dois-je retourner?0
dans le cas où aucun chiffre n'a été trouvé, même si ce n'est pas falsey dans la langue de son choix?Réponses:
Javascript (ES6),
10199 octetsla source
PHP> = 7.0, 87 octets
Si seules les insertions de caractères d'un chiffre comme mot à l'entrée sont effectuées, quittez le programme avec le chiffre. Ou changez l'ordre pour
levenshtein("DIGIT $argn",IntlChar::charName("$i"),1,1,0)
ne pas compter les suppressions de caractèreslevenshtein
IntlChar :: charName
PHP> = 7,0, 112 octets
IntlChar :: charName
PHP, 128 octets
Essayez-le en ligne!
143 octets pour plus de 1 chiffre
Essayez-le en ligne!
la source
foreach(...)$r+=++$k*preg_match(...);echo$r?:NO;
(-1 octet).chunk_split($v,1,".*")
au lieu dejoin(...)
(-2 octets).chunk_split
je ne l'ai jamais vu auparavant. Vous devriez faire une entrée dans la section des conseilsIntlChar::enumCharNames
... demain.levenshtein()
semble fonctionner:<?for(;$i++<9;)levenshtein(IntlChar::charName("$i"),"DIGIT $argn",0,1,1)?:die("$i")?>NO
.Python 3, 150 octets
combinations
renvoie toutes les combinaisons de choses dans l'ordre. Il serait plus simple d'avoir un nombre défini pour le deuxième paramètre decombinations
, donc les espaces sont ajoutés à la fin de la chaîne d'origine qui est un paramètre de mon lambda. C'est une simple description du fonctionnement de mon entrée. Demandez si vous souhaitez plus de précisions.la source
Mathematica, 83 octets (encodage WindowsANSI)
Définit une fonction unaire
±
qui prend une liste de caractères minuscules en entrée et renvoie soit un chiffre, sous une forme similaire{{7}}
, soit une liste vide{}
. Je n'ai pas l'impression d'avoir fait une tonne de choses golfiques ici, sauf que celaCharacters@*IntegerName~Array~9
génère les correspondances nombre-nom à rechercher sans les coder en dur.Exemple d'utilisation:
rendements
{{9}}
.la source
Gelée ,
3128 octets-2 octets maintenant que l'entrée en minuscules est acceptable
Un programme complet qui attend une entrée en minuscules et imprime le résultat, en utilisant
0
pour le cas falsey.En tant que lien monadique prenant une liste de caractères, il retourne en fait une liste d'entiers qui contient un seul
0
dans le cas falsey, un seul entier entre1
et9
inclusif dans les cas d'utilisation attendus et plusieurs entrées de ce type dans les cas où plusieurs nombres existent dans le mot.Essayez-le en ligne!
Comment?
la source
Ruby + to_words :
4948 + 12 =6160 octetsUtilise les drapeaux
-rto_words -n
. Prend des mots en minuscules. Renvoienil
si aucun "chiffre" n'a été trouvé.-1 octet maintenant que l'entrée en minuscules est autorisée, ce qui permet la suppression du
i
drapeau sur l'expression régulière.Pour une réponse Ruby plus pure sans gemmes externes, 91 + 1 = 92 octets:
la source
05AB1E , 26 octets
La valeur de falsification ici est 0 .
Explication:
Utilise l' encodage 05AB1E . Essayez-le en ligne! ou Vérifiez tous les cas de test!
la source
Haskell,
113111 octetsEssayez-le en ligne!
Retour
0
si aucun chiffre n'est trouvé.Recherchez toutes les sous-séquences du mot saisi dans la liste des chiffres. Ajoutez une chaîne vide
[]
à l'index 0 qui fait partie de chaque sous-séquence.elemIndices
renvoie une liste d'indices et les=<<
aplatit en une seule liste. Choisissez le dernier index.la source
JavaScript (ES6), 121 octets
Renvoie le chiffre le plus bas détecté ou
0
si aucun chiffre n'a été détecté (+6 siNO
nécessaire).la source
Japt , 52 octets
Essayez-le en ligne!
la source
Retina ,
160126120 octetsEssayez-le en ligne!
Renvoie une chaîne vide si l'entrée ne contient pas de chiffre.
-6 octets grâce à @CalculatorFeline .
la source
0
au lieu deNO
.PHP,
134 132128 octetsfonctionner comme tuyau avec
-nF
ou essayer en ligne .Crée une expression régulière avec les mots entre parenthèses; c'est-à-dire que chaque mot
N
est dans laN
e sous-expression.Si un mot est trouvé, la chaîne correspondante sera dans
$m[0]
et dans leN
e élément, avec les éléments entre eux vides et aucune chaîne vide derrière; c'est à dire$m
a desN+1
éléments.la source
<?=preg_match("#(".strtr(chunk_split(ONE0TWO0THREE0FOUR0FIVE0SIX0SEVEN0EIGHT0NINE,1,".*"),[")|("]).")#",$argn,$m)?count($m)-1:NO;
Essayez-le en ligne!Python , 148 octets
Une fonction sans nom prenant un mot en majuscule uniquement et renvoyant l'entier (
1
à9
) ou0
pourNO
.Essayez-le en ligne!
Comment?
Pour une chaîne d'entrée de
s
la fonction traverse par une liste des chaînes:"x"
,"ONE"
,"TWO"
,"THREE"
,"FOUR"
,"FIVE"
,"SIX"
,"SEVEN"
,"EIGHT"
,"NINE"
ets
. Lui - même chercher les correspondances *La comparaison utilisée est de savoir si cette chaîne,,
w
est celle qui peut être formée à partir d'une combinaison de lettres dans l'ordre à partir de l'entrée. La fonction lescombinations
obtient pour nous (et uniquement celles de la longueur requise en utilisantlen(w)
), mais elles sont sous la forme de tuples, donc les chaînes sont converties en tuples pour la comparaison.Des onze résultats, celui pour
"x"
sera toujoursFalse
, tandis que celui pours
lui sera toujoursTrue
. Le"x"
est là pour s'assurer que l'index d'une correspondance avecONE
throughNINE
est les valeurs requises (puisque les listes Python sont indexées sur 0), les
est là pour s'assurer que l'appel àindex(1)
(synonyme deindex(True)
) n'échouera pas quand aucun mot numérique n'a été trouvé, après quoi le résultat10
est converti en un0
avec un modulo de dix en utilisant%10
.* Si
s
contient des espaces pour une raison quelconque, la liste desw
s sera plus longue, mais le processus fonctionnera toujours puisque les correspondances de mots de chiffres fonctionneront de la même manière, et si aucune ne correspond à la première sous-chaîne à espace séparé des
correspondra, donnant encore une fois10
et de retour0
.S'il existe des mots à plusieurs chiffres, la fonction renverra le mot minimal.
la source
Java,
167153 octetsUne implémentation plutôt naïve, correspondant sur regex.
Test et non golfé
Sauvegarde
la source
"ONE TWO THREE FOUR FIVE SIX SEVEN EIGHT NINE".split(" ")[i].split("")
directement dans la boucle for, et vous débarrasser deString[]N=
et;
. Et vous pouvez enregistrer 2 octets supplémentaires en modifiant l'ordre de la boucle for:,for(int i=0;i<9;)
utilisez[i++]
plutôt que[i]
dans if-check et supprimez-le+1
dans le retour."".join
pours.join
.Bash , 163 octets
Essayez-le en ligne!
Je ne connais pas RETINA mais semble être un port direct de cette réponse.
la source
*
avecj=0;for i in ONE TWO .. ; do ((j++)); printf "%s)a=%s;;" $(sed 's/./\*&\*/g' <<<$i) $j ; done
mais était plus longJavascript, 121 octets
ou 116
Mais il suffit de recycler le matériel à ce stade.
la source
Pyth,
-44-41 octetsPrend une chaîne entre guillemets, renvoie 0 pour NON.
Essayez!
explication
la source
Java, 254 octets
Essayez en ligne
la source
C, 198 octets
Essayez en ligne
la source
Python 2, 155 octets
Une fonction anonyme recherchant le groupe regex. Pas la meilleure solution ici en Python mais une manière alternative.
la source