Sommaire
On a demandé à un enseignant de préparer des problèmes de mots pour les élèves. On lui donne une liste d'équations et lui dit de les écrire comme problème de mot correspondant. Cependant, elle est très paresseuse, donc elle n'y met pas beaucoup de créativité. Au lieu de cela, elle l'écrit simplement littéralement. Par exemple, quand elle lit 1+1
, elle écrit one plus one
, 47 * 2
se transformerait forty seven times two
et 56.2 / 7.4
deviendrait fifty six point two divided by seven point four
.
Écrivez du code pour aider ce professeur paresseux.
Détails
- Les nombres peuvent inclure un point décimal et un signe négatif.
- Les chiffres doivent être écrits dans une échelle courte. (c'est-à-dire,
1,000,000,000
estone billion
) - Les nombres peuvent aller jusqu'à 999 999 999 999 999 999 (
nine hundred ninety nine quadrillion...nine hundred ninety nine
). - Les groupes de zéros doivent être omis. par exemple ne l'
1,000,000
estone million
pasone million zero thousand zero hundred
. - Il peut y avoir arbitrairement plusieurs chiffres au-delà de la virgule décimale.
- Les chiffres après la virgule décimale doivent être répertoriés chiffre par chiffre. par exemple ne l'
12.34
esttwelve point three four
pastwelve point thirty four
. - Deux nombres sont toujours séparés par un opérateur.
- Les opérateurs valides sont plus (
+
), moins (-
), fois (*
) et divisés par (/
). - Il n'y a pas de parenthèses.
- Des nombres tels que
1234
peuvent éventuellement inclure unand
dans leur sortie, comme dansone thousand two hundred *and* thirty four
. - Les virgules et les espaces sur l'entrée peuvent être ignorés.
Exemples
Entrée: 24 + 65
Sortie:twenty four plus sixty five
Entrée: 3.33333 - 0
Sortie:three point three three three three three minus zero
Entrée: 3.6 * 18.18 / 999.0
Sortie:three point six times eighteen point one eight divided by nine hundred ninety nine point zero
Entrée: 1-1
Sortie:one minus one
Entrée: 1+-1
Sortie:one plus negative one
Entrée: 1,000,000,000 + 0.2
Sortie:one billion plus zero point two
Entrée: 123,000,456,789,012,345.6789
Sortie:one hundred twenty three quadrillion four hundred fifty six billion seven hundred eighty nine million twelve thousand three hundred forty five point six seven eight nine
Entrée: -4.3 * 7
Sortie:negative four point three times seven
Entrée: -1-1--1
Sortie:negative one minus one minus negative one
123,456,789,012,345.6789
aux exemples? Il devrait couvrir de nombreux cas de test.minus
place denegative
?/
estover
et le nombre négatif estminus
, donc il a besoin d'une certaine manipulation.Réponses:
JavaScript (ES6),
552532 octetsCe monstre sale vient directement des profondeurs de l'enfer du golf de code.
Attend une chaîne d'entrée sans aucun espace.
Essayez-le en ligne!
la source
btoa`ÍêèÒ‰ÞÒÜ(ÒØkyí¢êô~+ÞÒȱÒǯz}ŠmÒx§{K^ŸG¥z÷§ÒÜ–÷´¶«ÓGâM4z(!ÓKpz}-†*ô~Šô~'ôÓG¢‚4¶.±©ÝÒmÒÚôªæ�¯IÞ�«b½í)–ë4š)î³Kb™ë4v+âuçu×Vò`.replace(111,' ')
.Perl 6 ,
434 401 387359 octetsEssayez-le en ligne!
Certainement matière à amélioration ici. Je dis cela, mais je continue de remarquer des cas marginaux que je n'ai pas traités
:(
. Suppose que l'entrée a des opérateurs séparés par des espaces et que le négatif d'un nombre n'est pas séparé.Explication:
la source
Rubis + Swift 4,
283279270 octetsEssayez-le en ligne!
Je dois être fou de proposer une telle solution Frankenstein, mais d'une part, il est très tentant d'utiliser la fonctionnalité intégrée de Swift pour cette tâche, et d'autre part, le traitement des chaînes avec Regexes dans Swift semble être une catastrophe de golf.
Par conséquent, j'ai décidé de faire un traitement de chaîne de base dans Ruby, mais pour épeler les nombres, je les stocke dans un fichier source Swift, exécute Swift dans une commande shell et collecte la sortie.
Il s'avère que le formateur de nombres "spellOut" de Swift fait presque exactement ce dont nous avons besoin, sauf en insérant des tirets inutiles pour les nombres à deux chiffres, comme dans
twenty-two
. En fait, même la sortie en virgule flottante au formatinteger part point digit digit...
est bonne, mais voici la mise en garde - il n'y a pas de précision infinie, et avec des nombres suffisamment grands ou beaucoup de chiffres décimaux, les résultats vont mal. Par conséquent, j'ai dû séparer les parties entières et fractionnaires et alimenter la fraction chiffre par chiffre.la source
sfk , 853 octets
Essayez-le en ligne!
Les opérateurs et les nombres doivent être séparés par au moins un espace.
la source
Nettoyer ,
766... 687 octetsEssayez-le en ligne!
Attend une chaîne sans espace.
la source
05AB1E ,
315295282276 octetsPrend la saisie sans aucun espace.
Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
Voir cette astuce de mes 05AB1E (sections ? Comment utiliser le dictionnaire , ? Comment les chaînes Compresser ne font pas partie du dictionnaire , et ? Comment compresser les grands entiers ) pour comprendre pourquoi:
'¢…
est"negative"
;'¡×
est"zero"
;“†ìˆÈŒšï¿Ÿ¯¥Š“
est"four five six seven eight nine"
;'…§
est"teen"
;…€µ‚•„í
est"one two three"
;…—¿áÓÁÏ
est"ten eleven twelve"
;'°¡
est"hundred"
;'¾ß
est"ion"
;…¡›‡È±°
est"billion million thousand"
;'…®
est"point"
; et“‰´Øè„ƺߓ
est"plus minus times divided"
..•6b©•
est"thir"
;.•4º»Ÿć'Rþн•
est"twenthirforfif"
; et.•cG3₅¦„¥F•
est"quadrilltrill"
.ŽH$
est4433
.la source
Python 2 ,
790774 octetsEssayez-le en ligne!
Tant de mauvaises pratiques. Cela faisait presque mal d'écrire ....
Attend une chaîne non unicode sans espace en entrée.
Explication:
J'ai réduit d'environ 150 octets lors de l'écriture de l'explication. Qu'on ne dise jamais que commenter / réviser votre code n'est pas utile!
la source