В различных играх Super Mario зеленые и красные снаряды Koopa Troopa могут скользить без движения по плоским поверхностям и разрушать находящиеся на их пути кирпичные блоки . Когда оболочка попадает в кирпичный блок, блок разрушается, превращая его в пустое пространство, и оболочка Купа меняет направление. В качестве примера посмотрите красную оболочку здесь .
Предположим, что уровень Super Mario составляет всего один блок высотой, и каждая ячейка сетки является либо кирпичом, либо пустым пространством, за исключением самой левой ячейки, которая содержит движущуюся вправо оболочку. Уровень также является периодическим , поэтому, если оболочка выходит из правого или левого края уровня, она снова войдет в противоположную сторону. В этой ситуации снаряд продолжит отражаться от всех кирпичных блоков на уровне, пока их больше не будет. Как далеко пройдёт снаряд сразу после того, как сломается последний кирпичный блок?
Вызов
Напишите программу или функцию, которая принимает неотрицательное десятичное целое число. Это число, выраженное в двоичном формате без начальных нулей (единственное исключение - сам 0), кодирует макет верхнего уровня с одним блоком. А 1
- кирпичный блок, а 0
- пустое пространство.
Оболочка Купа вставляется в самый левый край уровня и изначально движется вправо. Например, уровень , связанный с входным сигналом 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