Biasanya, kami menguraikan angka menjadi angka biner dengan menetapkannya dengan kekuatan 2, dengan koefisien
0
atau1
untuk setiap istilah:
25 = 1*16 + 1*8 + 0*4 + 0*2 + 1*1
Pilihan
0
dan1
... tidak terlalu biner. Kami akan melakukan ekspansi biner yang sebenarnya dengan memperluas dengan kekuatan 2, tetapi dengan koefisien1
atau-1
sebaliknya:
25 = 1*16 + 1*8 + 1*4 - 1*2 - 1*1
Sekarang ini terlihat biner.
Dengan angka positif, sepele untuk melihat bahwa:
- Setiap angka ganjil memiliki banyak sekali ekspansi biner sejati
- Setiap angka genap tidak memiliki ekspansi biner yang benar
Oleh karena itu, agar ekspansi biner yang benar dapat didefinisikan dengan baik, kami membutuhkan ekspansi yang paling kecil , yaitu dengan panjang terpendek.
Dengan bilangan bulat positif, ganjil n
, kembalikan ekspansi biner yang sebenarnya, dari digit paling signifikan ke digit paling tidak signifikan (atau dalam urutan terbalik).
Aturan:
- Karena ini adalah kode-golf , Anda harus melakukan ini dalam hitungan byte sesingkat mungkin. Dibangun secara bawaan.
- Output apa pun yang dapat mewakili dan daftar koefisien dapat diterima: array, serangkaian koefisien dengan pemisah, dll ...
- Berlaku celah golf standar.
- Program Anda harus bekerja untuk nilai-nilai dalam ukuran integer standar bahasa Anda.
Uji Kasus
25 -> [1,1,1,-1,-1]
47 -> [1,1,-1,1,1,1]
1 -> [1]
3 -> [1,1]
1234567 -> [1,1,-1,-1,1,-1,1,1,-1,1,-1,1,1,-1,1,-1,-1,-1,-1,1,1]
0
bukan -1
untuk keadaan tegangan rendah. Penelepon yang menerima bit tahu apa artinya. (Ini masih merupakan latihan manipulasi bit non-sepele, karena hak putar hanya berfungsi jika memiliki 32 bit signifikan. Mis. Angka 5-bit membutuhkan lebar putar 5.)
111-1-1
output yang valid untuk 25
?