Tantangan
Diberi nomor biner sebagai input melalui cara apa pun, "sederhanakan" nomor tersebut menggunakan program lengkap atau fungsi.
Memasukkan
[binary]
binary
adalah angka dalam biner yang lebih dari 0.
Keluaran
Ambil input, konversikan ke basis 10 tanpa menggunakan builtin, maka jika angka itu hanya berisi 1s dan 0s, ubah menjadi basis 10 seolah-olah itu nomor biner lain. Ulangi proses ini hingga angka tersebut tidak dapat dibaca dalam biner dan tampilkan angka itu.
Informasi lainnya
Jika inputnya 1, cukup output
1
. Program Anda seharusnya tidak terus menyederhanakan 1.Ini kode golf, jadi jawaban tersingkat dalam byte pada hari Selasa (17 November) menang.
Jika ada yang membingungkan, tinggalkan komentar yang menentukan apa yang perlu saya jelaskan dan saya akan mengeditnya.
Dibangun untuk konversi basis tidak diperbolehkan.
Contohnya
Input | Output
1 | 1
1010 | 2
1011 | 3
1100100 | 4
1100101 | 5
1111110011 | 3
code-golf
base-conversion
binary
The_Basset_Hound
sumber
sumber
Jawaban:
Pyth,
2016 byte4 byte berkat Jakube
Setengah dari kode (
u+yNsTG0
) hanyalah kode konversi dasar.Test Suite
Input
1
ditangani oleh fakta bahwau
pemberitahuan nilainya telah berhenti berubah.sumber
CJam,
2423 byteCobalah online di juru bahasa CJam .
Bagaimana itu bekerja
sumber
"10"
stringlength-1
, atau bisakah Anda melewati penurunan?"10"
menjadi""
jika bilangan bulat memiliki satu digit. Ini memastikan kode tidak masuk ke loop tak terbatas.Pip,
2827 byteMengambil input sebagai argumen baris perintah. Kami ingin mengulang hingga
a=1
ataua
memuat beberapa karakter selain 0 dan 1. Kondisi terakhir ini diuji denganRM
memasukkan semua karakter dalamt
=10
daria
. Jika ada yang tersisa, kondisinya benar.Di dalam loop, konversi berfungsi sebagai berikut:
Puting
a
pada akhirnya mencetak secara otomatis.Solusi rekursif dalam 28 byte:
sumber
Python 2, 52
Lebih mudah untuk menganggap ini sebagai dua fungsi rekursif:
Fungsi
g
mengubah nilai desimal ke biner, dan fungsif
berlakug
berulang kali selama argumennya dibuat dari angka 0 dan 1 ('2'>max(`n`)
) dan tidak1
. Kode golf memecahnya menjadi satu fungsi dengan menyisipkan definisig(n)
untukf(n)
, menggantikan panggilan rekursifg
denganf
. Kasus dasarn=0
darig
secara otomatis ditangani oleh cekn>1
.sumber
L
darirepr
...Prolog,
220212 bytePenjelasan
p adalah fungsi utama dan melakukan langkah-langkah berikut (dengan bantuan dari b, x, y):
Sunting: Disimpan 8 byte dengan menyatukan p-klausa dengan OR.
sumber
Mathematica
107106Dengan byte yang disimpan oleh DLosc.
Pecah input menjadi digit-digitnya. Jika inputnya 1, output 1.
Jika input adalah angka yang terdiri dari 0 dan 1, konversikan ke desimal dan jalankan kembali.
Jika tidak, kembalikan input.
Langkah pertama menghasilkan 1011 yang pada gilirannya menghasilkan 3.
Di sini kami menguji mulai dengan 1011.
sumber
Javascript,
132, 123 byteYah, itu bukan jawaban terbaik, tapi ..
FYI, jika input yang tidak valid diberikan, ini akan menampilkan hal yang sama kepada pengguna.
sumber
for
alih-alihwhile
dan menetapkan nilai langsung dalam pernyataan (ini juga mengurangi beberapa{}
), membuang beberapa;
, menggunakan deskripsi fungsi ES6, incrementi
inline. Ini akan terlihat seperti ini:c=x=>{for(r=0;x&&!/[2-9]/.test(x);x=r)for(i=0;x>0;r+=x%10*Math.pow(2,i++),x=parseInt(x/10));alert(x)};c(prompt())
.function c(x){while(x^0&&!/[2-9]/.test(x)){for(i=r=0;x;i++)r+=x%10*Math.pow(2,i),x=0|x/10;x=r}alert(x)}c(prompt())
c=x=>
awalnya, tidak bekerja di Chrome atau konsol Firefox. :( @ ן nɟuɐɯɹɐ ן oɯ, tidak bisa membungkus kepala saya dengan kondisi XOR danx=0|x/10
alih - alihparseInt
, saya sudah memasukkan sisa perubahan. Terima kasih ..c=x=>{for(r=0;x!=0&&!/[2-9]/.test(x);x=r)for(i=r=0;x;)r+=x%10*Math.pow(2,i++),x=parseInt(x/10);alert(x)};c(prompt())
. Ini pasti berjalan di Firefox 42, coba biola ini . Perhatikan bahwa ini versi yang lebih golf dan juga kode asli Anda tidak berfungsi1
dan akan mengalami loop tanpa akhir.c=x=>
sepertifunction c(x){}
melihat " Fungsi panah ".JavaScript ES6, 52
Sebagai fungsi. Argumen fungsi harus berupa string angka biner atau angka yang representasi desimalnya hanya berisi 1 dan 0.
Tes menjalankan cuplikan di bawah ini di peramban yang mendukung EcmaScript 6 - menerapkan fungsi panah, string templat, dan operator spread (saya menggunakan Firefox)
sumber
n+=+c+n
konversi biner. Sangat elegan ...Mathematica,
62595548 byteDisimpan 7 byte berkat Martin Büttner.
sumber
Javascript (ES7)
8780787774 byteCuplikan cuplikan untuk mendukung browser (saat ini hanya Firefox malam mendukung operator eksponensial)
Javascript (ES6) 81 byte
Demo cuplikan untuk mendukung browser
sumber
𝔼𝕊𝕄𝕚𝕟, 37 karakter / 54 byte
Try it here (Firefox only).
Tidak yakin apakah
+
operator dianggap sebagai built-in untuk konversi biner ...sumber
Perl 6 , 67 byte
sumber
PHP,
210204 byteIni pertama kalinya saya memposting di sini, jadi harap kalian akan menyukainya! Bahkan jika itu jelas bukan cara terbaik untuk menulisnya, aku masih senang memamerkannya di sini!
Kode
Saya telah membuat fungsi rekursif "j" yang pertama-tama akan memeriksa apakah input sama dengan 1. Jika demikian, fungsi mengembalikan 1 seperti yang diharapkan, jika tidak maka akan membagi angka dalam array untuk menghitung nilai desimal, tetapi hanya jika angkanya adalah biner. Jika tidak, itu akan mengembalikan nomornya apa adanya.
Kode tidak dikunci
Saya telah menggunakan pernyataan "foreach" alih-alih inisial "untuk" saya, memungkinkan saya memperoleh 6 byte tetapi saya cukup yakin ada banyak hal yang harus dilakukan.
sumber
PHP,
114112 bytejuga bekerja untuk
0
. Jalankan dengan-r
.count_chars($s,3)
mengembalikan string yang berisi semua karakter dari string (sepertiarray_unique
untuk array). Untuk angka biner, ini akan menjadi0
,1
atau01
. Untuk nomor lain, ini akan berisi digit lebih besar dari1
, jadi hanya<2
akan mengembalikan true untuk angka biner.&$s>1
diperlukan untuk kasus khusus1
.Sisanya lurus ke depan: Loop melalui bit dengan menggeser nilai dan menambahkan bit saat ini, akhirnya menyalin angka (dilemparkan ke string) ke $ s untuk tes loop luar.
sumber
CoffeeScript,
9289 byteJavaScript (ES6),
10510190 byteDemo
Hanya berfungsi di browser yang sesuai dengan ES6 seperti Firefox dan Microsoft Edge
sumber
1
. karena itu tidak masuk ke loop saya berasumsiScala, 128 byte
sumber
Matlab (115)
bin2dec
)sumber