У різних іграх Super Mario зелені та червоні снаряди Koopa Troopa можуть безперешкодно ковзати по рівних поверхнях та знищувати цегляні блоки , які їм заважають . Коли снаряд потрапляє в цегляний блок, блок руйнується, перетворюючи його в порожній простір, і оболонка Koopa повертає напрямок. В якості прикладу, подивіться на червону раковину тут .
Припустимо, рівень Super Mario - лише один блок висоти, і кожна комірка сітки - це цегла або порожній простір, за винятком самої лівої комірки, яка містить оболонку, що рухається праворуч. Рівень також періодичний , тому, якщо оболонка виходить з правого або лівого краю рівня, вона знову встане на протилежну сторону. У цій ситуації оболонка продовжуватиме відбиватися від усіх цегляних блоків на рівні, поки не буде більше. Наскільки далеко проїде снаряд після того, як буде розбитий останній цегляний блок?
Виклик
Напишіть програму або функцію, яка приймає невід'ємне десяткове ціле число. Це число, виражене в двійковій формі без провідних нулів (єдиний виняток - 0), кодує макет на рівні одного блоку. A 1
цегляний блок, а а 0
- порожній простір.
Оболонка Koopa вставлена в самому лівому краї рівня і спочатку рухається праворуч. Наприклад, рівень, пов'язаний з введенням, 39
є
>100111
тому що 100111
це 39 у двійковій формі >
і <
представляють відповідно праві та ліві оболонки, що рухаються.
Вам потрібно роздрукувати або повернути загальну відстань, пройдену оболонкою, після того, як 1
був розбитий останній цегляний блок (ака ).
Вихідні показники 39
є 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