El objetivo de este código de golf es convertir enteros a palabras en inglés.
El programa solicita entradas. Si esta entrada no es un entero, imprime NaN
. Si es un número entero, conviértalo a palabras en inglés e imprima estas palabras. Entrada mínima: 0 (cero). Entrada máxima: 9000 (nueve mil).
Entonces, 5
devuelve five
(el caso no importa) y 500
devuelve five hundred
o five-hundred
(los guiones no importan).
Algunas otras reglas:
A one
antes hundred
o thousand
es opcional: one hundred
es correcto, pero hundred
también (si la entrada es, 100
por supuesto).
La palabra and
en, por ejemplo, también one hundred and forty five
es opcional.
El espacio en blanco es importante. Entonces, para 500
, five-hundred
o five hundred
es correcto, pero fivehundred
no lo es.
¡Buena suerte!
Respuestas:
Perl 281 bytes
Se agregaron nuevas líneas para la cordura horizontal. Lo anterior se puede usar de forma interactiva o canalizando un valor a través de stdin.
Funciona correctamente para todos los valores enteros en el rango [0, 19999] , los valores fuera de este rango exhiben un comportamiento indefinido. Los valores no enteros se truncarán hacia cero y, como tal, solo se informarán los valores que realmente no sean numéricos
NaN
.Uso de la muestra:
Salida de muestra:
fuente
NaN
".JavaScript (375)
Probablemente un intento terrible, pero de todos modos, aquí va ...
Bonito impreso (como una función):
Conversión de muestra (tenga en cuenta que incluso
NaN
sale cuando está fuera de límites, es decir, entrada no válida):fuente
+1
es bastante difícil hacerlo mejor en un lenguaje como javascript. (puedes quitar el espacioN(s,z) {return
para ahorrar 1 personaje)O
cadena. Lo arreglaré ..Mathematica
6057Uso:
Editar:
fuente
Ceceo,
7256 caracteresMe doy cuenta de 1) que esto es viejo, y 2) que depende completamente de la biblioteca estándar para funcionar, pero el hecho de que pueda hacer que el sistema de impresión c-lisp haga este tipo de cosas siempre me ha impresionado. Además, esto de hecho toma la entrada de un usuario, la convierte e imprime.
Tiene un total de 72 caracteres.
:junk-allowed
hace que parse-integer devuelva nil en caso de error en lugar de generar un error.~:[if-nil~;if-non-nill]
condicional predicado en nil, maneja NaN donde sea necesario~:*
realiza una copia de seguridad de la interpretación del argumento para volver a consumir la entrada~r
imprime el número como una cadena de palabras en inglés, según lo solicitado, excepto con la puntuación corregida completaMuestra:
Información de Lisp principalmente de Practical Common Lisp .
Edición, golf correctamente hasta 56 caracteres
Esta versión funciona de manera bastante diferente. En lugar de leer una línea y convertirla, invoca al lector de lisp para interpretar la entrada como una expresión s de lisp, intenta usarla como un número y, si se producen errores, los ignora y producen nil para alimentar la cadena de formato condicional. Esta puede ser la primera vez que veo que lisp produce un programa realmente conciso ... ¡Diversión!
(read)
Invoca al lector / analizador de lisp para leer una expresión de la entrada estándar y convertirla en un objeto apropiado(floor)
intenta convertir cualquier tipo numérico en el entero inferior más cercano, los tipos no numéricos provocan un error(ignore-errors ...)
hace lo que dice en la lata, atrapa e ignora cualquier error en la expresión encerrada, regresando nil para alimentar la rama NaN de la cadena de formatofuente
PHP,
327310308 bytestoma el número como parámetro, funciona para 0 <= n <= 12999
Descompostura
fuente
SAS, 70 caracteres
Las declaraciones
window
ydisplay
abren el símbolo del sistema SAS. La entrada paran
va en la línea 1. Esto aprovecha el formato SASwords.
que imprimirá el número como una palabra o serie de palabras con "y", "" y "-" según corresponda.fuente
PHP
777 caracteres
Este es definitivamente un intento terrible, pero no puedes acusarme de aprovechar las lagunas, además es un número muy afortunado. Gracias a ProgramFOX por el consejo.
Mano larga
fuente
array('zero','one','two')
.['zero','one','two']
(php 5.4+). Y si no te importaE_NOTICE
,[zero,one,two]
también funcionaría.Python 2.x - 378
Derivada de la respuesta de Fireflys, aunque cambiando
P
para incluir millones o trillones, etc., podría usarse recursivamente para cualquier rango de números positivos. Esto también admite valores de hasta 999,999Prueba de muestra (la entrada es
<<<
, la salida es>>>
):Aunque, si alguien puede explicar este extraño problema de "desbordamiento del búfer" que tengo, eso sería genial ...
fuente
print divmod(-2,1000) #-> (-1, 998)
-1*1000
y un "resto" de998
.SmileBASIC,
365Trescientos cuarenta y siete bytesHay un espacio final si los últimos uno o dos dígitos son 0.
fuente
MOO - 55 caracteres
player:tell($string_utils:english_number(read(player)))
O, si no necesito imprimir en "stdout" - 42 caracteres:
$string_utils:english_number(read(player))
Nota: este código no imprime ningún aviso en la salida estándar e imprime en
zero
lugar deNaN
cuando la entrada no es un número.Como beneficio adicional, este código puede manejar cualquier número dentro de los límites del lenguaje mu (
2147483647
--2147483648
).fuente
Wolfram Language
2740 bytesHaciendo uso de la función nativa
IntegerName
,Lo anterior solicita la entrada del usuario. La implementación actual devuelve "NaN" si el usuario ingresa algo que no sea un entero.
Algunos ejemplos (con entradas preestablecidas) :
fuente
Python 2 , 333 bytes
Pruébalo en línea!
Esto es bueno para 1 a 999,999, inclusive.
fuente
Pyth,
239242 bytesLa entrada es un entero en el rango [0-999,999]. Pruébelo en línea aquí . Explicación pendiente.
Versión anterior, operación muy similar, pero no admite 0:
Explicación de la versión anterior:
fuente