Oto prosty sposób na rozciągnięcie mięśni kompresyjnych. Twój kod (kompletny program) musi wyświetlać wypisaną angielską reprezentację wszystkich liczb głównych od 1 do 100, a następnie wszystkie liczby porządkowe od 1 do 100. Liczby na każdej liście powinny być oddzielone przecinkami i spacjami oraz odpowiednio pisany z łącznikiem. Każda lista powinna zaczynać się od jednej dużej litery i kończyć się kropką. Dwie listy powinny być oddzielone nową linią.
Dla jasności musisz wygenerować ten dokładny strumień bajtów:
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.
To jest kod golfowy, wygrywa najkrótsza odpowiedź w bajtach.
Pyth,
366342340 bajtówDemo na żywo.
Wersja 342-bajtowa:
Wersja 366-bajtowa:
źródło
PHP - 491 bajtów
Mały kod tutaj dla kardynałów (używam klasy NumberFormatter, która jest domyślnie dostarczana z PHP):
(dodano kilka nowych wierszy dla czytelności)
źródło
@
(-4 bajty). Użyj nowego wiersza zamiast pisania\n
(-1 bajt). Umieść definicję$z
w inicjalizacji drugiejfor
pętli (-1 bajt).PHP 5.3+, 195 bajtów
Obejmuje to znak nowej linii.
To część
NumberFormatter
klasy, podobnie jak odpowiedź Razvana . Tyle że przeliterowałem zarówno kardynałów, jak i porządków zgodnie z OIOM.Powiązane: /programming//a/19411974/404623
źródło
Oracle SQL 231 bajtów
SqlFiddleLiveDemo
źródło
JavaScript ES6,
562464 bajtyJeszcze nie skończyłem grać w golfa!
Jeśli to nie zadziała, może być konieczne dodanie zrzutu heksadecymalnego ze względu na wszystkie znaki specjalne. Daj mi znać, jeśli tak jest, a ja skontaktuję się z Tobą jutro.
Jeśli to jakieś literówki, daj mi znać.
Kod w pastebin (Testowany na Safari Nightly)
Wyjaśnienie
Może to wyglądać jak kilka zniekształconych postaci, ale w rzeczywistości jest to dość proste.
Zaczynamy od wygenerowania kardynałów. Ta tablica jest kompresowana za pomocą
btoa
funkcji.Aby przejść przez „zakres”, używamy:
Teraz generujemy tablicę o długości 89 za pomocą. To
...
właśnie rozpakowuje tablicęNastępnie odwzoruj to, ja to indeks:
Teraz dla warunku
i < 1
lub jeśli jest to pierwszy element, użyjemy wielkiej wersji jednego / pierwszegoW przeciwnym razie ... jeśli jest mniej niż 20, otrzymujemy jedenaście ... dziewiętnaście
W przeciwnym razie ... za pomocą
(i-i%10)/10
otrzymamy ostatnią cyfrę numeru. Dodajemy do niego 18, aby zrekompensować 1..19. Dodajemy a,-
a następnie dodajemy ostatnią cyfrę lub i% 10Na koniec dodajemy „sto” do samego końca, ponieważ tego nie robimy.
Powtarzamy to dla obu typów liczb i oddzielamy znakiem nowej linii
źródło
hundred
. Ogólnie: świetna robota | +1C ++
704642620602Żadne użycie biblioteki inne niż
ostream
operator<<()
dlachar*
s.Wersja na żywo .
Z odrobiną spacji i komentarzami:
Skompresowany ciąg jest dekodowany
a
dob
:Bez nowych linii. Podczas dekompresji
|
s są zastępowane,'\0'
a~
s są zastępowane' '
(dziwactwo sposobu, w jaki znaki są kodowane w drukowanym ASCII). Te „prymitywne” ciągi są następnie wyszukiwane według indeksu wb
tablicy za pomocąp
funkcji i używane do składania danych wyjściowych.Kompresja jest prostym schematem podobnym do LZ, w którym znaki są albo kodowane jako literały, albo jako ujemne przesunięcie do bufora i długość przebiegu (kodowana na dwa znaki), jeśli znaleziono dopasowanie długości> = 3. Ciąg może być dalej kompresowany za pomocą znaków niedrukowalnych, ale podoba mi się, że mój kod jest bezpieczny do kopiowania i wklejania :)
źródło
JavaScript (ES6), 713
Podobne do mojego drugiego przesłania PHP na to pytanie . (2444–713) / 2444 = 70,8% kompresji.
Skrzypce
źródło
Mathematica
415 391407Kardynałowie są podani przez
IntegerName[n]
. Liczby porządkowe pochodzą od kardynałów.Wydajność:
źródło
eightth
"first" -> "\nFirst"
, aby"fir" -> "\nFir"
zapisać 4 bajty.StringJoin
, wówczas „dwudziesty pierwszy ... trzydziesty pierwszy ...” zmieni się w „dwudziesty pierwszy ... trzydziesty pierwszy ...”.JavaScript (ES6), 480
źródło
PHP - 842 bajty
Pomijając zwykłe znaczniki początkowe i końcowe PHP, kompresja wynosi 1 - 842/2445 = 65,6%
Zasadniczo uzyskiwanie danych wyjściowych
base64_encode(gzdeflate($input, 9));
i cofanie operacji. Oczywiście, jeśli wybiorę wyjście w czystym 8-bitowym kontra base-64, byłoby to o 25% mniejsze, ale istnieje ryzyko, że napotkamy znaki ucieczki lub niedrukowalne.źródło