En varios juegos de Super Mario , las conchas Koopa Troopa verdes y rojas pueden deslizarse sin fricción sobre superficies planas y destruir bloques de ladrillos que se encuentran en su camino. Cuando un caparazón golpea un bloque de ladrillos, el bloque se rompe, convirtiéndolo en un espacio vacío, y el caparazón de Koopa invierte la dirección. Como ejemplo, mira el caparazón rojo aquí .
Supongamos que un nivel de Super Mario tiene solo un bloque de altura y cada celda de la cuadrícula es un ladrillo o un espacio vacío, excepto la celda más a la izquierda que contiene un caparazón que se mueve hacia la derecha. El nivel también es periódico , por lo que si el caparazón sale del borde derecho o izquierdo del nivel, volverá a ingresar en el lado opuesto. En esta situación, el caparazón continuará rebotando y romperá todos los bloques de ladrillo en el nivel hasta que no haya más. ¿Qué distancia habrá recorrido el caparazón justo después de que se rompa el último bloque de ladrillo?
Desafío
Escriba un programa o función que tome un entero decimal no negativo. Este número, expresado en binario sin ceros a la izquierda (la única excepción es 0 en sí mismo), codifica el diseño de nivel alto de un bloque. A 1
es un bloque de ladrillo y a 0
es un espacio vacío.
El Koopa Shell se inserta en el borde izquierdo del nivel e inicialmente se mueve hacia la derecha. Por ejemplo, el nivel asociado con la entrada 39
es
>100111
porque 100111
es 39 en binario, >
y <
representan conchas móviles derecha e izquierda respectivamente.
Debe imprimir o devolver la distancia total recorrida por el caparazón una vez que 1
se haya roto el último bloque de ladrillo (también conocido como ).
La salida para 39
es 7
y los cambios en el nivel se ven así:
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
Del mismo modo, la salida para 6
es 1
:
Level Cumulative Distance
>110 0
<010 0
001< 1
000> 1 <-- output
El código más corto en bytes gana.
Como referencia, aquí están las salidas para entradas 0
a 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