Turunan Brainfuck
Mari kita mendefinisikan bahasa pemrograman sederhana seperti Brainfuck . Ini memiliki pita dua arah sel, dan masing-masing sel memegang satu bit. Semua bit awalnya 0. Ada kepala bergerak di kaset, awalnya di posisi 0. Program adalah string di atas karakter <>01!
, dieksekusi dari kiri ke kanan, dengan semantik berikut:
<
menggerakkan kepala satu langkah ke kiri.>
menggerakkan kepala satu langkah ke kanan.0
menempatkan 0 di sel saat ini.1
menempatkan 1 di sel saat ini.!
membalik sel saat ini.
Tidak ada loop, jadi program n karakter berakhir setelah langkah n persis . Suatu program membosankan jika semua sel berisi 0 pada akhir eksekusi, dan menarik jika ada setidaknya satu 1. Perhatikan bahwa ukuran rekaman itu tidak ditentukan, jadi tergantung pada implementasinya, mungkin dua arah tak terbatas atau bundar.
Contoh program
Pertimbangkan programnya 1>>>!<<<<0>!>>>!
. Pada rekaman tanpa batas, eksekusi berlangsung sebagai berikut:
v
00000000000000 Put 1
v
00000100000000 Move by >>>
v
00000100000000 Flip
v
00000100100000 Move by <<<<
v
00000100100000 Put 0
v
00000100100000 Move by >
v
00000100100000 Flip
v
00000000100000 Move by >>>
v
00000000100000 Flip
v
00000000000000
Pada akhirnya, semua sel adalah 0, jadi program ini membosankan. Sekarang, mari kita jalankan program yang sama pada pita bundar dengan panjang 4.
v
0000 Put 1
v
1000 Move by >>>
v
1000 Flip
v
1001 Move by <<<< (wrapping around at the edge)
v
1001 Put 0
v
1000 Move by > (wrapping back)
v
1000 Flip
v
0000 Move by >>>
v
0000 Flip
v
0001
Kali ini, ada sel dengan nilai 1, jadi programnya menarik! Kami melihat apakah suatu program membosankan atau menarik tergantung pada ukuran rekaman itu.
Tugas
Input Anda adalah string yang tidak kosong <>01!
yang mewakili program dalam bahasa pemrograman di atas. Berbagai karakter juga merupakan format input yang dapat diterima. Program ini dijamin akan membosankan ketika dijalankan pada kaset tanpa batas. Output Anda akan menjadi daftar panjang tape di mana program ini menarik. Perhatikan bahwa Anda hanya perlu menguji program pada kaset yang lebih pendek dari panjang program.
Solusi dengan jumlah byte terendah dalam setiap bahasa adalah pemenangnya. Aturan standar kode-golf berlaku.
Uji kasus
> : []
110 : []
1>0<! : [1]
0>>1>0<<>! : [1]
1>>>!<<<<0>!>>>! : [2, 4]
!<!<><<0>!>!<><1!>>0 : [2]
>>!>><>001>0<1!<<!>< : [1, 2, 3]
1!><<!<<<!!100><>>>! : [1, 3]
!!1>!>11!1>>0<1!0<!<1><!0<!<0> : [3, 4]
<><<>>!<!!<<<!0!!!><<>0>>>>!>> : [1, 2, 4]
0>>><!<1><<<0>!>>!<<!!00>!<>!0 : [3]
0000!!!!><1<><>>0<1><<><<>>!<< : []
!>!>!>!>!>1>!>0<!<!<!<0<!<0<!<!<!<1>!>0<<! : [1, 2, 5, 7]
<!!>!!><<1<>>>!0>>>0!<!>1!<1!!><<>><0<<!>><<!<<!>< : [1, 2, 4, 5]
!>1<<11<1>!>!1!>>>0!!>!><!!00<><<<0<<>0<<!<<<>>!!> : [1, 2, 3, 5, 6]
<>01!
?