Penafian: Pengkodean Levenshtein sama sekali tidak terkait dengan metrik jarak edit Levenshtein .
<Masukkan cerita panjang tentang mengapa kode Levenshtein perlu dihitung di sini.>
Kode
Pengkodean Levenshtein adalah sistem pemberian kode biner ke bilangan bulat tidak negatif yang mempertahankan beberapa properti aneh dalam probabilitas yang tidak relevan untuk tantangan ini. Kami akan menyatakan kode ini sebagai L ( n ). Wikipedia menggambarkan ini sebagai proses lima langkah:
- Inisialisasi jumlah langkah variabel C ke 1.
- Tulis representasi biner dari nomor tersebut tanpa harus mengarah
1
ke awal kode. - Biarkan M menjadi jumlah bit yang ditulis pada langkah 2.
- Jika M bukan 0, tambah C , ulangi dari langkah 2 dengan M sebagai angka baru.
- Tulis C
1
bit dan a0
ke awal kode.
Namun, kode ini juga dapat dijelaskan secara rekursif:
- Jika angkanya 0, maka kodenya adalah
0
. - Tulis representasi biner dari nomor tersebut tanpa harus mengarah
1
ke awal kode. - Biarkan M menjadi jumlah bit yang ditulis pada langkah 2.
- Tulis L ( M ) di awal kode.
- Tulis
1
sedikit ke awal kode.
Bagi mereka yang lebih suka contoh, di sini adalah proses rekursif untuk L (87654321), dengan menunjukkan gabungan:
Tantangan
Tulis program atau fungsi yang, diberi nomor n , mengeluarkan bitstring L ( n ) dalam format yang masuk akal (ini termasuk mengembalikan nomor dengan bit tersebut). Celah standar, seperti biasa, tidak diizinkan.
Contohnya
Memasukkan: 5
Keluaran: 1110001
Memasukkan: 30
Keluaran: 111100001110
Memasukkan: 87654321
Keluaran: 111110000101001001110010111111110110001
Memasukkan: 0
Keluaran: 0
±
bukan fungsif
.JavaScript (ES6),
5452 byteSunting: Disimpan 2 byte berkat @Arnauld.
sumber
replace(1,...
alih-alihreplace(/1/,...
=> 52 bytePyth, 12 byte
Demonstrasi
(Itu
y
pada akhirnya adalah menjalankan fungsi yang dihasilkan pada input)Penjelasan:
sumber
SQF, 110
Fungsi rekursif:
Panggil sebagai:
[NUMBER] call f
Catatan ini tidak benar-benar berfungsi untuk 87654321 atau sejumlah besar lainnya karena bug di mesin ArmA. Meskipun mungkin akan segera diperbaiki, dan harus bekerja sesuai dengan spesifikasi.
( Tiket Ini ke Sini )
sumber
PHP,
116114 byteBerikan nomor sebagai argumen pertama.
Memperbarui:
strlen($b)-1
dengan~~log10($b)
(akhirnya mengerti mengapa orang lain adalah dengan menggunakan logaritma) dan lain dengan menggabungkan berbeda.sumber
Ruby, 38 byte
Sangat mirip dengan jawaban JavaScript Neil .
Lihat di repl.it: https://repl.it/CnhQ
sumber
Java 8 (Program Lengkap),
257249 byteVersi yang Dapat Dibaca dengan Penjelasan (Sebagian besar hanya rekursi):
EDIT 1 : Disimpan 8 byte : Karakter pertama dari string biner selalu 1; karena itu, daripada menggunakan
s.charAt(0)
, pilihan yang lebih baik adalah sederhana"1"
.sumber