Aquí hay uno simple para estirar los músculos de compresión. Su código (un programa completo) debe generar la representación en inglés detallada de todos los números cardinales del 1 al 100, y luego todos los números ordinales del 1 al 100. Los números en cada lista deben estar delimitados por comas y espacios, y correctamente con guión. Cada lista debe comenzar con una letra mayúscula y concluir con un punto. Las dos listas deben estar separadas por una nueva línea.
En aras de la claridad, debe producir este flujo de bytes exacto:
One, two, three, four, five, six, seven, eight, nine, ten, eleven, twelve, thirteen, fourteen, fifteen, sixteen, seventeen, eighteen, nineteen, twenty, twenty-one, twenty-two, twenty-three, twenty-four, twenty-five, twenty-six, twenty-seven, twenty-eight, twenty-nine, thirty, thirty-one, thirty-two, thirty-three, thirty-four, thirty-five, thirty-six, thirty-seven, thirty-eight, thirty-nine, forty, forty-one, forty-two, forty-three, forty-four, forty-five, forty-six, forty-seven, forty-eight, forty-nine, fifty, fifty-one, fifty-two, fifty-three, fifty-four, fifty-five, fifty-six, fifty-seven, fifty-eight, fifty-nine, sixty, sixty-one, sixty-two, sixty-three, sixty-four, sixty-five, sixty-six, sixty-seven, sixty-eight, sixty-nine, seventy, seventy-one, seventy-two, seventy-three, seventy-four, seventy-five, seventy-six, seventy-seven, seventy-eight, seventy-nine, eighty, eighty-one, eighty-two, eighty-three, eighty-four, eighty-five, eighty-six, eighty-seven, eighty-eight, eighty-nine, ninety, ninety-one, ninety-two, ninety-three, ninety-four, ninety-five, ninety-six, ninety-seven, ninety-eight, ninety-nine, one hundred.
First, second, third, fourth, fifth, sixth, seventh, eighth, ninth, tenth, eleventh, twelfth, thirteenth, fourteenth, fifteenth, sixteenth, seventeenth, eighteenth, nineteenth, twentieth, twenty-first, twenty-second, twenty-third, twenty-fourth, twenty-fifth, twenty-sixth, twenty-seventh, twenty-eighth, twenty-ninth, thirtieth, thirty-first, thirty-second, thirty-third, thirty-fourth, thirty-fifth, thirty-sixth, thirty-seventh, thirty-eighth, thirty-ninth, fortieth, forty-first, forty-second, forty-third, forty-fourth, forty-fifth, forty-sixth, forty-seventh, forty-eighth, forty-ninth, fiftieth, fifty-first, fifty-second, fifty-third, fifty-fourth, fifty-fifth, fifty-sixth, fifty-seventh, fifty-eighth, fifty-ninth, sixtieth, sixty-first, sixty-second, sixty-third, sixty-fourth, sixty-fifth, sixty-sixth, sixty-seventh, sixty-eighth, sixty-ninth, seventieth, seventy-first, seventy-second, seventy-third, seventy-fourth, seventy-fifth, seventy-sixth, seventy-seventh, seventy-eighth, seventy-ninth, eightieth, eighty-first, eighty-second, eighty-third, eighty-fourth, eighty-fifth, eighty-sixth, eighty-seventh, eighty-eighth, eighty-ninth, ninetieth, ninety-first, ninety-second, ninety-third, ninety-fourth, ninety-fifth, ninety-sixth, ninety-seventh, ninety-eighth, ninety-ninth, one hundredth.
Este es el código de golf, la respuesta más corta en bytes gana.
Pyth,
366342340 bytesDemo en vivo.
Versión de 342 bytes:
Versión de 366 bytes:
fuente
PHP - 491 bytes
Pequeño truco aquí para los cardenales (estoy usando la clase NumberFormatter que viene por defecto con PHP):
(se agregaron algunas líneas nuevas para facilitar la lectura)
fuente
@
(-4 bytes). Use una nueva línea en lugar de escribir\n
(-1 byte). Ponga la definición de$z
en la inicialización del segundofor
bucle (-1 byte).PHP 5.3+, 195 bytes
Eso incluye el carácter de nueva línea.
Es parte de la
NumberFormatter
clase, al igual que la respuesta de razvan . Excepto que deletreo tanto los cardenales como los ordinales según la UCI.Relacionado: /programming//a/19411974/404623
fuente
Oracle SQL 231 bytes
SqlFiddleLiveDemo
fuente
JavaScript ES6,
562464 bytes¡Ni siquiera ha terminado de jugar golf todavía!
Si esto no funciona, es posible que deba agregar un volcado hexagonal debido a todos los caracteres especiales . Avíseme si este es el caso y me pondré en contacto con usted mañana.
Si son errores tipográficos, házmelo saber.
Código en pastebin (Probado en Safari Nightly)
Explicación
Esto puede parecer un montón de personajes ilegibles, pero en realidad es bastante simple.
Comenzamos generando los cardenales. Esta matriz se comprime usando la
btoa
función.Para recorrer un "rango" usamos lo siguiente:
Ahora generamos una matriz de longitud 89 usando. El
...
es lo que descomprime la matrizLuego mapearlo, i es el índice:
Ahora para la condición,
i < 1
o si es el primer elemento, usaremos una versión en mayúscula de uno / primeroDe lo contrario ... si es menor que 20, producimos once ... diecinueve
De lo contrario ... usando
(i-i%10)/10
obtenemos el último dígito del número. Agregamos 18 para compensar 1..19. Agregamos ay-
luego agregamos el último dígito, o i% 10Finalmente, agregamos 'cien' hasta el final porque no lo hacemos.
Repetimos esto para ambos tipos de números y separamos con una nueva línea
fuente
hundred
. En general: buen trabajo | +1C ++
704642620602Ningún uso de la biblioteca que no sea
ostream
operator<<()
parachar*
s.Versión en vivo .
Con algunos espacios en blanco y algunos comentarios:
La cadena comprimida se decodifica
a
enb
:Sin las nuevas líneas. Durante la descompresión, las
|
s se reemplazan por'\0'
y las~
s se reemplazan por' '
(peculiaridad de la forma en que los caracteres se codifican en ASCII imprimible). Estas cadenas 'primitivas' se buscan por índice en lab
matriz utilizando lap
función y se utilizan para ensamblar la salida.La compresión es un esquema simple similar a LZ donde los caracteres se codifican como literales o como un desplazamiento negativo en el búfer y una longitud de ejecución (codificada en dos caracteres) si se encuentra una coincidencia de longitud> = 3. La cadena podría comprimirse aún más con caracteres no imprimibles, pero me gusta que mi código sea seguro para copiar y pegar :)
fuente
Javascript (ES6), 713
Similar a mi segundo envío de PHP sobre esta pregunta . (2444 - 713) / 2444 = 70.8% de compresión.
Violín
fuente
Mathematica
415 391407Los cardenales están dados por
IntegerName[n]
. Los ordinales se derivan de los cardenales.Salida:
fuente
eightth
"first" -> "\nFirst"
a"fir" -> "\nFir"
para guardar 4 bytes.StringJoin
, entonces "vigésimo primero ... treinta y uno ..." se convertirá en "vigésimo primero ... treinta y uno ...".JavaScript (ES6), 480
fuente
PHP - 842 bytes
Omitiendo las etiquetas regulares de inicio y finalización de PHP, la compresión es 1 - 842/2445 = 65.6%
Básicamente obteniendo la salida de
base64_encode(gzdeflate($input, 9));
e invirtiendo las operaciones. Obviamente, si optara por la salida en 8 bits puros frente a base-64, sería un 25% más pequeño, pero con el riesgo de encontrar caracteres de escape o no imprimibles.fuente