Dalam bahasa pemrograman atau scripting apa pun x , tulis sebuah program yang mengambil kode sumber brainfuck yang valid dari stdin dan output, hingga stdout, kode sumber program, ditulis dalam bahasa x , yang akan menghasilkan hal yang persis sama seperti yang akan dilakukan oleh program brainfuck.
Program Anda harus bekerja untuk program brainfuck yang valid, termasuk file kosong.
Skor Anda akan sama dengan jumlah byte kode sumber Anda, ditambah jumlah byte output Anda diberi input berikut:
+++++ [-]
+++++ +++++ [
> +++++ ++
> ++ +++ ++++ +
> +++
<<< -
]
> ++ . H
> + . e
++ +++ ++. l
. l
+++ . o
> ++ . space
< +++++ +++ . w
----- --- . o
+++ . r
---- - - . l
----- --- . d
> + . exclamation mark
------lol; useless code :-)--------------------------[.............................................][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]<-<<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><
Misalnya, untuk input [-]
, output *p=0;
jauh lebih menguntungkan daripadawhile(*p) *p--;
Jika Anda menggunakan karakter non-ASCII, jumlah byte harus dihitung menggunakan pengkodean UTF-8.
Skor terendah menang. Namun, solusi kreatif yang berupaya meminimalkan output harus didorong oleh peningkatan suara.
byte count of source + (byte count of output)^2
, apakah itu akan mendorong orang untuk lebih fokus pada penyederhanaan hasil?Jawaban:
Perl - 177 (sumber) + 172 (keluaran) = 349
Menghitung shebang sebagai 2 byte, satu untuk setiap opsi. Pertama, masing-masing dari delapan perintah diterjemahkan ke dalam rentang
p-w
, sementara pada saat yang sama menghapus semua karakter lain. String ini kemudian dikodekan dengan run-length dan output dengan decoder / interpreter minimal. Beberapa hal dioptimalkan: string><
jelas tidak melakukan apa-apa, dan loop untuk yang mengikuti secara langsung setelah yang lain dapat dihapus seluruhnya, karena string tidak akan pernah dimasukkan.Output untuk program uji:
Contoh dijalankan:
Perl - 232 (sumber) + 21 (keluaran) = 253
Yang ini didasarkan pada pengamatan FIQ bahwa jika program asli tidak mengandung pernyataan input, output akan statis, dan karenanya dapat dikurangi menjadi satu
print
pernyataan. Jika Anda suka yang ini, pastikan untuk memberi jawabannya +1.Jadi yang bisa kita lakukan adalah pipa
stdout
ke variabel,eval
kode yang akan kita hasilkan, dan bungkus hasilnya menjadi aprint
.... Tapi itu tidak akan selalu berhasil. Setiap kali kode yang akan diterjemahkan akan menghasilkan loop tak terbatas, (misalnya
+[.]
), ini tidak dapat direduksi menjadi satuprint
pernyataan , karena alasan yang jelas. Jadi, sebagai gantinya, kami meluncurkaneval
proses anak dengan batas waktu singkat, dan jika itu tidak selesai dieksekusi dalam waktu itu kami mengeluarkan program yang diterjemahkan seperti sebelumnya.Terstruktur dan berkomentar:
Output untuk program sampel:
Output untuk
,[.]
:Output untuk
+[.]
(setelah 9 detik):sumber
wv.*?(?=w)
itu salah. Saya pikir itu hanya akan menghapus kode hingga yang berikutnya]
, tetapi Anda membutuhkannya untuk menemukan yang cocok]
; Anda harus mengurus sarang ...wv[^v]*(?=w)
, yang secara signifikan lebih pendek daripada alternatifnya.Brainfuck, 5 + 540 = 545 byte
5 byte kode, 540 dari output file tes yang diberikan (dengan asumsi mendapat hitungan langsung dari tempel kode itu).
Dengan asumsi EOF adalah 0.
sumber
bfi
( github.com/susam/bfi ). Kompilasi dan instal saja, dan jalankan seperti ini: dibfi input.bf
manainput.bf
file brainfuck akan ditafsirkan.PHP, 553 + 27 = 580 byte
(553 byte dengan semua spasi putih, yaitu baris baru dan spasi, dihapus)
Saya payah sekali bermain golf PHP, jadi pendekatan ini bisa sangat dioptimalkan. Saya sebagian besar ingin menunjukkan pendekatan saya pada solusi dalam sesuatu yang bukan BF.
Pelaporan kesalahan harus dimatikan, jika tidak PHP akan membenci Anda. Penggunaan: buang ini sebagai halaman, dan jalankan dengan script.php? C = CODE (jika skrip yang dihasilkan membutuhkan input, Anda menjalankannya sebagai out.php? I = INPUT). Ingatlah untuk melepaskan url input!
Apa yang dilakukan pada dasarnya adalah ini - jika skrip BF berisi ",", cukup banyak embed dirinya sebagai skrip yang dihasilkan dengan $ b = 1; di atas. Jika TIDAK mengandung ",", itu mengoptimalkannya ke "echo '<BF output>'". Dengan mudah, skrip uji dalam OP TIDAK memerlukan input apa pun. The addlashes () ada di sana hanya untuk melarikan diri 'dan \.
sumber
C ++, 695 + 510 = 1205 byte
Kode:
Keluaran:
Kode asli:
sumber
Python - 514 + 352 = 866
Kode:
Keluaran:
sumber
io
659 + 553 = 1212
Hal-hal seperti
File standardInput readBufferOfLength(1)
benar - benar membunuh jumlah byte tetapi saya tidak bisa mengatasinya. Saya tidak melakukan optimasi untuk simbol yang diulang atau kurangnya input dalam program BF, tetapi akan terus bekerja pada itu, juga bekerja pada satu yang memanfaatkan kemampuan pemrograman io.Pengujian
Hasil
sumber
Brainfuck , 109 + 407 = 516
Cobalah online!
Ini hanya menghapus operasi non BF dan tidak melihat optimasi lainnya.
sumber
Lua - 328 + 2256 = 2584
(Oh saya baru sadar Anda perlu menambahkan panjang hasilnya juga, skor buruk, sepertinya)
Diambil dari ini jawaban saya.
sumber
Lua - 319 + 21 = 340
Kemungkinan besar ini adalah kode terpendek dari semua, tetapi tidak menerima input, jadi agak curang. Saya mendapat ide untuk versi lain dengan masukan, lihat bagian akhir dari komentar ini.
Lua - 376 + 366 = 742
Versi ini untuk membuktikan bahwa lua dapat melakukan lebih baik dari 2584: D
Kedua versi menambahkan 30000 byte data. Versi kedua saya didasarkan pada input / output: semuanya setelah '.' atau ',' akan dihapus. Versi kedua saya tidak memungkinkan loop tak terbatas ([.,], [], Dll.)
Ide saya adalah untuk mendapatkan:
Dari input Anda, dengan tambahan ', +.'
sumber