Tujuan
Idenya adalah untuk menyediakan kode yang diperlukan untuk memetakan integer 32-bit ke / dari kata yang dapat diucapkan maksimum 9 karakter. Itu bisa berguna, misalnya, untuk membuat nomor seri lebih mudah diingat, atau mengetikkan formulir.
Diperlukan metode untuk menerjemahkan bilangan bulat ke kata yang sesuai dan untuk menerjemahkan kembali kata ke bilangan bulat yang sesuai.
Aturan
Harus ada pemetaan satu-ke-satu antara bilangan bulat dan kata-kata, dan seluruh rangkaian bilangan bulat 32-bit (atau, dengan kata lain, bilangan bulat dari 0 hingga 4294967295) harus dapat dipetakan. Meskipun, jelas, tidak semua kata akan bermakna, dan memasukkan kata-kata yang tidak dipetakan ke bilangan bulat mungkin memiliki perilaku yang tidak ditentukan.
Anda bebas memutuskan set kata-kata "yang dapat diucapkan" mana yang bermakna, dan bagaimana pemetaan dilakukan, tetapi kata-kata setidaknya harus mengikuti aturan ini:
- Hanya 26 huruf dasar (A ... Z) yang dapat digunakan sebagai karakter. Aksen, casing, dll ... tidak boleh digunakan untuk memperpanjang kemungkinan kombinasi.
- Maksimum 9 karakter per kata.
- dua konsonan (BCDFGHJKLMNPQRSTVWXZ - 20 possiblities) tidak boleh diletakkan berdampingan satu sama lain (mereka harus dikelilingi oleh vokal).
- dua vokal (AEIOUY - 6 kemungkinan) tidak boleh diletakkan berdampingan (mereka harus dikelilingi oleh konsonan).
Catatan: skema paling sederhana di mana Anda memiliki semua kata dibangun sebagai CVCVCVCVC
( C
menjadi konsonan dan V
vokal) memberikan 4147200000 kombinasi, dan integer 32 bit memiliki 4294967296 nilai yang mungkin, jadi itu tidak cukup. Anda perlu memperluas jumlah kombinasi, baik dengan memungkinkan kata-kata pendek, atau dengan memungkinkan VCVCVCVCV
kombinasi, juga.
Aturan standar lain berlaku, dan celah standar dilarang.
Input / Output
Untuk setiap pengiriman, dua potong kode harus disediakan:
- Yang mengambil integer sebagai argumen / input dan mengembalikan / mencetak kata yang sesuai
- Salah satu yang mengambil kata sebagai argumen / input dan mengembalikan / mencetak integer yang sesuai
Atau, Anda dapat memilih untuk mengirimkan satu kode yang menangani kedua operasi:
- Ketika diberi bilangan bulat sebagai input, itu menghasilkan kata yang sesuai
- Ketika diberi string sebagai input, itu menghasilkan integer yang sesuai
Kondisi menang
Ini adalah kode-golf , jawabannya yang memiliki byte paling sedikit (ketika menjumlahkan kedua bagian kode, untuk solusi memilih potongan kode yang terpisah) menang.
Jawaban:
JavaScript (ES6), 205 byte
Titik potong antara CVCVCVCVC dan VCVCVCVCV adalah 4e9, jadi mulai salah di 5244160000 (input numerik) atau
zesuwurib
(input string).sumber
PHP, 353 Bytes
Encoding + Decoding
is_numeric($argn)
berisi boolean. Memang benar jika inputnya adalah integer.PHP, 190 Bytes (Encode) + 195 Byte (Decode) = 385 Bytes
Pengkodean
5391360000 = 26 * 120 ** 4 kombinasi tersedia
Pengkodean Versi Online tanpa E_NOTICE
Diperluas
Input => Output
Jika Anda selalu membutuhkan hasil 9 Byte, harap ganti
while($a)
denganwhile(strlen($r)<9)
+ 10 BytesDecoding
Diperluas
Input => Output
Decoding Versi Online tanpa E_NOTICE
Pemeriksaan Tambahan
Jika kita perlu memeriksa apakah sebuah string valid.
Tambahkan
$x.=$b?:0;
di akhir loop decoding + 10 BytesGanti
echo$s;
denganecho!preg_match('#([01])\1$#',$x)?$s:_;
+ 32 Bytessumber
R, 165 byte
Pengkodean dan penguraian dalam satu fungsi.
Fungsi ini menggunakan metode brute-force untuk menciptakan semua nilai yang mungkin dan kemudian hanya mengembalikan indeks ketika diberi input string dan mengembalikan string ketika diberi input integer. Akibatnya, sangat lambat dan menggunakan memori 16GB +!
4.354.560.000 nilai dimungkinkan. Ini mencakup semua string dari formulir CVCVCVCV (C), dengan C terakhir opsional.
sumber