Breve y dulce descripción del desafío:
Basado en las ideas de varias otras preguntas en este sitio, su desafío es escribir el código más creativo en cualquier programa que tome como entrada un número escrito en inglés y lo convierta a un número entero.
Especificaciones realmente secas, largas y completas:
- Su programa recibirá como entrada un número entero en inglés en minúsculas entre
zero
enine hundred ninety-nine thousand nine hundred ninety-nine
inclusive. - Debe generar solo la forma entera del número entre
0
y999999
y nada más (sin espacios en blanco). - La entrada NO contendrá
,
oand
, como enone thousand, two hundred
ofive hundred and thirty-two
. - Cuando los lugares de las decenas y unidades son distintos de cero y el lugar de las decenas es mayor que
1
, estarán separados por un carácter HYPHEN-MINUS en-
lugar de un espacio. Lo mismo para los diez mil y miles de lugares. Por ejemplo,six hundred fifty-four thousand three hundred twenty-one
. - El programa puede tener un comportamiento indefinido para cualquier otra entrada.
Algunos ejemplos de un programa con buen comportamiento:
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
Abrahán
fuente
fuente
Respuestas:
Applescript
Una combinación tonta y hacky que podría molestar a algunas personas de Cupertino / Mountain View, pero creo que es una combinación creativa tonta y hacky.
Utiliza texto a voz OSX para pronunciar el número de texto y la búsqueda de audio de Google para escucharlo y convertirlo en un número entero.
Requisitos
Es posible que sea necesario ajustar los tiempos de retraso según el tiempo de carga de Chrome y el tiempo de búsqueda de Google.
Entrada de ejemplo:
Salida de ejemplo:
fuente
Bash,
936455 caracteres *En el fantástico
bsd-games
paquete que está disponible en la mayoría de los sistemas operativos Linux, hay un pequeño juguete de línea de comandos llamadonumber
. Convierte los números en texto en inglés, es decir, hace exactamente lo contrario de esta pregunta. Realmente es exactamente lo contrario: todas las reglas en la pregunta son seguidas pornumber
. Es casi demasiado bueno para ser una coincidencia.Por supuesto,
number
no responde la pregunta. Lo queremos al revés. Pensé en esto por un tiempo, probé el análisis de cadenas y todo eso, luego me di cuenta de que puedo llamarnumber
a todos los números 999.999 y ver si algo coincide con la entrada. Si es así, la primera línea donde coincide tiene el doble del número de línea que estoy buscando (number
imprime una línea de puntos después de cada número). Simple como eso. Entonces, sin más preámbulos, aquí está el código completo para mi entrada:Incluso hace un cortocircuito, por lo que convertir "dos" es bastante rápido, e incluso los números más altos generalmente se decodifican en menos de un segundo en mi caja. Aquí hay un ejemplo de ejecución:
Por supuesto, necesitará tener
number
instalado para que esto funcione.*: Sí, lo sé, esto no es un
code-golf
desafío, pero la brevedad es la única cualidad de discernimiento de mi entrada, así que ... :)fuente
number
inverso es lo más creativo de esta respuesta. El golf también es bueno :)Javascript
¿Te gustan algunos
eval()
?Ejecute este script en la consola de su navegador.
Editar: Gracias por los comentarios. Errores solucionados (de nuevo).
fuente
twelve
cuando regresa23
."twenty"
.seven thousand three hundred thirty five
dame10335
Pitón
Solo para que la pelota ruede.
fuente
Perl + CPAN
¿Por qué reinventar la rueda, cuando ya se ha hecho?
Este programa lee cadenas en inglés de la entrada estándar (o de uno o más archivos especificados como argumentos de línea de comando), uno por línea, e imprime los números correspondientes a la salida estándar.
He probado este código utilizando las entradas de muestra del desafío, así como un exhaustivo conjunto de pruebas que consta de los números del 0 al 999999 convertidos a texto utilizando la
number
utilidad bsd-games (¡gracias, Wander Nauta!), Y se analiza correctamente todos ellos. Como beneficio adicional, también comprende entradas como pminus seven
. Ej. (−7),four and twenty
(24),four score and seven
(87),one gross
(144),a baker's dozen
(13),eleventy-one
(111) ygoogol
(10 100 ).( Nota: además del propio intérprete de Perl, este programa también requiere el módulo CPAN Lingua :: ES :: Words2Nums . Aquí hay algunas instrucciones para instalar módulos CPAN . Los usuarios de Debian / Ubuntu Linux también pueden instalar este módulo a través del administrador de paquetes APT como liblingua-en-words2nums-perl .)
fuente
Pitón
Una solución recursiva general, con comprobación de validez. Podría simplificarse para el rango de números requerido, pero supongo que aquí hay que presumir:
fuente
VBScript 474
Esta es una respuesta bastante rutinaria ... desafortunadamente, es tan rutinaria que @Snack prácticamente publicó el mismo proceso pero antes que yo.
fuente
Haskell
Supongo que es similar a otras soluciones recursivas, pero me tomé el tiempo para hacerlo limpio.
Aquí está la fuente completa con todas las explicaciones: http://ideone.com/fc8zcB
fuente
Lisp común, 94
La conversión de número a texto está integrada en CL, pero no al revés. Construye un mapeo inverso para los números y verifica la entrada en él.
fuente