Bahasa Kompiler Tanpa Singkatan yang Dapat Diucapkan, disingkat INTERCAL , adalah bahasa pemrograman yang sangat unik. Di antara kualitasnya yang tidak dapat diproduksi adalah operator binernya.
Dua operator biner INTERCAL adalah interleave (juga dikenal sebagai mingle ), dan pilih . Interleave diwakili dengan perubahan (¢), dan pilih diwakili dengan sqiggle (~).
Interleave bekerja dengan mengambil dua angka dalam kisaran 0-65535 dan mengganti bit-bit mereka. Contohnya:
234 ¢ 4321
234 = 0000011101010
4321 = 1000011100001
Result: 01000000001111110010001001
Output: 16841865
Pilih karya dengan mengambil dua angka dalam kisaran 0-65535, mengambil bit di operan pertama yang berada di posisi yang sama dengan 1s di operan kedua, dan mengemas bit tersebut dengan benar.
2345 ~ 7245
2345 = 0100100101001
7245 = 1110001001101
Taken : 010 0 10 1
Result: 0100101
Output: 37
Dalam tantangan ini, Anda akan diberikan ekspresi biner menggunakan operasi interleave atau pilih. Anda harus menghitung hasilnya, menggunakan byte sesedikit mungkin.
Ekspresi akan diberikan sebagai string yang dipisahkan spasi, terdiri dari integer dalam 0-65535, spasi, salah satu ¢
atau ~
, spasi, dan integer dalam 0-65535.
Input dan output dapat melalui sistem standar apa saja (STDIN, fungsi, baris perintah, dll.). Celah standar dilarang.
Contoh:
5 ¢ 6
54
5 ~ 6
2
51234 ¢ 60003
4106492941
51234 ~ 60003
422
Ini adalah kode golf - byte terkecil menang. Semoga berhasil.
EDIT: Karena beberapa bahasa tidak mendukung simbol perubahan (¢) INTERCAL, Anda dapat menggunakan simbol uang besar ($) sebagai gantinya, dengan penalti 5 byte.
$
.FIVE ONE TWO THREE FOUR
? Dan bukankah hasilnya harus dalam angka Romawi?Jawaban:
Pyth,
323129 byteCobalah online: Input Reguler / Test Suite
Terima kasih kepada @isaacg untuk bermain golf satu byte.
Penjelasan:
sumber
hMfeT
kesmmFd
dan kemudian memindahkan duplikats
luar terner tersebut. Juga, kode Anda saat ini adalah 32 byte, bukan 33.Python 2,
115112 byteString pada baris kedua berisi karakter tunggal yang tidak dapat dicetak
\x7d
, karakter berikutnya setelahnya~
.Semua harapan yang bagus, lambda tunggal dihancurkan oleh format input. Mungkin ada cara yang lebih baik untuk membaca input. Input suka
"51234 ¢ 60003"
via STDIN.Fungsi ini
f
menggabungkan dua fungsi rekursif berikut:(-3 byte dengan bantuan @xnor)
sumber
(a%2*2+b%2)/3**d
menyimpan 3 karakter tetapi menggunakan komplemend=1-c
. Apakah Anda memiliki cara untuk melakukannya-~(3*c|b%2)
dengan komplemen? Paling buruk itu kehilangan 2 karakter dengan3-3*d
. Juga, formatand-~x+y
bisaandy-~x
sepanjangy
dimulai dengan simbol atau angka.(b%2+5&4-d)
,. Terima kasih!CJam, 31 byte
Cobalah online di juru bahasa CJam .
Bagaimana itu bekerja
sumber
JavaScript (ES6), 103
117 119 124Edit sekarang bekerja dengan angka, bukan string
(tidak termasuk spasi, baris baru, dan komentar)
Tes menjalankan cuplikan pada peramban apa pun yang mendukung EcmaScript 6 (terutama bukan Chrome, bukan MSIE. Saya menguji pada Firefox, Safari 9 dapat berjalan)
sumber
Matlab,
119113 byteTidak Terkumpul:
Contoh:
sumber
R, 145 byte
Penjelasan + tidak dikumpulkan:
sumber
Python 3,
174166148126Cukup mudah, operasi string, lalu konversi kembali ke integer.
Terbatas pada angka yang dalam biner memiliki 99 digit (maks. 2 ^ 99-1 = 633825300114114700748351602687).
Terima kasih, Sp3000 dan Vioz!
Atau 165 karakter, tanpa batas:
Tidak Terkumpul:
sumber
zfill
sebagai gantirjust
untuk melapisi dengan angka nola,b
, cukup masukkanzip
dengan*
percikan, 2)(i if j=='1'else'') -> i[:j>'0']
3) Anda dapat menggunakan tip ini untuk menghemat yang lainif/else
Pyth, 43 byte
Sebagian diriku merasa gugup memposting jawaban Pyth yang panjang pada pertanyaan isaacg ...: oP
Penjelasan:
sumber
C,
127123 byte + 5 penalti = 128scanf
menghitung simbol unicode sebagai lebih dari satu karakter yang menyulitkan banyak hal, jadi saya menerapkan hukuman 5-byte untuk digunakan$
.Perubahan dari versi aslinya adalah:
-Tes untuk $ atau ~ telah direvisi dari
q&2
menjadiq%7
. Ini membalikkan nilai true / false, memungkinkan kode untuk $ operator untuk pergi sebelum:
yang berarti satu set tanda kurung dapat dihilangkan.-Lingkaran
i
sekarang dihitung dalam kekuatan 2 yang lebih panjang, tetapi memungkinkan>>
untuk diganti oleh/
dan menyimpan beberapa tanda kurung.Versi asli 127 byte
Aku pergi dengan satu loop dengan persyaratan di dalam untuk menghindari overhead dua loop. Dalam kedua kasus saya hakhift bit dari operan ke bit 1, dan membangun hasil dari bit yang paling signifikan hingga paling signifikan, meninggalkan hasilnya (mengalikan dengan 2 atau 4) saat aku pergi.
sumber
main
penyebabq
rusak pada mesin saya, yang aneh. Saya berharap masalah sebenarnya adalah denganscanf
, tetapi karena itu saya telah meninggalkan mereka sebagai deklarasi normal.q
dijamin menjadi nol, tetapi dengan deklarasi sebagai parameter fungsiq
berisi 32-bit sampah. Itu tidak akan menjadi masalah jika saya memberikan nilaiq
, tetapiscanf
dengan"%c"
hanya menimpa 8 bit paling signifikan dari sampah, meninggalkan 24 lainnya tidak terdefinisi. Saya mungkin beruntung di kompiler lain!K5,
5352 byteVersi 53-byte:
Masih perlu sedikit lebih banyak bermain golf.
sumber
CJam,
6150464134 byteTerima kasih @Dennis karena menunjukkan golf 4 byte.
Cobalah online .
sumber
]{}/
adalah noop.Haskell, 77
input diberikan dengan menerapkan input ke fungsi / operator
?
dan¢
didefinisikan dalam kode (Haskell tidak dapat mendefinisikan operator~
karena alasan teknis).pada dasarnya bekerja dengan pendekatan rekursif lama.
sumber
J, 173
mengharapkan satu baris input
input diharapkan berakhir setelah baris baru dengan EOF
sumber
Javascript ES6 (3 argumen)
141138136121119 byteUji:
Javascript ES6 (1 argumen)
135133 byteUji:
PS: Baris baru dihitung sebagai 1 byte karena dapat diganti oleh
;
.sumber
Python 3, 157 byte
Versi lengkap dan jelas dapat ditemukan di pastebin saya .
sumber
e
sekali, tidak bisakah Anda hanya sebaris itu?Mathematica, 155 byte
Mengevaluasi fungsi anonim dengan mengambil string sebagai input. Jeda baris ditambahkan untuk kejelasan.
f
dang
mengkonversi ke / dari basis 2.Riffle
melakukan apa yang seharusnya dilakukan interleave . Saya ingin menggunakanSelect
untuk pilih tetapiCases
sayangnya lebih baik. Baris terakhir adalah sedikit tipu daya; spasi diubah menjadi~
operator infiks Mathematica, lalu string dieval'd.sumber