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
zeroenine hundred ninety-nine thousand nine hundred ninety-nineinclusive. - Debe generar solo la forma entera del número entre
0y999999y nada más (sin espacios en blanco). - La entrada NO contendrá
,oand, como enone thousand, two hundredofive 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-gamespaquete 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,
numberno 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 llamarnumbera 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 (numberimprime 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
numberinstalado para que esto funcione.*: Sí, lo sé, esto no es un
code-golfdesafío, pero la brevedad es la única cualidad de discernimiento de mi entrada, así que ... :)fuente
numberinverso 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
twelvecuando regresa23."twenty".seven thousand three hundred thirty fivedame10335Pitó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
numberutilidad 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