Dalam berbagai game Super Mario, kerang Koopa Troopa hijau dan merah dapat meluncur tanpa gesekan pada permukaan datar dan menghancurkan balok bata yang menghalangi mereka. Ketika sebuah shell menabrak blok bata, blok itu pecah, mengubahnya menjadi ruang kosong, dan shell Koopa berbalik arah. Sebagai contoh, perhatikan cangkang merah di sini .
Misalkan tingkat Super Mario hanya satu blok tinggi dan setiap sel kotak baik batu bata atau ruang kosong, kecuali sel paling kiri yang berisi cangkang yang bergerak ke kanan. Levelnya juga periodik , jadi jika shell keluar dari tepi kanan atau kiri level itu akan masuk kembali di sisi yang berlawanan. Dalam situasi ini cangkang akan terus memantul dan memecah semua balok bata di tingkat sampai tidak ada lagi. Seberapa jauh shell akan melakukan perjalanan tepat setelah blok bata terakhir rusak?
Tantangan
Tulis program atau fungsi yang menggunakan bilangan desimal non-negatif. Angka ini, dinyatakan dalam biner tanpa nol di depan (satu-satunya pengecualian adalah 0 itu sendiri), mengkodekan tata letak tingkat tinggi satu blok. A 1adalah balok bata dan 0ruang kosong.
Shell Koopa dimasukkan di tepi paling kiri tingkat dan awalnya bergerak ke kanan. Misalnya, level yang terkait dengan input 39adalah
>100111
karena 10011139 dalam biner, dan >dan <masing-masing mewakili cangkang bergerak kanan dan kiri.
Anda perlu mencetak atau mengembalikan jarak total yang ditempuh oleh shell setelah blok bata terakhir (alias 1) telah rusak.
Output untuk 39is 7dan perubahan pada level terlihat seperti ini:
Level Cumulative Distance
>100111 0
<000111 0
>000110 0
0>00110 1
00>0110 2
000>110 3
000<010 3
00<0010 4
0<00010 5
<000010 6
000001< 7
000000> 7 <-- output
Demikian pula, output untuk 6adalah 1:
Level Cumulative Distance
>110 0
<010 0
001< 1
000> 1 <-- output
Kode terpendek dalam byte menang.
Untuk referensi, berikut adalah output untuk input 0ke 20:
0 0
1 0
2 0
3 0
4 0
5 0
6 1
7 1
8 0
9 0
10 1
11 2
12 2
13 1
14 3
15 3
16 0
17 0
18 1
19 3
20 2