Latar belakang :
Anda telah diberi tugas untuk mengonversi angka 10 basis ke basis 2 tanpa menggunakan fungsi konversi basis basis apa pun. Anda juga tidak dapat menggunakan perpustakaan yang diimpor.
Masalah :
Ubah string input dari basis 10 (desimal) ke basis 2 (biner). Anda tidak boleh menggunakan kode / fungsi / metode konversi basis premade, atau pustaka yang diimpor. Karena ini adalah kode-golf , jawaban terpendek dalam byte akan menang.
Input akan berupa apa saja dari -32768 hingga 32767 (termasuk penanganan byte sign dalam kode Anda)
the MSB of signed variables controls if they are negative
- kedengarannya seperti tanda bit, namun seperti yang-32768..32767
disarankan oleh rentang , Anda ingin melengkapi 2's. Jadi yang mana yang Anda inginkan? ..Jawaban:
GolfScript - 17 byte
Tidak terlalu banyak verbose daripada built-in
~2base
.sumber
~
"37"
, misalnya, operasi"37" & 1
(in infix) adalah operasi yang diatur dengan bijak. Di~
bagian depan mengubah input ke integer.10
ke stack, tidak perlu untuk mengevaluasinya. Namun, ketika membaca daristdin
, input akan berupa string ( tes di sini ). Deskripsi masalah juga secara eksplisit menyatakan bahwa input adalah string.JavaScript, 46
sumber
>>>=
)! +1 (Juga, jika Anda menjalankannya di konsol, Anda dapat menyimpan 9 karakter terakhir.)x=8; x>>>=1; x;
danx=8; x>>>1; x;
- dalam kasus pertama, nilai x telah berubah; yang kedua, belum.>>>=
adalah operator tunggal .Brainf * ck,
9877Jelas ini bukan untuk tujuan menang, tetapi apa yang akan terjadi jika tidak memiliki solusi brainfk
Karena brainfk hanya dapat menangani bilangan bulat 8bit dan tidak ada negatif saya kira itu tidak sepenuhnya mematuhi aturan tapi hei saya tidak pernah di dalamnya untuk memenangkannya.
Ini sebenarnya berfungsi untuk input 16-bit jika penerjemah Anda mendukung
Saya bahkan mendapatkannya untuk output dalam nilai ascii
Berikut adalah kode yang dianotasi:
Algoritma yang lebih pendek (77):
Yang ini hanya bisa menangani bilangan bulat 8bit.
Algoritme bekerja dengan menggunakan penghitung biner yang sebenarnya sangat pendek (satu kenaikan adalah
>[->]++[-<+]-<-
yang kemudian menjabarkan bit-bit. Masalahnya adalah sulit untuk mencetak semua bitAlgoritma terakhir itu dapat diadaptasi agar sesuai dengan sejumlah bit dengan mengorbankan byte. Untuk dapat berurusan dengan integer N bit, diperlukan 53 + 3 * N byte untuk menyandikan.
contoh:
sumber
Wajib jawab APL - 21
22Contoh:
sumber
⎕IO←0
, dan kembali array bit bukan string:2|⌊⎕÷2*⊖⍳16
.Kode Mesin Turing, 272 byte
Seperti biasa, saya menggunakan sintaks tabel aturan yang didefinisikan di sini. Anda dapat mengujinya di situs itu atau, sebagai alternatif, menggunakan implementasi java ini.
Banyak kode disalin dari konverter desimal ke heks saya di sini.
Menghitung mundur dari input pada basis 10 sambil menghitung dari 0 pada basis 2. Pada penurunan nol, itu menghapus blok input dan berakhir.
sumber
Javascript 59
sumber
+x
sebagai gantinyaparseInt(x)
Perl, 44
Ini adalah program Perl pertama saya, jadi tolong maafkan saya jika ini dapat dengan mudah diturunkan. Sunting: Terima kasih @primo karena telah mengambil 7 karakter dari jawaban saya.
Logikanya pada dasarnya sama dengan solusi C saya sebelumnya.
Juga, gunakan 64 bit.
sumber
reverse
dengan membangun mundur array yang:@s=($x&1,@s)
.$\=$_%2 .$\while$_=$_>>1||<>;print
. Atau, jika opsi baris perintah masing-masing menghitung satu byte, 27:1while$\=$_%2 .$\,$_>>=1}{
menggunakan-p
.Javascript -
5648 dan3628 karakterTerima kasih kepada @Blender karena telah mencukur 8 karakter.
Formulir ini mengambil input dan menampilkan output, 48 karakter:
Jika hanya sebuah instruksi yang memasukkan variabel
a
, bentuk biner dari variabelx
diperlukan (dan Anda tidak repot-repot menghancurkanx
nilai sebagai efek samping), ini dia dengan 28 karakter:sumber
Math.floor
dengan~~
, karena kisaran untuk angka kecil.a=x%2+a
ini bisa disingkata+=x%2
? Ini bekerja dalam semua bahasa yang saya tahu.a=a+x%2
, tapi itu+
untuk penggabungan string. Yaitu, saran Anda menghasilkan angka dalam urutan terbalik.Python -
6160 karaktersumber
print
dan""
.print
karena secara otomatis mengembalikan hasilnyaC, 55 karakter
Mencetak nol di depan ekstra (untuk 2 byte).
Rekursi dalam
printf
membalik urutan cetak, sehingga algoritma mengekstraksi bit dari kanan ke kiri tetapi mencetak dari kiri ke kanan.EDIT : Menyimpan char dengan menggunakan
putchar
bukanprintf
.sumber
Dyalog APL , 11 byte
2|
Pembagian tetap ada ketika dibelah dua dari⌊
nilai dibulatkan dari⎕
input÷
dibagi oleh masing-masing2*
dua untuk kekuatan masing-masing⍳16
{0, 1, 2, ..., 15}Membutuhkan
⎕IO←0
yang default pada banyak sistem.TryAPL online!
sumber
C, 81
Outputnya memiliki 16 bit (termasuk padding zero)
sumber
Aplikasi Script + Google Sheets,
147144121 byteNaskah
Lembar
Versi modifikasi dari skrip ini oleh ZygD.
sumber
Haskell, 66 byte
Panggil dengan
b "-1023"
, tambahkanmain=interact b
untuk program lengkap atau coba di Ideon.c
melakukan konversi untuk bilangan bulat positif.b r=show.c.read$r
mengubah string menjadi angka, menerapkanc
dan mengkonversi kembali ke string.b('-':r)='-':b r
menghapus kemungkinan memimpin-
dan menambahkannya kembali ke hasilnya.sumber
PowerShell,
59878270 byte+28 byte untuk mendukung angka negatif.
-12 byte terima kasih hanya untuk @ ASCII
Cobalah online!
Diadaptasi dari kode ini . Mengambil input melalui parameter commandline
-d
.sumber
APL (NARS), 17 karakter, 34 byte
Ini adalah salinan dan modifikasi jawaban Adam /codegolf//a/90107 dengan cara seseorang dapat menambahkan parameter untuk panjang bit, dan ⎕IO untuk fungsi ini (di sini adalah ⎕IO = 1) harus tidak penting ...
itu mudah menangani jumlah bit dengan cara ini (saya cheked bahwa hasil terakhir harus benar)
sumber
Smalltalk (Smalltalk / X), 63/78
versi pertama membuat string perantara (78):
sebenarnya, tidak perlu membuat string; cukup output karakter (63):
mhmh - apakah ada cara yang lebih pendek untuk membaca ke suatu nomor
sumber
Python 3.x: 65 karakter
sumber
Bash, 44
Berikan nilai input ke skrip melalui variabel lingkungan
n
. Representasi desimal dari hasil biner tidak dapat melebihiLONG_MAX
.Ini juga harus kompatibel dengan
ksh93
danzsh
jikab
dane
diinisialisasi0
dan ekspansi aritmatika yang tepat digunakan.sumber
n
sudah didefinisikan, menjadikannya cuplikan. Itu bisa diperbaiki dengan mengambil input sebagai argumen baris perintah dan mengaturnyan
dalam skrip Anda.n=127 sh -c '...'
daripadash -c 'n=$1 ...' _ 127
. Tidak ada alasan untuk memilih satu dari yang lain dalam hal ini karena keduanya merupakan cara yang tipikal untuk memberikan nilai.C # - 104
Metode ini akan mengkonversi desimal ke biner hingga
64
bit.Ketika dieksekusi metode di atas dalam Linqpad - rr = p (-32768); rr.Dump ();
Keluaran:
01111111111111111111111111111111111111111111111111000000000000000
sumber
int
.Java 8,
8071 byte-9 byte karena aturan dalam komentar .. Input basis-10 negatif dapat mengembalikan nilai base-2 positif / absolut sebagai output tampaknya.
Penjelasan:
Cobalah online.
sumber
Kotlin , 82 byte
Cobalah online!
sumber
Small Basic , 133 byte
Sebuah skrip yang input dari dan output ke
TextWindow
konsol.Cobalah di SmallBasic.com Membutuhkan Silverlight dan karenanya harus dijalankan di IE.
I / O diambil / diberikan dari konsol hitam.
-22 byte terima kasih kepada @Neil
sumber
For i=0To c-1
?MATL ,
1517 byteCobalah di MATL Online
TIO
(+2 byte menghapus angka 0 untuk angka negatif, bit tanda haruslah bit pertama.)
Output pada MATL Online harus dibaca dari bawah ke atas (MSB ada di bawah).
Bagian utamanya cukup sederhana:
`2&\t
= sementara nilainya lebih besar dari 0, bagi dengan 2 dan akumulasikan sisanya.Menangani angka negatif dan memberi mereka representasi pelengkap 2 adalah bagian yang sulit. Pada akhirnya saya pergi dengan " kurangi dari2N "metode untuk mendapatkan komplemen dua angka. Karena kita hanya diharuskan untuk menangani nilai hingga -32768, untuk angka negatif kode menciptakan 216= 65536 dengan
16W
, menambahkan input untuk itu (mis. 65536 + (-42)), yang memberikan sesuatu yang dilihat MATLAB sebagai angka positif tetapi mewakili representasi biner input yang ditandatangani dalam bentuk 16-bit.sumber
C (gcc) ,
5043 byte-7 bytes berkat ceilingcat .
Cobalah online!
sumber
PowerShell , 43 byte
Cobalah online!
sumber
> <> ,
3433 byteCobalah online!
sumber