Inilah yang sederhana untuk meregangkan otot kompresi Anda. Kode Anda (program lengkap) harus menampilkan representasi bahasa Inggris yang dieja dari semua nomor kardinal dari 1 hingga 100, dan kemudian semua nomor urut dari 1 hingga 100. Angka-angka dalam setiap daftar harus dibatasi oleh koma dan spasi serta dengan benar ditulis dgn tanda penghubung. Setiap daftar harus dimulai dengan huruf kapital tunggal dan diakhiri dengan tanda titik. Kedua daftar harus dipisahkan oleh baris baru.
Demi kejelasan, Anda harus menghasilkan aliran byte yang tepat ini:
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.
Ini adalah kode golf, jawaban terpendek dalam byte menang.
Pyth,
366342340 bytesDemo langsung.
Versi 342 byte:
Versi 366-byte:
sumber
PHP - 491 byte
Cheat kecil di sini untuk para kardinal (Saya menggunakan kelas NumberFormatter yang menjadi default dengan PHP):
(menambahkan beberapa baris baru untuk dibaca)
sumber
@
(-4 byte). Gunakan baris baru alih-alih menulis\n
(-1 byte). Masukkan definisi$z
ke inisialisasifor
loop kedua (-1 byte).PHP 5.3+, 195 byte
Itu termasuk karakter baris baru.
Itu bagian dari
NumberFormatter
kelas, sama seperti jawaban razvan . Kecuali saya menjabarkan kardinal dan ordinal menurut ICU.Terkait: https://stackoverflow.com/a/19411974/404623
sumber
Oracle SQL 231 byte
SqlFiddleLiveDemo
sumber
JavaScript ES6,
562464 byteBahkan belum bermain golf!
Jika ini tidak berhasil, saya mungkin perlu menambahkan hexdump karena semua karakter khusus. Tolong beri tahu saya jika ini masalahnya dan saya akan menghubungi Anda besok.
Jika ada kesalahan ketik, beri tahu saya.
Kode dalam pastebin (Diuji di Safari Nightly)
Penjelasan
Ini mungkin terlihat seperti sekelompok karakter yang kacau, tetapi sebenarnya cukup sederhana.
Kami mulai dengan menghasilkan kardinal. Array ini dikompres menggunakan
btoa
fungsi.Untuk mengulang "rentang" kami menggunakan yang berikut:
Sekarang kita menghasilkan Array dengan panjang 89 yang digunakan. Inilah
...
yang membuka kompresi arrayKemudian memetakannya, saya adalah indeks:
Sekarang untuk kondisinya,
i < 1
atau jika itu adalah item pertama, kami akan menggunakan versi kapital dari satu / pertamaKalau tidak ... jika kurang dari 20, kami output sebelas ... sembilan belas
Kalau tidak ... menggunakan
(i-i%10)/10
kita mendapatkan digit terakhir dari nomor tersebut. Kami menambahkan 18 untuk mengkompensasi 1..19. Kami menambahkan-
dan kemudian menambahkan digit terakhir, atau i% 10Akhirnya, kami menambahkan 'seratus' sampai akhir karena kami tidak.
Kami mengulangi ini untuk kedua jenis angka dan berpisah dengan baris baru
sumber
hundred
. Keseluruhan: pekerjaan bagus | +1C ++
704642620602Tidak ada penggunaan perpustakaan selain
ostream
operator<<()
untukchar*
s.Versi langsung .
Dengan spasi putih dan beberapa komentar:
String yang dikompresi diterjemahkan dari
a
menjadib
:Tanpa baris baru. Selama dekompresi,
|
s diganti dengan'\0'
dan~
s diganti dengan' '
(kekhasan cara karakter dikodekan ke dalam ASCII yang dapat dicetak). String 'primitif' ini kemudian dilihat oleh indeks dalamb
array menggunakanp
fungsi dan digunakan untuk merakit output.Kompresi adalah skema mirip LZ sederhana di mana karakter dikodekan sebagai literal atau sebagai offset negatif ke buffer dan panjang run (dikodekan menjadi dua karakter) jika ditemukan kecocokan panjang> = 3. String dapat dikompresi lebih lanjut menggunakan karakter yang tidak dapat dicetak tetapi saya suka kode saya untuk disalin dan ditempelkan dengan aman :)
sumber
Javascript (ES6), 713
Mirip dengan pengajuan PHP kedua saya pada pertanyaan ini . (2444 - 713) / 2444 = 70,8% kompresi.
Biola
sumber
Mathematica
415 391407Para kardinal diberikan oleh
IntegerName[n]
. Ordo ordinal berasal dari para kardinal.Keluaran:
sumber
eightth
"first" -> "\nFirst"
ke"fir" -> "\nFir"
untuk menyimpan 4 byte.StringJoin
disunting, maka "dua puluh satu ... tiga puluh satu ..." akan menjadi "dua puluh satu ... tiga puluh pertama ...".JavaScript (ES6), 480
sumber
PHP - 842 byte
Menghilangkan tag awal dan akhir PHP biasa, kompresi adalah 1 - 842/2445 = 65,6%
Pada dasarnya mendapatkan output
base64_encode(gzdeflate($input, 9));
dan membalikkan operasi. Jelas, jika saya memilih untuk menghasilkan murni 8-bit vs basis-64, itu akan menjadi 25% lebih kecil, tetapi dengan risiko berlari ke melarikan diri atau karakter yang tidak dapat dicetak.sumber