W różnych grach Super Mario zielone i czerwone pociski Koopa Troopa mogą ślizgać się bez tarcia na płaskich powierzchniach i niszczyć ceglane bloki na ich drodze. Kiedy pocisk uderza w klocek, blok pęka, zamieniając go w pustą przestrzeń, a pocisk Koopa zmienia kierunek. Jako przykład obejrzyj tutaj czerwoną powłokę .
Załóżmy, że poziom Super Mario ma tylko jeden blok wysokości, a każda komórka siatki jest cegłą lub pustym miejscem, z wyjątkiem lewej komórki, która zawiera poruszającą się w prawo powłokę. Poziom jest również okresowy , więc jeśli pocisk wyjdzie z prawej lub lewej krawędzi poziomu, ponownie pojawi się po przeciwnej stronie. W tej sytuacji pocisk będzie się odbijał i łamał wszystkie cegiełki na poziomie, dopóki nie będzie ich więcej. Jak daleko posunie się pocisk tuż po zerwaniu ostatniego bloku z cegły?
Wyzwanie
Napisz program lub funkcję, która przyjmuje nieujemną liczbę całkowitą dziesiętną. Liczba ta, wyrażona w postaci binarnej bez zer wiodących (jedynym wyjątkiem jest sama 0), koduje układ na poziomie jednego bloku. A 1
to blok z cegły, a a 0
to pusta przestrzeń.
Powłoka Koopa jest wstawiana na bardzo lewej krawędzi poziomu i początkowo porusza się w prawo. Na przykład poziom związany z danymi wejściowymi 39
to
>100111
ponieważ 100111
jest 39 w systemie binarnym >
i <
reprezentuje odpowiednio prawą i lewą ruchomą powłokę.
Musisz wydrukować lub zwrócić całkowitą odległość przebytą przez pocisk po 1
zerwaniu ostatniego bloku cegły (aka ).
Dane wyjściowe dla 39
to 7
i zmiany w poziomie wyglądają następująco:
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
Podobnie, sygnał wyjściowy dla 6
Is 1
:
Level Cumulative Distance
>110 0
<010 0
001< 1
000> 1 <-- output
Najkrótszy kod w bajtach wygrywa.
Dla odniesienia, oto dane wyjściowe dla danych wejściowych 0
do 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