Em vários jogos de Super Mario , as conchas de Koopa Troopa verdes e vermelhas podem deslizar sem atrito em superfícies planas e destruir blocos de tijolos que estão em seu caminho. Quando uma concha atinge um bloco de tijolos, o bloco quebra, transformando-o em espaço vazio, e a concha de Koopa inverte a direção. Como exemplo, assista à concha vermelha aqui .
Suponha que um nível de Super Mario tenha apenas um bloco de altura e cada célula da grade seja um tijolo ou um espaço vazio, exceto a célula mais à esquerda, que contém uma concha que se move para a direita. O nível também é periódico ; portanto, se o shell sair da borda direita ou esquerda do nível, ele entrará novamente no lado oposto. Nesta situação, o projétil continuará ricocheteando e quebrando todos os blocos de tijolos no nível até que não haja mais. Até onde a casca viajou logo após o último bloco de tijolos ser quebrado?
Desafio
Escreva um programa ou função que receba um número inteiro decimal não negativo. Esse número, expresso em binário sem zeros à esquerda (a única exceção é o próprio 0), codifica o layout de nível alto de um bloco. A 1
é um bloco de tijolos e a 0
é um espaço vazio.
O Koopa Shell é inserido na extremidade esquerda do nível e está inicialmente se movendo para a direita. Por exemplo, o nível associado à entrada 39
é
>100111
porque 100111
é 39 em binário, >
e <
representa as conchas em movimento direita e esquerda, respectivamente.
Você precisa imprimir ou retornar a distância total percorrida pelo shell depois que o último bloco de tijolos (aka 1
) for quebrado.
A saída para 39
é 7
e as alterações no nível são assim:
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
Da mesma forma, a saída para 6
é 1
:
Level Cumulative Distance
>110 0
<010 0
001< 1
000> 1 <-- output
O código mais curto em bytes vence.
Para referência, aqui estão as saídas para entradas 0
para 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