Diberikan integer biner secara inklusif antara 0
dan1111111111111111
(yaitu bilangan bulat tak bertanda 16-bit) sebagai input, menghasilkan bilangan bulat yang sama di negabinary .
Masukan bisa dalam format apa pun yang paling nyaman untuk bahasa Anda; misalnya, jika lebih mudah bagi program untuk menangani input dengan 16 digit, seperti0000000000000101
, daripada hanya 101
, Anda dapat menulis program untuk hanya menerima input seperti itu.
Contoh I / O
> 1
1
> 10
110
> 1010
11110
> 110111001111000
11011001110001000
> 1001001
1011001
Berikut adalah contoh program yang saya tulis yang melakukan konversi basis, termasuk basis negatif dan non-integer. Anda dapat menggunakannya untuk memeriksa pekerjaan Anda.
code-golf
binary
base-conversion
Peter Olson
sumber
sumber
0
s dan1
s. Tampak jelas bagi saya, tetapi jawaban membuat saya ragu ringan ...Jawaban:
APL, 21 karakter
Saya menggunakan Dyalog APL untuk ini, dengan
⎕IO
set ke 0, memungkinkan kita untuk mengindeks array mulai dari 0 daripada 1.Penjelasan, dari kanan ke kiri:
⍞
memberi kami input pengguna sebagai vektor karakter.⍎¨
menerapkan fungsi eksekusi (⍎
) untuk masing-masing (¨
) karakter yang disebutkan di atas, menghasilkan vektor bilangan bulat 1 dan 0.2⊥
mendekode vektor dari basis 2 menjadi desimal.-
meniadakan bilangan bulat desimal yang dihasilkan.(16/¯2)⊤
mengkodekan bilangan bulat desimal ke basis¯2
(negatif 2). (16/¯2
Ulangan¯2
,16
kali, menghasilkan 16 digit nomor negabinary kami.)-
meniadakan setiap elemen dari nomor kami yang baru disandikan (sebelum ini, terdiri dari -1 dan 0), sehingga kita dapat menggunakannya untuk mengindeks vektor karakter kita.'01'[ ... ]
indeks array karakter ('01'
) menggunakan 0's dan 1's dari negabinary vector. Ini agar kami mendapatkan hasil yang lebih cantik.Contoh:
sumber
Ruby,
3231 karakterMenggunakan pintasan perhitungan negabinary .
sumber
gets
kata kunci, yang diambil dari STDIN.GolfScript,
342927 karakterPendekatan lurus ke depan. Sangat menarik bahwa versi terpendek adalah versi yang pertama kali dikonversi menjadi angka dan kemudian kembali ke basis -2 (setidaknya versi terpendek yang dapat saya temukan hingga sekarang). Tapi yang menyenangkan dari yang ini adalah, mengandung hampir 15%
%
.Edit 1: Untuk basis 2 kita dapat menyimpan satu operasi modulo dan juga bergabung dengan kedua loop.
Sunting 2: Saya menemukan kode yang lebih pendek untuk mengonversi string biner ke integer.
sumber
Haskell,
8683 BytesPanggil menggunakan c dan kemudian array integer untuk digit, mis
PS: Saya baru, apakah saya mengirimkan ini dengan benar?
EDIT: Menyimpan beberapa byte berkat Laikoni dan juga memperbaiki beberapa kesalahan ketik
EDIT2: Atau, c :: String -> String:
Untuk 114 byte (tetapi Anda menyebutnya dengan string: c "11")
sumber
undigits 2 n
, karena aplikasi fungsi mengikat lebih kuat daripada tanda kurung+m
. Anda juga dapat menyimpan beberapa byte dengan mengikatm
dalam penjaga:c n|m<-0xAAAAAAAA= ...
.Python (2.x), 77 karakter
(tidak sesingkat solusi lain karena kebutuhan untuk beralih secara manual ...) Harus memenuhi persyaratan.
Saran untuk perbaikan lebih lanjut dipersilakan!
Beri makan dengan nilai awal seperti ini:
0b1001001
sumber
JavaScript, 68 byte
Akan menjadi 52 byte di ES6, tapi itu pasca-tanggal tantangan:
sumber
Jelly , 4 byte, tantangan tanggal kiriman bahasa
Cobalah online!
Mengambil input, dan menghasilkan output, sebagai daftar digit.
Penjelasan
Ini cukup banyak terjemahan langsung dari spesifikasi.
sumber
k, 17 byte tidak bersaing
Beberapa fitur yang digunakan mungkin menunda tantangan.
Input adalah daftar 1 dan 0, dan output juga daftar 1 dan 0.
sumber
PHP, 69 Bytes
Versi Online
sumber
ES8, 54B
sumber
05AB1E , 4 byte
Cobalah online!
sumber
Japt , 4 byte
Input sebagai string biner, output sebagai array digit negabinary.
Cobalah
Atau, mengambil input sebagai array digit biner:
Cobalah
sumber