Terkadang saat menulis kode brainfuck, Anda merasa perlu membuatnya lebih lama dari yang dibutuhkan untuk mendorong debugging. Anda bisa melakukannya dengan hanya memasukkannya ><
ke sana, tetapi apa yang menyenangkan itu? Anda akan memerlukan sesuatu yang lebih lama dan lebih sedikit TIDAK untuk membingungkan siapa pun yang membaca kode Anda.
Pengantar cepat untuk Brainfuck
Brainfuck adalah bahasa pemrograman esoterik yang dibuat pada tahun 1993 oleh Urban Müller, dan terkenal karena minimalisnya yang ekstrem. (Wikipedia)
Brainfuck adalah bahasa berdasarkan delapan perintah: +-><,.[]
. Kode dijalankan pada sesuatu seperti mesin Turing: rekaman tak terbatas yang nilainya dapat diubah. Dalam tantangan ini, kita akan fokus pada empat yang pertama:
+ increment the value at the pointer
- decrement the value at the pointer
> move the pointer right
< move the pointer left
Brainfuck NOPs
NOP brainfuck adalah urutan karakter brainfuck yang, ketika dieksekusi dari negara bagian manapun, menyebabkan tidak ada perubahan di negara bagian. Mereka terdiri dari empat karakter yang disebutkan di atas.
Tantangan
Tantangannya adalah untuk menulis program atau fungsi yang, ketika dieksekusi, menghasilkan NOP brainfuck acak dari panjang yang diberikan.
Memasukkan
Anda akan menerima sebagai bilangan bulat genap nonnegatif n
. (NOP tidak mungkin untuk aneh n
.)
Keluaran
Anda akan menghasilkan NOP brainfuck acak panjangnya n
.
Aturan
- Definisi NOP: ketika output dari program dimasukkan pada titik mana pun dalam program brainfuck, perilaku program tersebut tidak boleh berubah dengan cara apa pun. Dengan kata lain, itu tidak boleh mengubah keadaan penerjemah.
- Perhatikan bahwa misalnya
+>-<
tidak benar, karena mengubah nilai dari dua sel tanpa mengubahnya kembali. Silakan uji solusi Anda untuk ini sebelum memposting. - Perhatikan juga bahwa itu
+>-<->+<
adalah NOP yang tidak dapat direduksi menjadi tidak ada hanya dengan menghapus><
<>
+-
-+
. Dengan demikian, Anda tidak dapat menggunakan algoritma yang hanya menyisipkan ini di dalam satu sama lain.
- Perhatikan bahwa misalnya
- Setiap NOP yang valid dengan panjang
n
harus memiliki peluang nol muncul di output. Namun, distribusinya tidak harus seragam. - Penerjemah brainfuck yang dimaksud memiliki rekaman sel presisi arbitrer tak terbatas dua kali lipat. Artinya, Anda dapat pergi tanpa batas ke kedua arah, dan menambah / mengurangi setiap sel tanpa batas.
- Program harus selesai dalam 1 menit untuk
n
= 100 pada mesin saya, jadi tidak menghasilkan semua NOP yang mungkin dan mengambilnya. - Jika diberi input yang tidak valid (non-integer, negatif, ganjil, dll.) Anda dapat melakukan apa saja yang Anda suka, termasuk crash.
Mencetak gol
Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang.
Contohnya
Berikut ini semua output yang valid untuk n
= 4:
++-- +-+- +--+ --++ -+-+ -++-
>><< ><>< ><<> <<>> <><> <>><
><+- ><-+ <>+- <>-+
>+-< >-+< <+-> <-+>
+><- -><+ +<>- -<>+
+->< -+>< +-<> -+<>
Berikut adalah beberapa kemungkinan keluaran untuk n
= 20:
+>>->+<->-<<<->>++<<
>+>-<+<->+-<>->+<-<+
+--+-++--++-+--+-++-
>>>>>>>>>+-<<<<<<<<<
.
memiliki efek samping, ,
menimpa nilai yang tidak dapat dipulihkan tanpa penggunaan []
. Tetapi []
akhirnya akan menetapkan nilai ke nol. Ini juga menimpa nilai (jadi kita perlu yang lain []
untuk memulihkannya) kecuali kita bisa yakin bahwa sel yang terpengaruh nol untuk memulai. Namun, kami harus mencari sel seperti [>]
itu dengan sesuatu seperti , dan mustahil untuk kembali ke posisi asal kami.
+-<>
seperti yang Anda minta:a