Bahasa yang sangat berguna dalam sumber terbatas dan tantangan lainnya adalah Unary , turunan brainfuck di mana program ditulis dengan hanya satu karakter. Tugas Anda adalah menulis program untuk mengubah program dari brainfuck ke unary dan program untuk melakukan yang sebaliknya, kedua program dalam bahasa yang sama. Skor Anda akan menjadi jumlah dari panjang kedua program.
Bagaimana Anda mengubah dari brainfuck ke unary?
- Pertama-tama ubah kode brainfuck Anda menjadi biner berdasarkan tabel ini:
- Sekarang menyatukan kode menjadi satu nomor biner raksasa dalam urutan kode.
- Tambahkan a
1
ke string untuk memastikan nomor biner yang unik. - Konversi dari angka biner ke angka unary menggunakan karakter apa saja.
- Mis:
+.
akan000000000000000000000000000000000000000000000000000000000000000000000000000000000000
(84 nol).
Brainfuck -> Spesifikasi Unary
- Karena program yang dihasilkan akan sangat besar, cetak bukan program yang sebenarnya tetapi hanya panjang dari program yang dihasilkan.
- Ambil program brainfuck sebagai string melalui stdin, function arg, dll dan outputkan panjangnya.
- Program ini akan selalu valid dan hanya memiliki 8 karakter di dalamnya.
Unary -> Spesifikasi Brainfuck
- Anda harus menerapkan kebalikan dari algoritma di atas.
- Sekali lagi karena ukurannya yang besar, inputnya berupa angka yang menjelaskan panjang kode Unary.
- Aturan I / O yang sama seperti biasa.
- Program ini akan selalu valid dan hanya memiliki 8 karakter di dalamnya.
Uji Kasus
- Hello World -
++++++[>++++++++++++<-]>.>++++++++++[>++++++++++<-]>+.+++++++..+++.>++++[>+++++++++++<-]>.<+++[>----<-]>.<<<<<+++[>+++++<-]>.>>.+++.------.--------.>>+.
=239234107117088762456728667968602154633390994619022073954825877681363348343524058579165785448174718768772358485472231582844556848101441556
- Fibonacci -
++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++>++++++++++++++++>>+<<[>>>>++++++++++<<[->+>-[>+>>]>[+[-<+>]>+>>]<<<<<<]>[<+>-]>[-]>>>++++++++++<[->-[>+>>]>[+[-<+>]>+>>]<<<<<]>[-]>>[++++++++++++++++++++++++++++++++++++++++++++++++.[-]]<[++++++++++++++++++++++++++++++++++++++++++++++++.[-]]<<<++++++++++++++++++++++++++++++++++++++++++++++++.[-]<<<<<<<.>.>>[>>+<<-]>[>+<<+>-]>[<+>-]<<<-]<<++...
=13067995222095367150854793937817629722033205198624522624687536186118993888926522550140580142585590431635487113180955099384652678100247403485397450658564826143160529351955621991895221530908461364045400531236124980271740502887704217664044858614821622360156740992393765239123681327824577149595724956207165558106099868913919959549896553103116795519592552089266360725543244154867904980260
Ini adalah kode-golf sehingga skor terendah dalam byte menang!
Adakah yang mencari solusi di Unary? ; P
code-golf
brainfuck
base-conversion
compiler
Maltysen
sumber
sumber
10101010101010
, ketika seharusnya1010010010010
Jawaban:
Pyth, 17 + 17 = 34 byte
BF -> Unary, 17 byte
Unary -> BF, 17 byte
sumber
brainfuck ,
563 335 318 316296 +529 373 366336 = 632 byteKarena ini jelas kehilangan solusi dalam bahasa terkait, berikut adalah solusi dalam brainfuck dan Golunar. Saya tidak dapat memposting jawaban di unary, karena itu akan membutuhkan memori fantastis jutaan kali lebih banyak daripada ada atom di alam semesta ^^
Rutin "kembali" tidak akan memeriksa apakah kode Golunar / Unary valid. Jika bit hitung mod 3! = 1 maka itu akan menjadi loop tak berujung yang mencetak banyak ">" s.
Terima kasih kepada Nitrodon karena membantu saya mendapatkan di bawah 300 karakter untuk bf ke kode unary
brainfuck ke unary
Cobalah online!
dan kembali
Cobalah online!
Golunar / digit-unary,
509 303 288 286268 +478 337 331304 = 572 bytebrainfuck ke unary
dan kembali
Kode sumber
brainfuck ke unary
dan kembali
sumber
Python 2,
80796355 +8664 = 119 BytesTerima kasih kepada Sp3000 untuk banyak sarannya, menghemat banyak byte.
Brainfuck to Unary,
78776153 + 2 = 55 byteMenambahkan dua byte ke akun untuk input yang ada di sekitarnya.
Unary to Brainfuck,
8664 byteLihatlah ideone di sini.
sumber
CJam, 35 byte
Brainfuck to Unary, 17 byte
Cobalah online.
Bagaimana itu bekerja
Unary to Brainfuck, 18 byte
Cobalah online.
Bagaimana itu bekerja
sumber
Bash + coreutils, 39 + 47 = 86
b2u.sh
:u2b.sh
:Hasil tes:
sumber
tr -dc 0-9
(dan dalam kode golf Anda dapat menganggap itu?
baik-baik saja tidakJapt , 13 + 13 = 26 byte
Brainfuck to Unary
Cobalah!
Penjelasan:
Unary to Brainfuck
Cobalah!
Penjelasan:
Catatan
Saya tidak dapat menemukan posting meta, tetapi jika ingatan saya berfungsi dengan benar, jawaban diizinkan membatasi I / O ke angka yang dapat didukung bahasa mereka, asalkan mereka menerapkan algoritma yang akan berfungsi jika bahasa mulai mendukung angka yang lebih besar. Itulah yang terjadi di sini, kemampuan Japt untuk memperlakukan string sebagai "basis
n
menggunakann
karakter ini untuk digit" hanya dapat menggunakannumber
tipe data di sisi lain operasi, dan dengan demikian kotak uji tidak akan benar-benar berjalan dengan sukses; yang keluaran dari program pertama dan masukan dari program kedua akan memaksa nomor satu yang dapat direpresentasikan sebagainumber
, daripada menggunakan jumlah aktual. Untuk angka yang dapat diwakili dengan sempurna oleh Japt'snumber
tipe data program ini akan bekerja seperti yang diinginkan, dan jikanumber
tipe data berubah untuk mendukung angka yang lebih besar maka program ini akan mulai mendukung angka-angka itu juga.sumber
05AB1E , 33 (17 + 16) byte
Brainfuck to Unary-length:
Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
Panjangnya tidak sama dengan Brainfuck
Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
sumber
Dart , 77 + 142 = 219 byte
Cobalah online!
sumber
C (gcc) , 254 byte
Cobalah online!
Menentukan arah yang akan diambil berdasarkan input (
i
), menyimpan hasilnya dalam buffer yang diteruskan (o
). Perhatikan bahwa beberapa kompiler memungkinkan penghematan 4 byte berdasarkan pada urutan o ++ yang ditentukan implementasi. Dalam kasus ini solusi yang disediakan akan memotong karakter tambahan dari konversi Unary-> BF dano[1]
semuanya dapat diganti dengan*o
untuk memulihkan perilaku.sumber
#include <string.h>
footer daripada header untuk menunjukkan itu berfungsi tanpa impor itu. Juga bukankah C ++ lebih pendek karena operatornya kelebihan beban? : Psi
untukui
mungkin*i>47&*i<58
->*i%48<10
?mpz_init_set_str
->mpz_set_str