In verschiedenen Super Mario Spiele grün und rot Koopa Schalen können reibungsfrei auf flachen Oberflächen gleiten und zerstören Ziegelsteinblöcke , die in ihrer Art sind. Wenn eine Muschel auf einen Ziegelsteinblock trifft, bricht der Block und verwandelt ihn in einen leeren Raum. Die Koopa-Muschel kehrt die Richtung um. Sehen Sie sich hier als Beispiel die rote Muschel an .
Angenommen, ein Super Mario-Level ist nur einen Block hoch und jede Gitterzelle ist entweder ein Ziegelstein oder ein leerer Bereich, mit Ausnahme der Zelle ganz links, die eine sich nach rechts bewegende Hülle enthält. Die Ebene ist ebenfalls periodisch . Wenn die Shell den rechten oder linken Rand der Ebene verlässt, tritt sie auf der gegenüberliegenden Seite wieder ein. In dieser Situation prallt die Schale weiter ab und zerbricht alle Ziegelblöcke im Level, bis keine mehr vorhanden sind. Wie weit ist die Granate gereist, nachdem der letzte Ziegelstein gebrochen wurde?
Herausforderung
Schreiben Sie ein Programm oder eine Funktion, die eine nicht negative Dezimalzahl akzeptiert. Diese Zahl, die in Binärform ohne führende Nullen ausgedrückt wird (die einzige Ausnahme ist 0 selbst), codiert das Ein-Block-High-Level-Layout. A 1
ist ein Ziegelsteinblock und a 0
ist ein leerer Raum.
Die Koopa-Muschel wird ganz links im Level eingefügt und bewegt sich zunächst nach rechts. Zum Beispiel kann der Pegel mit dem Eingang zugeordnet 39
ist ,
>100111
weil 100111
39 in binär ist, und >
und <
jeweils rechte und linke bewegliche Schalen darstellen.
Sie müssen die Gesamtstrecke, die die Muschel zurückgelegt hat, ausdrucken oder zurückgeben, sobald der allerletzte Ziegelsteinblock (aka 1
) gebrochen wurde.
Die Ausgabe für 39
ist 7
und die Änderungen im Level sehen folgendermaßen aus:
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
Ebenso 6
lautet die Ausgabe für 1
:
Level Cumulative Distance
>110 0
<010 0
001< 1
000> 1 <-- output
Der kürzeste Code in Bytes gewinnt.
Als Referenz sind hier die Ausgänge für Eingänge 0
zu 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