Hier ist eine einfache Methode, um Ihre Kompressionsmuskeln zu dehnen. Ihr Code (ein komplettes Programm) muss die buchstabierte englische Darstellung aller Kardinalzahlen von 1 bis 100 und dann aller Ordinalzahlen von 1 bis 100 ausgeben. Die Ziffern in jeder Liste müssen durch Kommas und Leerzeichen getrennt sein getrennt. Jede Liste sollte mit einem einzelnen Großbuchstaben beginnen und mit einem Punkt abschließen. Die beiden Listen sollten durch einen Zeilenumbruch getrennt werden.
Aus Gründen der Übersichtlichkeit müssen Sie genau diesen Bytestream erzeugen:
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.
Dies ist Code Golf, die kürzeste Antwort in Bytes gewinnt.
Pyth,
366342340 BytesLive-Demo.
342-Byte-Version:
366-Byte-Version:
quelle
PHP - 491 Bytes
Kleiner Cheat hier für die Kardinäle (ich verwende die NumberFormatter-Klasse, die standardmäßig in PHP enthalten ist):
(ein paar neue Zeilen zur besseren Lesbarkeit hinzugefügt)
quelle
@
(-4 Bytes). Verwenden Sie eine neue Zeile, anstatt zu schreiben\n
(-1 Byte). Geben Sie die Definition von$z
in die Initialisierung der zweitenfor
Schleife ein (-1 Byte).PHP 5.3+, 195 Bytes
Dazu gehört auch das Newline-Zeichen.
Es ist ein Teil der
NumberFormatter
Klasse, genau wie Rasvans Antwort . Es sei denn, ich buchstabiere sowohl die Kardinäle als auch die Ordnungszahlen gemäß der Intensivstation.Siehe auch: https://stackoverflow.com/a/19411974/404623
quelle
Oracle SQL 231 Bytes
SqlFiddleLiveDemo
quelle
JavaScript ES6,
562464 BytesNoch nicht mal Golf gespielt!
Wenn dies nicht funktioniert, muss ich wegen all der Sonderzeichen möglicherweise einen Hexdump hinzufügen. Bitte lassen Sie mich wissen, ob dies der Fall ist, und ich melde mich morgen bei Ihnen.
Wenn es sich um Tippfehler handelt, lassen Sie es mich bitte wissen.
Code im Pastebin (Getestet auf Safari Nightly)
Erläuterung
Dies mag wie ein Haufen verstümmelter Charaktere aussehen, ist aber eigentlich ziemlich einfach.
Wir beginnen mit der Generierung der Kardinäle. Dieses Array wird mit der
btoa
Funktion komprimiert .Um einen "Bereich" zu durchlaufen, verwenden wir Folgendes:
Nun erzeugen wir ein Array der Länge 89 mit. Das
...
ist es, was das Array dekomprimiertDann ordne es zu, ich bin der Index:
Jetzt für die Bedingung,
i < 1
oder wenn es das erste Element ist, werden wir eine großgeschriebene Version von eins / zuerst verwendenAnsonsten ... wenn es weniger als 20 ist, geben wir elf ... neunzehn aus
Ansonsten ... erhalten
(i-i%10)/10
wir mit die letzte Ziffer der Zahl. Wir addieren 18 dazu, um den 1..19 zu kompensieren. Wir fügen ein-
und dann die letzte Ziffer hinzu, oder i% 10Schließlich fügen wir ganz am Ende 'einhundert' hinzu, weil wir es nicht tun.
Wir wiederholen dies für beide Arten von Zahlen und trennen sie mit einem Zeilenumbruch
quelle
hundred
. Insgesamt: gute Arbeit | +1C ++
704642620602Keine andere Bibliotheksnutzung als
ostream
operator<<()
fürchar*
s.Live-Version .
Mit etwas Leerzeichen und einigen Kommentaren:
Die komprimierte Zeichenfolge wird dekodiert von
a
inb
:Ohne die Zeilenumbrüche. Während der Dekomprimierung wird das
|
s durch'\0'
und das~
s durch ersetzt' '
(eine Eigenheit der Art und Weise, wie die Zeichen in druckbares ASCII codiert werden). Diese "primitiven" Zeichenfolgen werden dannb
mithilfe derp
Funktion anhand des Index im Array gesucht und zum Zusammenstellen der Ausgabe verwendet.Die Komprimierung ist ein einfaches LZ-ähnliches Schema, bei dem Zeichen entweder als Literale oder als negativer Versatz im Puffer und eine Lauflänge (in zwei Zeichen codiert) codiert werden, wenn eine Übereinstimmung mit Länge> = 3 gefunden wird. Die Zeichenfolge könnte mit nicht druckbaren Zeichen weiter komprimiert werden, aber ich möchte, dass mein Code kopier- und einfügesicher ist :)
quelle
Javascript (ES6), 713
Ähnlich wie bei meinem zweiten PHP-Beitrag zu dieser Frage . (2444 - 713) / 2444 = 70,8% Komprimierung.
Geige
quelle
Mathematica
415 391407Die Kardinäle werden von gegeben
IntegerName[n]
. Die Ordnungszahlen leiten sich von den Kardinälen ab.Ausgabe:
quelle
eightth
"first" -> "\nFirst"
zu"fir" -> "\nFir"
4 Byte zu speichern.StringJoin
bearbeitet wurde, wird "einundzwanzig ... einunddreißig ..." zu "einundzwanzig ... einunddreißig ...".JavaScript (ES6), 480
quelle
PHP - 842 Bytes
Ohne reguläre PHP-Start- und End-Tags beträgt die Komprimierung 1 - 842/2445 = 65,6%.
Grundsätzlich die Ausgabe von
base64_encode(gzdeflate($input, 9));
und Umkehrung der Operationen. Wenn ich mich für eine reine 8-Bit-Ausgabe im Vergleich zu Base-64 entscheide, ist diese natürlich um 25% kleiner, aber es besteht die Gefahr, dass Fluchtzeichen oder nicht druckbare Zeichen auftreten.quelle