Sejumlah variabel bit adalah array 0 atau lebih bit. Jadi [0, 1]
adalah sejumlah variabel bit, tetapi begitu juga []
.
Tulis fungsi atau program yang, dengan integer nonnegatif mengembalikan sejumlah variabel bit sehingga setiap integer memiliki pemetaan satu-ke-satu (bijektif) dengan array.
Ada jumlah tak terbatas dari pemetaan semacam itu, Anda bebas membuat satu sesuka Anda, tetapi itu harus satu-ke-satu. Pemetaan Anda harus secara konseptual satu-ke-satu untuk bilangan bulat berukuran sewenang-wenang, tetapi tidak apa-apa jika implementasi Anda gagal untuk bilangan bulat besar karena batas numerik jenis dalam bahasa pilihan Anda (misalnya C int
).
Sebagai contoh dari apa yang bukan pemetaan satu-ke-satu, hanya daftar digit biner dari bilangan bulat. Dalam sistem seperti 5 menjadi [1, 0, 1]
(atau 0b101
), tetapi itu tidak satu-ke-satu, karena 0b0101
atau [0, 1, 0, 1]
juga berarti 5.
Seharusnya cukup jelas bahwa pemetaan bukan satu-ke-satu jika ia melewatkan bilangan bulat (misalnya tidak bekerja untuk 5), tapi saya ingin memperjelas bahwa melewatkan array bit variabel juga bukan satu -untuk satu. Anda harus memetakan ke setiap bit array variabel yang mungkin, termasuk []
.
Kode terpendek dalam byte menang.
Jawaban:
Jelly, 3 byte
Gagasan yang sama dengan xnor: maps
0 1 2 3 4 ...
to[] [0] [1] [0 0] [0 1] ...
; kodenya pada dasarnyaincrement → binary → remove first
.Cobalah online .
sumber
Python, 20 byte
Uji:
Melakukan
lambda n:bin(n+1)[3:]
penambahan input, kemudian mengambil representasi biner dengan simbol pertama dihapus ([3:]
karena awalannya0b
adalah dua karakter chars). Karena bilangan positif dimulai dengan 1 dalam biner, ini secara unik memberikan representasi biner.Satu byte disimpan dengan menggunakan komplemen bit
~n
untuk mendapatkan negasi-(n+1)
, dan menghilangkan tanda negatif dengan memotong satu simbol lagi.sumber
lambda s:int('1'+s,2)-1
.Pyth, 5 byte
Cukup terjemahan jawaban xnor ke Pyth.
Q
adalah eval () 'd input (),h
menambahkannya,.B
mengubahnya menjadi string biner, dant
mengambil "tail" (yang merupakan segalanya kecuali karakter pertama).sumber
Haskell,
41383029 byteContoh penggunaan:
(l!!) 4
->"10"
.Dimulai dengan daftar kosong sebagai elemen pertama, berjalan malas melalui daftar dan menambahkan elemen saat ini dengan
0
dan dengan1
di depannya.Edit: @xnatau disimpan
311 byte. Terima kasih!sumber
[(0:),(1:)]<*>
<*>
trik sebelumnya, tapi saya lupa. Terima kasih lagi!l=[]:[b:x|x<-l,b<-[0,1]];(l!!)
.[b:x|x<-l,b<-"01"]
dengan produk atau concat-map, tetapi ekspresi produk(:)<$>[0,1]<*>l
berjalan dengan urutan yang salah, pertama-tama mengawali 0 ke semuanya, tidak pernah sampai ke 1 karena daftarnya tidak terbatas. Apakah Anda punya ide?JavaScript (ES6), 29 byte
Gagasan yang sama dengan xnor.
sumber
Jolf, 4 byte
Coba di sini!
Strategi yang sangat sederhana, juga merupakan yang terpendek.
sumber
Haskell, 35 byte
Haskell tidak memiliki biner bawaan, sehingga konversi (terbalik) dilakukan secara manual. Untuk menghapus awal 1, kasing dasar telah
1
berubah ke daftar kosong.Sunting: Disimpan byte dengan konjugasi oleh yang
+1
bukan.sumber
C, 40 byte
Mengonversi input ke basis bijective 2 (dengan simbol
0
dan1
), seperti jawaban lainnya.ideone itu!
sumber