Tulis fungsi atau program yang mengeluarkan basis Quater-imajiner yang ditampilkan sebagai digit biner. Basis angka adalah 2 i , di mana i adalah akar kuadrat dari -1. Lihat Nomor Kompleks untuk rincian lebih lanjut tentang i . Setiap posisi digit dapat berubah dari 0 hingga 3 (kuartener), karena setiap bagian nyata dan imajiner adalah -4 kali lebih besar dari bagian nyata dan imajiner sebelumnya. The kuaterner digit dalam biner adalah sebagai berikut: 0: 00
, 1: 01
, 2: 10
& 3: 11
.
Perincian posisi digit:
re im 16 -8i -4 2i 1 -0.5i, etc.
4 0 1 0 3 0 0 (quaternary representation)
01 00 11 00 00 (binary representation)
Jumlahnya 100110000
1x16 + 3x-4 = 16 + -12 = 4.
re im 16 -8i -4 2i 1 -0.5i, etc.
0 5 0 0 0 3 0 2 (quaternary representation)
00 00 00 11 00 .10 (binary representation)
Jumlahnya 1100.1
3x2 i + 2x-0,5 i = 6 i + - i = 5 i .
Kode Anda akan mengambil sepasang angka, yang bisa berupa bilangan bulat atau titik mengambang, dan akan menampilkan bilangan kompleks sebagai string angka biner. Angka pertama akan menjadi nyata, nomor input kedua akan menjadi nilai imajiner. Titik biner hanya boleh dicetak jika ada posisi angka bukan nol di bawah 1 (yaitu jika salah satu posisi untuk -0,5 i , -0,25, 0,125 i , dll. Memiliki angka bukan nol). Angka nol di depan dan di belakang tidak diperbolehkan, kecuali satu digit nol tepat sebelum titik biner jika tidak ada digit lainnya. Output tidak boleh dimulai dengan titik biner (* 00.1
- salah, 0.1
- benar, * .1
- salah, * 0.10
- salah). Anda dapat mengasumsikan bahwa semua angka input akan memiliki representasi biner terbatas.
Nomor tes:
re im output
0 0 0
1 0 1
2 0 10
3 0 11
4 0 100110000
-1 0 10011
-2 0 10010
-3 0 10001
0 1 100.1
0 2 100
0 3 1000.1
0 4 1000
0 -1 0.1
0 -2 1001100
0 -3 1001100.1
3 4 1011
4 3 100111000.1
6 -9 101110010.1
-6 9 10011100110.1
-9 -6 1110111
0.5 14.125 10011001101.001001
Catatan: Output semua nilai integer akan berakhir .1
jika bagian imajiner ganjil.
Golf kode standar.
sumber
0 → 00, 1 → 01, 2 → 10, 3 → 11
.Jawaban:
JavaScript (ES6), 340 byte
f
mengkonversi angka menjadi basis-4
(dengan membuntuti.
jika nomor tersebut bilangan bulat).g
mengambil dua-4
angka dasar , menempatkan keduanya di kedua ujung dengan panjang dan.
posisi yang sama, mengocok digit bersama-sama, mengubah segala sesuatu dari basis4
ke basis2
, lalu akhirnya strip nol memimpin dan tertinggal.Penjelasan: Untuk merepresentasikan bilangan kompleks yang diberikan dalam basis yang dimodifikasi,
2i
kita perlu merepresentasikan bagian nyata dan setengah dari bagian kompleks (yaitu, membagi bagian imajiner dengan2i
) pada basis2i²
(yaitu-4
), mengocok angka-angka bersama, dan kemudian mengubahnya dari basis4
ke pangkalan2
. Untuk mewakili bilangan real dalam basis,-4
kita mulai dengan4
konversi basis . Digit alternatif memiliki tanda yang benar (dalam hal angka positif, ini adalah digit di posisi genap; dalam kasus angka negatif, ini adalah digit di posisi ganjil) tetapi digit yang tersisa memiliki tanda yang salah dan koreksi perlu diterapkan. Contoh:Seperti yang Anda lihat, koreksi
8
minus digit asli, mod8
. Namun perhitungan yang sedikit lebih nyaman adalah digit asli, ditambah 3, xor 3 (memang dalam aritmatika integer 32-bit kita bisa menulis+0xCCCCCCCC^0xCCCCCCCC
untuk mengonversi seluruh angka dalam sekali jalan). Akhirnya karena koreksi berlaku untuk digit alternatif, lebih mudah untuk melakukan konversi awal ke basis16
yang secara otomatis mengambil pasangan4
digit basis , kemudian mengoreksi menggunakan faktor salah satu3
atau yang0xC
sesuai. Tinggal mengabaikan-
tanda itu.sumber
Perl - 313 byte
Karena belum ada yang mengirim jawaban, saya pikir saya akan memulai sendiri.
Saya yakin ada banyak peluang untuk bermain golf lebih jauh.
sumber