Tantangan Anda adalah mengecilkan kode Brainfuck , sesuai dengan aturan ini:
- Hapus apa pun yang bukan salah satunya
+-><[].,
. - Untuk grup berurutan
+
atau-
karakter apa pun, jika jumlah+
s dan-
s sama, hapuslah. - Lakukan hal yang sama seperti di atas, tetapi dengan
>
dan<
. - Hapus urutan
+-><
karakter jika mereka tidak melakukan apa-apa. Misalnya, Anda harus menghapus+>-<->+<
. (Ini mungkin yang paling sulit dan paling sulit untuk diterapkan.) Pastikan Anda tidak mendapatkan positif palsu, seperti+>-<+>-<
, yang tidak boleh dihapus.
Kasus uji:
Memasukkan
++++++[->++++++<]>. prints a $
[-]< resets tape
>,[>,]<[.<] reverses NUL terminated input string
++-->><< does nothing
Keluaran
++++++[->++++++<]>.[-],[>,]<[.<]
Memasukkan
Should disappear: ++>>+<+++<->-->-<<->-<
Should disappear: +++>-<--->+<
Should stay: +++>-<+>---<
Keluaran
+++>-<+>---<
Anda dapat menerima input dan output namun Anda ingin - stdin / stdout, suatu fungsi, dll., Tetapi input mungkin tidak dikodekan dengan keras.
Ini adalah kode-golf , jadi kode terpendek dalam jumlah karakter akan menang.
+++>-<+>---<
,? Ini dapat dipersingkat untuk menghindari gerakan pointer yang tidak perlu, tetapi output yang diharapkan tidak berubah. Pemahaman saya berdasarkan melihat baik pada pertanyaan maupun jawabannya adalah bahwa Doorknob keren dengan spek yang diambil secara longgar; kita harus menghilangkan +-><
sekuens berdekatan yang no-op seperti yang dinyatakan secara eksplisit, dan di luar itu diperbolehkan untuk melakukan minifying tambahan seperti pada contoh Anda ++>>++<<--
, dan kami juga dapat membuat pengaturan ulang selama mereka tidak mengubah fungsionalitas kode, misalnya >+<+
menjadi +>+<
.
+>-<->+<
. (Ini mungkin yang paling sulit dan paling sulit untuk diterapkan.) Pastikan Anda tidak mendapatkan kesalahan positif, seperti +>-<+>-<
, yang seharusnya tidak dihapus. " - ini agak kabur
++>>++<<--
harus keluar>>++<<
, dan itu tidak tercakup. Silakan tambahkan lebih banyak test case.