さまざまなスーパーマリオゲームで、緑と赤の Koopa Troopaシェルは、平らな表面で摩擦なくスライドし、途中にあるレンガブロックを破壊できます。シェルがレンガブロックに当たると、ブロックが壊れて空のスペースに変わり、Koopaシェルは方向を反転します。例として、こちらの赤いシェルをご覧ください。
スーパーマリオのレベルが1ブロックだけで、すべてのグリッドセルがレンガまたは空のスペースであると仮定します。ただし、右に移動するシェルを含む一番左のセルを除きます。レベルも周期的であるため、シェルがレベルの右端または左端を出ると、反対側から再び入ります。この状況では、シェルはレベル内のすべてのブリックブロックから跳ね返り、それがなくなるまで継続します。最後のレンガブロックが壊れた直後に、シェルはどこまで移動しましたか?
チャレンジ
負でない10進整数を取り込むプログラムまたは関数を作成します。この数値は、先行ゼロなしでバイナリで表現され(唯一の例外は0自体です)、1ブロックの高レベルレイアウトをエンコードします。A 1
はレンガブロックで、a 0
は空のスペースです。
Koopa Shellはレベルの左端に挿入され、最初は右に移動しています。たとえば、入力に関連付けられているレベル39
は
>100111
なぜなら100111
バイナリで39であり、>
そして<
右表し、それぞれのシェルを動かす左。
最後のブロック(別名1
)が壊れたら、シェルが移動した合計距離を印刷するか返す必要があります。
39
is の出力と7
レベルの変更は次のようになります。
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
同様に、の出力6
は1
次のとおりです。
Level Cumulative Distance
>110 0
<010 0
001< 1
000> 1 <-- output
バイト単位の最短コードが優先されます。
参考のため、ここでの入力に対して出力される0
のは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