Hubo un desafío para convertir un número a su número en inglés , pero eso fue demasiado sencillo. Dado un número 0–100, su tarea es generar el número correspondiente en francés. El sistema de numeración francés tiene una lógica más compleja que el inglés:
Numeral Numero --------------- 0 zéro (nota el acento) 1 un 2 deux 3 trois 4 quatre 5 cinq 6 seis 7 sept 8 huit 9 neuf 10 dix 11 onze 12 douze 13 treize 14 quatorze 15 quinze 16 apoderarse 17 dix-sept (literalmente diez siete) 18 dix-huit 19 dix-neuf 20 vingt 21 vingt et un (sin guiones) 22 vingt-deux ... 30 trente ... 40 quarante ... 50 cinquante ... 60 soixante ... 70 soixante-dix (literalmente sesenta y diez) 71 soixante et onze ... 80 quatre-vingts (tenga en cuenta la s; literalmente cuatro años veinte) 81 quatre-vingt-un (tenga en cuenta los guiones) ... 90 quatre-vingt-dix 91 quatre-vingt-onze ... 99 quatre-vingt-dix-neuf (4 * 20 + 10 + 9) 100 centavos
Para obtener una lista completa, siga http://quizlet.com/996950/ ( http://www.webcitation.org/6RNppaJx0 ).
Otras reglas / explicaciones
- Siempre habrá un guión entre las palabras EXCEPTO cuando el número termine en 1.
- Cuando el número termina en 1, la palabra et (significado y ) se agrega antes de un u onze . (31 = trente et un)
- Sin embargo, 81 y 91 tienen el mismo formato que los otros números. (81 = quatre-vingt-un)
- A los 60, el sistema cambia de la base 10 a la base 20.
- Hay algunas discrepancias menores en la web sobre esto; consulte la lista vinculada anteriormente para preguntas.
- Las lagunas prohibidas por defecto no están permitidas.
- No se permite el uso de una fuente externa como un sitio web, así como bibliotecas, API, funciones o similares que conviertan números en números o traduzcan al francés.
- Este es el código de golf , por lo que gana la respuesta con la menor cantidad de bytes.
- Si está disponible, enlace a un compilador en línea para permitir una prueba fácil de su código.
Entrada
- La entrada se tomará de la forma en que su idioma tome entrada (STDIN, línea de comando, etc.)
- La entrada será una sola cadena, que consta de un número entero entre 0 y 100 inclusive (ceros iniciales opcionales).
- Puede suponer que la entrada siempre estará bien formada.
Salida
- El resultado se enviará al método más conveniente para su idioma. (STDOUT, cuadro de diálogo, etc.)
- El caso no importa en la salida.
Ejemplos
Pruebe su código contra estos:
De entrada y salida ------------- 0 zéro 18 dix-huit 51 cinquante et un 80 quatre-vingts 91 quatre-vingt-onze 99 quatre-vingt-dix-neuf
code-golf
number
kolmogorov-complexity
NinjaOsoMono
fuente
fuente
Respuestas:
JavaScript (ES6) 318
321Editar corrección de errores (gestión de ceros iniciales) y jugar más golf
Crédito por el truco del caso camello @ Core1024
Con entrada / salida a través de una ventana emergente
Como una función comprobable
Para probar en la consola FireFox o FireBug
Prueba de salida
fuente
Haskell, 390 bytes
Sin golf
Los lenguajes de programación funcional son bastante adecuados para este trabajo.
fuente
main=interact$f.read
y guardar algunos caracteres.interact
. Actualizado.Rubí, 333 bytes
En su mayoría, son solo dos tablas de búsqueda y un grupo de operadores ternarios que codifican todas las reglas extrañas y le indican qué tabla de búsqueda usar cuando. Avísame si quieres saber más. ;)
fuente
80
debería mostrar quatre-vingts, con una s al final.Python - 344
(348) (380) (445) (537)bytesGracias a grc, Ray e Isaac por su ayuda en el proceso de golf.
El código consiste en la definición inicial del diccionario y una comprensión de la lista que completa los espacios en blanco con la unión de los elementos del diccionario.
Puede consultar el código en línea en repl.it
Mis últimos intentos de jugar golf en este código han sido renunciar al proceso de generación y con esa reducción perfeccionar la función para generar el número solicitado en el acto. Sin embargo, dado que los números de los años 60 y 80 necesitan elementos no calculados, la lucha ha sido crear dicha función mientras se disminuye el código.
fuente
r=range
, este truco para las líneas 2 y 3, y sólo un espacio para el sangrado. Y puede guardar 65 bytes cond=dict(zip(r(17)+r(20,70,10)+[80,100],'zéro un deux ... quatre-vingt cent'.split()))
r=range
truco lo conocía, pero olvidé agregarlo cuando escribí la primera revisión. Todo lo demás era relativamente nuevo para mí, así que gracias están en orden. Sin embargo, una nota, el código no funciona en Python 3.x a menos que laprint
declaración se convierta en una función y lasr
funciones en el dict se conviertan en listas.int(input())
,input()
es suficiente.b=a/60*10+10
enf(a)
entonces se podría usara-a%b
ya%b
para sus claves de diccionario. Además, no necesita espacio1 or
, y la cuarta línea se puede acortar[f(v)for v in r(100)if v not in d]
. Sin embargo, no he probado nada de esto.if v not in d
->if(v in d)<1
guarda un personaje. Si el punto y coma separa las dos partes de su función, puede ponerlo todo en una línea.Python - 392 bytes
Tiene una lista con números base que utiliza para generar los otros números. La mayor parte de la lógica de generación está en la comprensión de la lista en la línea 2, utilizando la indexación de lista para condicionales. Una vez que se genera la lista, busca el número ingresado y lo imprime.
Editar: acortado de 426 bytes con la punta de grc.
fuente
a='_un_deux_trois ... quinze_seize'.split('_')
Python 3, (503 bytes)
Comprima la tabla usando bzip2 y luego use la codificación ascii85 para almacenar el resultado. La mesa es:
Método muy ingenuo, pero no es tan malo.
Golfed
Sin golf
Prima
¿Puedes encontrar la palabra "Vim" en la cadena comprimida?
fuente
Sh0W
. No pude encontrar a Vim, ni tú tampoco.Golpetazo,
456 440 421408Asume una entrada válida (entero de 0 a 100 con cualquier número de ceros iniciales).
fuente
JavaScript 459 (sin carcasa de camello)
@ edc65 no te lo puede quitar ...;)
A="0un0deux0trois0quatre0cinq0six0sept0huit0neuf0dix0onze0douze0treize0quatorze0quinze0seize0dix-sept0dix-huit0dix-neuf".split(0);S="soixante";Q=A[4]+"-vingt";T=10;V=20;N=59;for(b=5;1<b--;)for(c=V;c--;)X=b*V+c,A[X]=[,["vingt","trente"],["quarante","cinquante"],[S,S],[Q,Q]][b][c/T|0]+(X%T?X>N?X%V==T?"-dix":"":"":"")+(1>X%T?"":(1==X%(X>N?V:T)|71==X)&81!=X?" et ":"-")+(X>N&X%V==T?"-dix":A[c%(X>N?V:T)]);A[0]="zéro";A[80]+="s";A[100]="cent";alert(A[prompt()])
fuente