Resumen
Se le dijo a un maestro que preparara problemas de palabras para los estudiantes. Le dan una lista de ecuaciones y le dicen que las escriba como el problema verbal correspondiente. Sin embargo, ella es muy perezosa, por lo que no le pone mucha creatividad. En cambio, ella simplemente lo escribe literalmente. Por ejemplo, cuando lee 1+1
, escribe one plus one
, 47 * 2
se convertiría forty seven times two
y 56.2 / 7.4
se convertiría fifty six point two divided by seven point four
.
Escribe un código para ayudar a este maestro perezoso.
Detalles
- Los números pueden incluir un punto decimal y un signo negativo.
- Los números deben escribirse en la escala corta. (es decir,
1,000,000,000
esone billion
) - Los números pueden ir hasta 999,999,999,999,999,999 (
nine hundred ninety nine quadrillion...nine hundred ninety nine
). - Los grupos de ceros deben quedar fuera. por ejemplo no lo
1,000,000
es .one million
one million zero thousand zero hundred
- Puede haber arbitrariamente muchos dígitos más allá del punto decimal.
- Los dígitos después del punto decimal se deben enumerar dígito a dígito. por ejemplo no lo
12.34
es .twelve point three four
twelve point thirty four
- Dos números siempre están separados por un operador.
- Los operadores válidos son más (
+
), menos (-
), veces (*
) y divididos por (/
). - No hay paréntesis.
- Los números como
1234
pueden incluir opcionalmente unand
en su salida, como enone thousand two hundred *and* thirty four
. - Se pueden ignorar las comas y los espacios en blanco en la entrada.
Ejemplos
Entrada: 24 + 65
Salida:twenty four plus sixty five
Entrada: 3.33333 - 0
Salida:three point three three three three three minus zero
Entrada: 3.6 * 18.18 / 999.0
Salida:three point six times eighteen point one eight divided by nine hundred ninety nine point zero
Entrada: 1-1
Salida:one minus one
Entrada: 1+-1
Salida:one plus negative one
Entrada: 1,000,000,000 + 0.2
Salida:one billion plus zero point two
Entrada: 123,000,456,789,012,345.6789
Salida: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
Entrada: -4.3 * 7
Salida:negative four point three times seven
Entrada: -1-1--1
Salida:negative one minus one minus negative one
123,456,789,012,345.6789
a los ejemplos? Debería cubrir muchos casos de prueba.minus
lugar denegative
?/
esover
y un número negativo esminus
, por lo que necesita algo de manipulación.Respuestas:
JavaScript (ES6),
552532 bytesEste monstruo sucio viene directamente de las profundidades del infierno de golf de códigos.
Espera una cadena de entrada sin espacios en blanco.
Pruébalo en línea!
fuente
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 bytesPruébalo en línea!
Definitivamente margen de mejora aquí. Digo eso, pero sigo notando casos extremos que no he manejado
:(
. Asume que la entrada tiene operadores separados por espacios en blanco y que el negativo de un número no está separado.Explicación:
fuente
Ruby + Swift 4,
283279270 bytesPruébalo en línea!
Debo estar loco para proponer tal solución de Frankenstein, pero por un lado, es muy tentador usar la funcionalidad incorporada de Swift para esta tarea, y por otro lado, procesar cadenas con Regexes en Swift parece ser una catástrofe de golf.
Por lo tanto, decidí hacer el procesamiento básico de cadenas en Ruby, pero para deletrear los números, los almaceno en un archivo fuente Swift, ejecuto Swift en un comando de shell y recopilo la salida.
Resulta que el formateador de números "spellOut" de Swift hace casi exactamente lo que necesitamos, excepto insertar guiones innecesarios para números de dos dígitos, como en
twenty-two
. De hecho, incluso la salida de coma flotante en el formato deinteger part point digit digit...
es buena, pero aquí viene la advertencia: no hay precisión infinita, y con números lo suficientemente grandes o una gran cantidad de dígitos decimales, los resultados salen mal. Por lo tanto, tuve que separar las partes enteras y fraccionarias y alimentar la fracción dígito por dígito.fuente
sfk , 853 bytes
Pruébalo en línea!
Requiere que los operadores y los números estén separados por al menos un carácter de espacio.
fuente
Limpio ,
766... 687 bytesPruébalo en línea!
Espera una cadena sin espacios en blanco.
fuente
05AB1E ,
315295282276 bytesToma entrada sin espacios.
Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
Consulte esta sugerencia mía 05AB1E (secciones ¿Cómo usar el diccionario ? , ¿Cómo comprimir cadenas que no forman parte del diccionario? Y ¿Cómo comprimir enteros grandes? ) Para comprender por qué:
'¢…
es"negative"
;'¡×
es"zero"
;“†ìˆÈŒšï¿Ÿ¯¥Š“
es"four five six seven eight nine"
;'…§
es"teen"
;…€µ‚•„í
es"one two three"
;…—¿áÓÁÏ
es"ten eleven twelve"
;'°¡
es"hundred"
;'¾ß
es"ion"
;…¡›‡È±°
es"billion million thousand"
;'…®
es"point"
; y“‰´Øè„ƺߓ
es"plus minus times divided"
..•6b©•
es"thir"
;.•4º»Ÿć'Rþн•
es"twenthirforfif"
; y.•cG3₅¦„¥F•
es"quadrilltrill"
.ŽH$
es4433
.fuente
Python 2 ,
790774 bytesPruébalo en línea!
Tantas malas prácticas. Esto casi duele al escribir ...
Espera una cadena no unicode sin espacios en blanco como entrada.
Explicación:
Reduje unos 150 bytes mientras escribía la explicación. ¡Que nunca se diga que comentar / revisar su código no es útil!
fuente