In vari giochi di Super Mario le conchiglie Koopa Troopa verdi e rosse possono scivolare senza attrito su superfici piane e distruggere blocchi di mattoni che si trovano sulla loro strada. Quando una shell colpisce un blocco di mattoni, il blocco si rompe, trasformandolo in uno spazio vuoto e la shell Koopa inverte la direzione. Ad esempio, guarda qui la conchiglia rossa .
Supponiamo che un livello di Super Mario sia alto solo un blocco e che ogni cella della griglia sia un mattone o uno spazio vuoto, ad eccezione della cella più a sinistra che contiene un guscio mobile verso destra. Anche il livello è periodico , quindi se la shell esce dal bordo destro o sinistro del livello, rientrerà dal lato opposto. In questa situazione la shell continuerà a rimbalzare e rompere tutti i blocchi di mattoni nel livello fino a quando non ce ne sono più. Fino a che punto la shell avrà viaggiato dopo la rottura dell'ultimo mattone?
Sfida
Scrivi un programma o una funzione che accetta un numero intero decimale non negativo. Questo numero, espresso in binario senza zeri iniziali (l'unica eccezione è lo stesso 0), codifica il layout di livello alto un blocco. A 1
è un blocco di mattoni e a 0
è spazio vuoto.
La Koopa Shell è inserita all'estremità sinistra del livello e inizialmente si sta muovendo a destra. Ad esempio, il livello associato all'input 39
è
>100111
perché 100111
è 39 in binario >
e <
rappresenta rispettivamente le shell mobili destra e sinistra.
È necessario stampare o restituire la distanza totale percorsa dalla shell una volta che l'ultimo blocco di mattoni (aka 1
) è stato rotto.
L'output di 39
è 7
e le modifiche al livello sono simili alle seguenti:
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
Allo stesso modo, l'output per 6
è 1
:
Level Cumulative Distance
>110 0
<010 0
001< 1
000> 1 <-- output
Vince il codice più breve in byte.
Per riferimento, ecco le uscite per gli ingressi 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