在各种《超级马里奥》游戏中,绿色和红色的 Koopa Troopa弹壳可以在平坦表面上无摩擦地滑动,并破坏挡在途中的砖块。当壳碰到砖块时,块破裂,将其变成空白空间,而Koopa壳反转方向。例如,在这里观看红色外壳。
假设“超级马里奥”级别只有一个街区高,并且每个网格单元都是砖块或空白空间,但最左边的单元包含向右移动的外壳。该关卡也是周期性的,因此,如果壳退出该关卡的右边缘或左边缘,它将在另一侧重新进入。在这种情况下,壳将继续弹起并破坏该关卡中的所有砖块,直到不再有。最后一块砖块破裂后,壳会走多远?
挑战
编写一个包含非负十进制整数的程序或函数。这个数字以二进制形式表示,没有前导零(唯一的例外是0本身),对一个块的高级布局进行编码。A 1
是砖块,a 0
是空白空间。
Koopa外壳插入到水准仪的最左边缘,并且最初向右移动。例如,与输入关联的级别39
为
>100111
因为100111
是二进制39,以及>
和<
右表示和左侧分别移动壳。
一旦最后一块积木(aka 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
IS 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