Description courte et douce du défi:
Sur la base des idées de plusieurs autres questions sur ce site, votre défi est d'écrire le code le plus créatif dans n'importe quel programme qui prend en entrée un nombre écrit en anglais et le convertit en forme entière.
Spécifications vraiment sèches, longues et approfondies:
- Votre programme recevra en entrée un entier en anglais minuscule entre
zero
etnine hundred ninety-nine thousand nine hundred ninety-nine
inclus. - Il doit sortir uniquement la forme entière du nombre entre
0
et999999
et rien d'autre (pas d'espace blanc). - L'entrée ne contiendra PAS
,
ouand
, comme dansone thousand, two hundred
oufive hundred and thirty-two
. - Lorsque les dizaines et les emplacements sont tous deux non nuls et que l'emplacement des dizaines est supérieur à
1
, ils seront séparés par un caractère HYPHEN-MOINS-
au lieu d'un espace. Idem pour les dix mille et mille lieux. Par exemplesix hundred fifty-four thousand three hundred twenty-one
,. - Le programme peut avoir un comportement indéfini pour toute autre entrée.
Quelques exemples d'un programme bien comporté:
zero
-> 0
fifteen
-> 15
ninety
-> 90
seven hundred four
-> 704
sixty-nine thousand four hundred eleven
-> 69411
five hundred twenty thousand two
->520002
popularity-contest
Abraham
la source
la source
Réponses:
Applescript
Un mash-up stupide et hacky qui pourrait bouleverser certaines personnes de Cupertino / Mountain View, mais je pense que c'est un mash-up créatif idiot et hacky.
Utilise la synthèse vocale OSX pour prononcer le numéro de texte et la recherche audio Google pour l'écouter et le convertir en entier.
Exigences
Les délais de retard peuvent devoir être ajustés en fonction de votre temps de chargement Chrome et de votre temps de recherche Google.
Exemple d'entrée:
Exemple de sortie:
la source
Bash,
936455 caractères *Dans le fantastique
bsd-games
package disponible sur la plupart des systèmes d'exploitation Linux, il y a un petit jouet en ligne de commande appelénumber
. Il transforme les nombres en texte anglais, c'est-à-dire qu'il fait exactement le contraire de cette question. C'est exactement le contraire: toutes les règles de la question sont suiviesnumber
. C'est presque trop beau pour être une coïncidence.Bien sûr,
number
ne répond pas à la question. Nous voulons l'inverse. J'ai réfléchi à cela pendant un certain temps, essayé l'analyse de chaînes et tout cela, puis réalisé que je pouvais simplement appelernumber
tous les numéros 999.999 et voir si quelque chose correspond à l'entrée. Si c'est le cas, la première ligne où elle correspond a le double du numéro de ligne que je recherche (number
imprime une ligne de points après chaque numéro). Aussi simple que cela. Alors, sans plus tarder, voici le code complet de mon entrée:Il court-circule même, donc la conversion de "deux" est assez rapide, et des nombres encore plus élevés sont généralement décodés en moins d'une seconde sur ma box. Voici un exemple d'exécution:
Bien sûr, vous devrez avoir
number
installé pour que cela fonctionne.*: Oui, je sais, ce n'est pas un
code-golf
défi, mais la brièveté est à peu près la seule qualité discernante de mon entrée, alors ... :)la source
number
à l'envers est la chose la plus créative de cette réponse. Le golf est également bon :)Javascript
Vous en aimez
eval()
?Exécutez ce script sur la console de votre navigateur.
Edit: Merci pour les commentaires. Bugs corrigés (encore).
la source
twelve
son retour23
."twenty"
.seven thousand three hundred thirty five
donne moi10335
Python
Juste pour faire rouler la balle.
la source
Perl + CPAN
Pourquoi réinventer la roue alors qu'elle est déjà terminée?
Ce programme lit les chaînes anglaises à partir de l'entrée standard (ou d'un ou plusieurs fichiers spécifiés comme arguments de ligne de commande), une par ligne, et imprime les nombres correspondants sur la sortie standard.
J'ai testé ce code en utilisant à la fois les exemples d'entrées du défi, ainsi qu'une suite de tests exhaustive composée des nombres de 0 à 999999 convertis en texte à l'aide de l'
number
utilitaire bsd-games (merci, Wander Nauta!), Et il analyse correctement tous. En prime, il comprend également des entrées telles queminus seven
(−7),four and twenty
(24),four score and seven
(87),one gross
(144),a baker's dozen
(13),eleventy-one
(111) etgoogol
(10 100 ).( Remarque: En plus de l'interpréteur Perl lui-même, ce programme nécessite également le module CPAN Lingua :: EN :: Words2Nums . Voici quelques instructions pour installer les modules CPAN . Les utilisateurs de Debian / Ubuntu Linux peuvent également installer ce module via le gestionnaire de paquets APT comme liblingua-en-words2nums-perl .)
la source
Python
Une solution récursive générale, avec contrôle de validité. Pourrait être simplifié pour la plage de nombres requise, mais voici à montrer, je suppose:
la source
VBScript 474
C'est une réponse assez routinière ... malheureusement, tellement routinière que @Snack a à peu près affiché le même processus mais avant moi.
la source
Haskell
Semblable à d'autres solutions récursives je suppose, mais j'ai pris le temps de le nettoyer.
Voici la source complète avec toutes les explications: http://ideone.com/fc8zcB
la source
Lisp commun, 94
La conversion de nombre en texte est intégrée à CL, mais pas l'inverse. Construit un mappage inverse pour les nombres et vérifie l'entrée sur celui-ci.
la source