Voici un simple pour étirer vos muscles de compression. Votre code (un programme complet) doit sortir la représentation anglaise épelée de tous les nombres cardinaux de 1 à 100, puis tous les nombres ordinaux de 1 à 100. Les chiffres de chaque liste doivent être délimités par des virgules et des espaces et correctement trait d'union. Chaque liste doit commencer par une seule majuscule et se terminer par un point. Les deux listes doivent être séparées par une nouvelle ligne.
Par souci de clarté, vous devez produire ce flux d'octets exact:
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.
C'est le golf de code, la réponse la plus courte en octets gagne.
Pyth,
366342340 octetsDémo en direct.
Version 342 octets:
Version 366 octets:
la source
PHP - 491 octets
Petit triche ici pour les cardinaux (j'utilise la classe NumberFormatter qui vient par défaut avec PHP):
(ajout de quelques nouvelles lignes pour plus de lisibilité)
la source
@
(-4 octets). Utilisez une nouvelle ligne au lieu d'écrire\n
(-1 octet). Mettez la définition de$z
dans l'initialisation de la deuxièmefor
boucle (-1 octet).PHP 5.3+, 195 octets
Cela inclut le caractère de nouvelle ligne.
Cela fait partie de la
NumberFormatter
classe, tout comme la réponse de razvan . Sauf que j'épelle les cardinaux et les ordinaux selon l'ICU.En relation: /programming//a/19411974/404623
la source
Oracle SQL 231 octets
SqlFiddleLiveDemo
la source
JavaScript ES6,
562464 octetsPas encore joué au golf!
Si cela ne fonctionne pas, je devrais peut-être ajouter un hexdump à cause de tous les caractères spéciaux. Veuillez me faire savoir si c'est le cas et je vous contacterai demain.
S'il y a des fautes de frappe, faites-le moi savoir.
Code dans pastebin (testé sur Safari Nightly)
Explication
Cela peut ressembler à un tas de personnages tronqués mais c'est en fait assez simple.
Nous commençons par générer les cardinaux. Ce tableau est compressé à l'aide de la
btoa
fonction.Pour parcourir une "plage", nous utilisons les éléments suivants:
Maintenant, nous générons un tableau de longueur 89 en utilisant. C'est
...
ce qui décompresse le tableauEnsuite, mappez-le, i est l'index:
Maintenant, pour la condition,
i < 1
ou s'il s'agit du premier élément, nous utiliserons une version en majuscule de un / premierSinon ... si c'est moins de 20, on en sort onze ... dix-neuf
Sinon ... en utilisant
(i-i%10)/10
nous obtenons le dernier chiffre du nombre. Nous y ajoutons 18 pour compenser 1..19. Nous ajoutons un-
, puis ajoutons le dernier chiffre, ou i% 10Enfin, nous ajoutons «cent» à la fin car nous ne le faisons pas.
Nous répétons cela pour les deux types de numéros et séparons avec une nouvelle ligne
la source
hundred
. Dans l'ensemble: excellent travail | +1C ++
704642620602Pas d'utilisation de bibliothèque autre que
ostream
operator<<()
pour l'char*
art.Version en direct .
Avec quelques espaces et quelques commentaires:
La chaîne compressée est décodée
a
enb
:Sans les nouvelles lignes. Pendant la décompression, les
|
s sont remplacés par'\0'
et les~
s sont remplacés par' '
(bizarrerie de la façon dont les caractères sont codés en ASCII imprimable). Ces chaînes «primitives» sont ensuite recherchées par index dans leb
tableau à l'aide de lap
fonction et utilisées pour assembler la sortie.La compression est un schéma simple de type LZ dans lequel les caractères sont soit codés sous forme de littéraux, soit sous forme de décalage négatif dans le tampon et une longueur d'exécution (codée en deux caractères) si une correspondance de longueur> = 3 est trouvée. La chaîne pourrait être compressée davantage à l'aide de caractères non imprimables, mais j'aime que mon code soit copié et collé en toute sécurité :)
la source
Javascript (ES6), 713
Similaire à ma deuxième soumission PHP sur cette question . (2444 - 713) / 2444 = 70,8% de compression.
Violon
la source
Mathematica
415 391407Les cardinaux sont donnés par
IntegerName[n]
. Les ordinaux sont dérivés des cardinaux.Sortie:
la source
eightth
"first" -> "\nFirst"
pour"fir" -> "\nFir"
sauver 4 octets.StringJoin
éditée, alors "vingt et unième ... trente et unième ..." deviendra "vingt et unième ... trente et unième ...".JavaScript (ES6), 480
la source
PHP - 842 octets
En omettant les balises PHP de début et de fin, la compression est de 1 - 842/2445 = 65,6%
Obtenir essentiellement la sortie
base64_encode(gzdeflate($input, 9));
et inverser les opérations. Évidemment, si je choisissais de produire en 8 bits pur par rapport à la base 64, il serait 25% plus petit, mais au risque de rencontrer des caractères d'échappement ou non imprimables.la source