Mengucapkan Hex
Bagi Anda yang belum tahu tentang pertunjukan Silicon Valley, tantangan ini terinspirasi oleh pertukaran yang berlangsung seperti ini ( YouTube ):
Kid -
Here it is: Bit… soup. It’s like alphabet soup, BUT… it’s ones and zeros
instead of letters.
Erlich Bachman -
{silence}
Kid -
‘Cause it’s binary? You know, binary’s just ones and zeroes.
Erlich Bachman -
Yeah, I know what binary is. Jesus Christ, I memorized the hexadecimal
times tables when I was fourteen writing machine code. Okay? Ask me
what nine times F is. It’s fleventy-five. I don’t need you to tell me what binary is.
Perlu dicatat bahwa secara teknis, 0x9 * 0xF = 0x87
bukan 'empat puluh lima', tetapi ini memunculkan pertanyaan penting - bagaimana Anda benar-benar mengucapkan hex dalam percakapan? Ini tidak seperti oh ex eff eff
mengalir dari lidah dengan mudah, jadi apa yang harus kita lakukan? Berikut bagan pengucapan yang berguna yang akan kami ikuti.
A = ay A0 = atta-
B = bee B0 = bibbity-
C = cee C0 = city-
D = dee D0 = dickety-
E = ee E0 = ebbity-
F = eff F0 = fleventy-
Kita dapat membagi nomor hex 4-panjang menjadi dua kelompok dua, dan menentukan pengucapan dari tabel di atas, serta pengucapan bahasa Inggris umum untuk angka. Jadi, sebagai contoh 0xFFAB
, kita akan dapatkan Fleventy-eff bitey atta-bee
.
Jika nomor disertakan, seperti 0xF5AB
, Anda akan mencetak Fleventy-five bitey atta-bee
. Juga, jika angka memulai salah satu grup, Anda harus menggunakan pelafalan "puluhan". Sebagai contoh, 0x5FAA
akan menjadi Fifty-eff bitey atta-ay
. Dalam kasus di mana Anda memiliki sesuatu seperti 0x1FAC
, ini akan menjadi Effteen bitey atta-cee
. Tapi, jika aturan ini digunakan untuk 0x1AF4
, a-teen
bisa dikacaukan eighteen
, jadi Anda harus menambahkan Y. Jadi, output yang benar adalahYayteen bitey fleventy-four
Dalam hal 0xD0F4
, alih-alih melakukan Dickety-zero bitey fleventy-four
, kita akan mengabaikan nol dan mencetak Dickety-bitey fleventy-four
.
Tanda hubung hanya boleh muncul dalam kelompok dua, yaitu gigitan tidak boleh dihubungkan ke salah satu kelompok dengan tanda hubung kecuali kelompok pertama hanya satu kata! Memang 0x04F4
akan four-bitey fleventy-four
, tetapi 0x44F4
akan forty-four bitey fleventy-four
. Seperti yang dikatakan trichoplax , gigitan seharusnya dihipnotis saat mengikuti angka bulat.
Untuk tampilan komprehensif tentang cara kerjanya, lihat contoh I / O di bawah ini.
Objektif
Buat program atau fungsi yang akan mengambil string heksadesimal sebagai input atau argumen fungsi dan menghasilkan pengucapan itu. Output harus memiliki kapitalisasi yang tepat. Anda dapat mengasumsikan bahwa panjang angka ini akan selalu 4.
Contoh I / O
"0xFFFF" -> "Fleventy-eff bitey fleventy-eff"
"0x0000" -> "Zero"
"0x0010" -> "Ten"
"0x0100" -> "One-bitey zero"
"0x1110" -> "Eleven-bitey ten"
"0xBEEF" -> "Bibbity-ee bitey ebbity-eff"
"0x9999" -> "Ninety-nine bitey ninety-nine"
"0xA1B2" -> "Atta-one bitey bibbity-two"
"0x3C4F" -> "Thirty-cee bitey forty-eff"
"0x17AB" -> "Seventeen-bitey atta-bee"
"0x1AFB" -> "Yayteen-bitey fleventy-bee"
"0xAAAA" -> "Atta-ay bitey atta-ay"
Ini adalah kode-golf , jadi paling tidak jumlah byte yang menang.
sumber
Jawaban:
Pyth -
312293286251 byteSaatnya mulai mengurangi data, lebih banyak datang.
Program Pyth suci terbesar yang pernah saya tulis! Masih ada kompresi yang sangat besar dengan data, baik secara algortihimik dan konversi basis, tetapi hanya ingin memasangnya
Saya menafsirkan input sebagai hex literal melalui Q yang secara otomatis mendeteksi dengan
0x
. Kemudian saya divmod 256 ke dalam byte, dan menghapus byte pertama jika nol, kemudian memetakannya melalui dua array, satu untuk0-1F
dan kemudian20-F0
. Yang kedua mendapat divmod melalui array pertama juga. Opsi pertama mendapat tanda hubung di akhir, dan yang kedua mendapatkan tanda hubung di tengah dan spasi di akhir. Bergabunglah"bitey "
, gunakan dengan rentang, dan lepaskan tanda hubung dengan.s
dan kami baik-baik saja.Bagian kompresi dasar juga menarik karena saya pertama kali memulai dengan 128 dasar -> 256 konversi. Tapi sekarang, apa yang saya lakukan adalah menggunakan
"q"
pemisah dan bukan ruang. Jadi saya sekarang dapat mempertimbangkan string sebagai basis 26 string denganxLG
, meningkatkan kompresi luar biasa.Coba di sini online .
Suite uji .
sumber
0x112233
dan0x93FBAC09
Ninety-three bitey fleventy-bee halfy atta-cee bitey nine
?Truebitey
s danFalsebitey
s.Java - 856 byte
Tidak pendek tapi setidaknya jawaban kedua;)
Ini adalah metode yang disebut
String p(String n)
yang akan melakukan pekerjaan:sumber
Javascript -
577719 byteSaya yakin ada perbaikan yang harus dilakukan. Bonus tambahan, itu mem-parsing string hex panjang sewenang-wenang.
EDIT: Aduh, itu tidak berfungsi dengan benar ketika ada nol di depan. Hm
EDIT 2: Tetap, saya pikir. JSFiddle
sumber