Dans divers jeux Super Mario , les coquilles vertes et rouges de Koopa Troopa peuvent glisser sans friction sur des surfaces planes et détruire les blocs de briques qui se trouvent sur leur chemin. Lorsqu'un obus heurte un bloc de briques, le bloc se casse, le transformant en espace vide, et l'obus Koopa change de direction. Par exemple, regardez la coquille rouge ici .
Supposons qu'un niveau Super Mario ne dépasse que d'un bloc et que chaque cellule de la grille soit soit une brique soit un espace vide, à l'exception de la cellule la plus à gauche qui contient une coque se déplaçant vers la droite. Le niveau est également périodique , donc si la coquille sort du bord droit ou gauche du niveau, elle rentrera du côté opposé. Dans cette situation, l'obus continuera de rebondir et de briser tous les blocs de briques du niveau jusqu'à ce qu'il n'y en ait plus. Jusqu'où la coque aura-t-elle voyagé juste après la rupture du dernier bloc de briques?
Défi
Écrivez un programme ou une fonction qui accepte un entier décimal non négatif. Ce nombre, exprimé en binaire sans zéros non significatifs (la seule exception est 0 lui-même), code la disposition de niveau élevé d'un bloc. A 1
est un bloc de briques et un 0
espace vide.
Le Koopa Shell est inséré à l'extrémité gauche du niveau et se déplace initialement vers la droite. Par exemple, le niveau associé à l'entrée 39
est
>100111
car 100111
est 39 en binaire, et >
et <
représentent droite et à gauche des obus se déplaçant respectivement.
Vous devez imprimer ou renvoyer la distance totale parcourue par la coque une fois que le tout dernier bloc de briques (aka 1
) a été brisé.
La sortie de 39
is 7
et les changements de niveau ressemblent à ceci:
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
De même, la sortie de 6
est 1
:
Level Cumulative Distance
>110 0
<010 0
001< 1
000> 1 <-- output
Le code le plus court en octets gagne.
Pour référence, voici les sorties des entrées 0
pour 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