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 1
adalah balok bata dan 0
ruang kosong.
Shell Koopa dimasukkan di tepi paling kiri tingkat dan awalnya bergerak ke kanan. Misalnya, level yang terkait dengan input 39
adalah
>100111
karena 100111
39 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 39
is 7
dan 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 6
adalah 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 0
ke 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