Ini adalah sekuel dari tantangan ini oleh Adnan . Jika Anda menyukai tantangan ini, kemungkinan Anda juga akan menyukai tantangan yang lain. Saksikan berikut ini!
Sebuah tes pilihan ganda dengan 8 pertanyaan masing-masing dengan 4 pilihan mungkin memiliki jawaban: BCADBADA
. Dikonversi menjadi empat array yang berbeda, dengan benar dan salah jika huruf saat ini adalah jawabannya, akan terlihat seperti ini
Q#: 1 2 3 4 5 6 7 8
B C A D B A D A
A: [0, 0, 1, 0, 0, 1, 0, 1]
B: [1, 0, 0, 0, 1, 0, 0, 0]
C: [0, 1, 0, 0, 0, 0, 0, 0]
D: [0, 0, 0, 1, 0, 0, 1, 0]
Ini dapat dikompres menggunakan sedikit logika. Masing-masing pilihan A
, B
, C
dan D
dapat diwakili oleh dua / nilai-nilai palsu yang benar ditunjukkan di bawah ini:
A: 1 0
B: 0 1
C: 0 0
D: 1 1
Dengan menggunakan logika ini, kita dapat memampatkan empat vektor di atas menjadi hanya dua:
1 2 3 4 5 6 7 8
B C A D B A D A
[0, 0, 1, 1, 0, 1, 1, 1]
[1, 0, 0, 1, 1, 0, 1, 0]
Artinya, solusi untuk pengujian Anda adalah: 00110111
, 10011010
. Dengan menggabungkan ini, kita mendapatkan angka biner
0011011110011010
, atau 14234
dalam desimal. Gunakan nilai desimal ini untuk menipu pada tes Anda!
Tantangan
Ambil angka N
dalam kisaran (inklusif) [0, 65535]
, dan keluarkan string dengan jawaban untuk tes pilihan ganda.
Kasus uji:
14234
BCADBADA
38513
ABBDCAAB
0
CCCCCCCC
120
CBBBBCCC
65535
DDDDDDDD
39253
ABCDABCD
Outputnya mungkin dalam huruf besar atau kecil, tetapi Anda tidak dapat menggunakan simbol lainnya.
sumber
A=10, B=01
, kemudianC=nor(A,B)
, danD=and(A,B)
, terinspirasi oleh tantangan Adnan. Kalau dipikir-pikir, mungkin lebih baik melakukannya sebaliknya, tapi yah ... Sudah terlambat sekarang ...Jawaban:
Jelly , 14 byte
Cobalah online! atau verifikasi semua kasus uji .
Bagaimana itu bekerja
sumber
05AB1E ,
191816 byteKode:
Menggunakan pengkodean CP-1252 . Cobalah online!
Penjelasan:
Pertama, kita menambahkan
65536
angka (žH
adalah konstanta yang didefinisikan65536
), yang juga10000000000000000
dalam biner. Ini untuk mengisi angka dengan nol. Mari kita ambil nomornya14234
sebagai contoh.14234 + 65536
sama dengan79770
. Yang dalam biner adalah:Kami menghapus karakter pertama, menghasilkan:
Kami membagi string menjadi dua bagian menggunakan
2ä
:Setelah itu, kita beri zip array
ø
:Mengubahnya kembali menjadi desimal (menggunakan
C
) menghasilkan:Sekarang, kita hanya perlu mengindeksnya dengan string
cbad
. Versi terkompresi untuk string ini adalah’c‰±’
, yang juga dapat diuji di sini . Akhirnya, kita mendapatkan karakter di indeks array di atas. Untuk contoh di atas, ini menghasilkan:sumber
JavaScript (ES6),
5548 byteVersi non-rekursif (55 byte)
Dengan menggunakan ekspresi reguler, kita dapat melakukan:
sumber
Python 2, 53 byte
Uji di Ideone .
sumber
(n&257)%127
tetapi lebih lama. Sayang sekali itu prima. Mungkin Anda bisa memikirkan cara untuk mengoptimalkannya.Perakitan CP-1610 , 24 DECLEs (30 byte)
Kode ini dimaksudkan untuk dijalankan pada Intellivision . (1)
Sebuah opcode CP-1610 dikodekan dengan nilai 10-bit, yang dikenal sebagai 'DECLE'. Fungsi sebenarnya adalah 24 DECLE, mulai dari
$4809
dan berakhir pada$4820
.Register CPU Namun 16-bit lebar, sehingga akan mendukung setiap nilai input dalam
0x0000
..0xFFFF
.Keluaran
(1) Memang setidaknya satu kompiler, beberapa emulator dan file ROM pengganti bebas-hak cipta tersedia secara bebas, saya pikir itu tidak melanggar aturan pengiriman PPCG. Tapi tolong beri tahu saya kalau saya salah.
sumber
CJam , 22 byte
Cobalah online!
Penjelasan
Didukung oleh sihir ...
Pemetaan pasangan bit ke huruf dalam tantangan ini agak sewenang-wenang. Jika kita wakili
ABCD
dengan0, 1, 2, 3
(jadi kita bisa menambahkannya ke karakterA
) maka kita ingin pemetaan berikut:Pemetaan ini dapat dihitung dengan rumus kecil ajaib:,
((i1 == i2) + 1) ^ i1
tempat pemeriksaan kesetaraan kembali0
atau1
. Periksa tabel berikut ini, di mana setiap kolom sesuai dengan satu input, setiap baris sesuai dengan satu operasi, dan setiap sel akan menunjukkan tumpukan pada titik itu:Dengan mengingat hal tersebut di sini adalah uraian lengkap dari kode sumber:
Solusi alternatif dengan jumlah byte yang sama yang jelas kurang ajaib:
Dan jika itu berguna bagi siapa pun, jika Anda mengubah bit
i1
dani2
kembali menjadi satu nomor (yaitu ketika Anda ingin pemetaan0 -> 2, 1 -> 1, 2 -> 0, 3 -> 3
) ini dapat dihitung lebih mudah karena(~n - 1) & 3
atau(~n - 1) % 4
jika bahasa Anda mendapat modulo pada nilai negatif dengan benar. Saya pikir ini dapat ditulis secara ringkas seperti3&~-~n
dalam banyak bahasa. Dalam CJam ini ternyata menjadi satu byte lebih lama, karena konversi tambahan kembali dari basis 2.sumber
PHP, 57 Bytes
Versi tanpa operator Bitwise 70 Bytes
sumber
$i
didefinisikan?Mathematica,
75736866 byteTerima kasih kepada @MartinEnder karena telah menghemat 2 byte.
sumber
#+##
danInfix
bekerja, tetapi menggunakanStringPart
tidak bisa dihindari karena kepala"C"["B","A","D"][[#+##]]
adalah"C"
, bukanList
;StringJoin
tidak bekerja#
dan#2
merupakan seluruh daftar.Perl, 42 byte
Termasuk +1 untuk
-n
Berikan masukan pada STDIN:
Hanya kode:
sumber
JavaScript,
113939088 byteTerima kasih banyak kepada @Neil karena membantu saya menghemat 20 byte!
-3 byte terima kasih kepada @Cyoce
Sayangnya, JavaScript tidak memiliki fungsi seperti
decbin
,bindec
, danstr_pad
bahwa PHP memiliki.sumber
(65536+n).toString(2).slice(1)
dan[+b[i+8]+2*b[i]]
akan lebih pendek, misalnya.padStart
, jika itu diterima ke dalam versi ECMAscript di masa depan, akan menghasilkan penghematan yang lebih besar.{…;return }
, gunakaneval("…")
padStart
sekarang ada dalam ECMAScript.MATL, 16 byte
Cobalah secara Online!
atau Verifikasi semua kasus uji
Penjelasan
sumber
Julia, 73 Bytes
Memberikan fungsi untuk mengambil N sebagai input dan mengembalikan jawaban sebagai string.
Cobalah
Bergantung jika array char dihitung sebagai string, seseorang dapat menghilangkan gabungan ( 67 Bytes )
Cobalah
sumber
R, 110 byte
Datang dengan solusi vektor dalam R. Ini mungkin harus dengan golfable dengan datang dengan konversi yang lebih cerdas ke konversi biner.
sumber