Hintergrund
Sie wachen auf und befinden sich in einem eindimensionalen Labyrinth! Ein mystischer Geist (oder etwas anderes) erscheint und erklärt, dass der Ausgang vor Ihnen liegt, aber dass zwischen Ihnen und dem Ausgang eine Reihe von Herausforderungen besteht. Während Sie vorwärts wandern, stellen Sie fest, dass alle sogenannten Herausforderungen nur verschlossene Türen sind. Sie sehen zuerst eine Tür mit einem t-förmigen Schlüsselloch und haben selbst keinen solchen Schlüssel. Verfolgen Sie Ihre Schritte und suchen Sie nach einem Schlüssel mit einer T
Form.
Frustriert findest du eine Buchstabensuppe mit Schlüsseln auf dem Boden, von denen keine mit der Tür übereinstimmt, auf die du gestoßen bist. Durch einen genialen Schachzug (oder Schwachsinn) entscheiden Sie, dass der t
kleingeschriebene Schlüssel möglicherweise in den Steckplatz passt, wenn Sie ihn fest genug einklemmen. Wenn Sie sich der Tür mit dem Kleinbuchstabenschlüssel nähern t
, T
leuchtet das Loch grün und die Tür löst sich vor Ihnen auf.
Eins runter, noch viele ...
Herausforderung
Das Ziel dieser Herausforderung ist es zu markieren, wie viele Schritte Sie benötigen, um das Labyrinth zu verlassen.
Die Eingabe dieser Herausforderung ist das Labyrinth: eine Zeichenfolge, die nur Zeichen enthält [A-Za-z^$ ]
. Glossar:
^
- Der Startraum. Die Eingabe enthält genau einen^
.$
- Der Ausgang (Freiheit!). Die Eingabe enthält genau einen$
.[A-Z]
- Großbuchstaben kennzeichnen Türen. Sie können diese Tür nur betreten, wenn Sie den erforderlichen Schlüssel bereits abgeholt haben.[a-z]
- Kleinbuchstaben kennzeichnen Schlüssel. Sie sammeln diese Schlüssel, indem Sie auf das Feld gehen, in dem sich der Schlüssel befindet.
Die Eingabe enthält höchstens einen Großbuchstaben. Dies bedeutet, dass die Gesamtzahl der Türen zwischen einschließlich 0 und 26 liegt.
Jede verschlossene Tür [A-Z]
hat genau einen entsprechenden Kleinbuchstabenschlüssel [a-z]
. Die Eingabe kann beliebig viele Leerzeichen ( ) enthalten.
Alle Türen befinden sich rechts vom Start und links vom Ausgang. Somit gibt es keine überflüssigen Türen. Alle Eingaben sind lösbar.
Die Ausgabe für diese Herausforderung ist eine Zahl, die Anzahl der Schritte, die erforderlich waren, um das Labyrinth zu verlassen.
Algorithmus
Ihr methodischer Ansatz, um diesen elenden Ort zu verlassen, lautet wie folgt:
- Beginnen Sie am Anfang (
^
) und gehen Sie vorwärts (rechts), um alle Schlüssel zu sammeln, auf die Sie stoßen. - Wenn Sie auf eine Tür stoßen und den richtigen Schlüssel haben, gehen Sie geradeaus zur Tür. Wenn Sie nicht den richtigen Schlüssel haben, gehen Sie rückwärts (links) und sammeln die Schlüssel, auf die Sie stoßen, bis Sie den Schlüssel für die letzte Tür finden, die Sie nicht öffnen konnten.
- Sobald Sie den Schlüssel für die aktuelle problematische Tür gesammelt haben, biegen Sie nach rechts ab und fahren fort.
- Wiederholen Sie diesen Vorgang, bis Sie zum Ausgang (
$
) gelangen.
Erfahrene Golfer werden verstehen, dass Ihr Code diesen spezifischen Algorithmus nicht implementieren muss, solange er dasselbe Ergebnis ausgibt, als ob Sie diesen Algorithmus ausgeführt hätten.
Zählen
Jedes Mal, wenn Sie von einem Feld auf ein anderes Feld treten, zählt dies als ein Schritt. Beim Drehen um 180 ° wird kein zusätzlicher Schritt ausgeführt. Sie können eine Tür nicht ohne den erforderlichen Schlüssel betreten. Sie müssen auf einen Schlüssel treten, um ihn aufzuheben, und müssen auf den Ausgang treten, um zu gewinnen. Nach Ihrem ersten Zug ^
verhält sich das Startfeld ( ) wie jedes andere reguläre Feld.
Beispiele
In diesen Beispielen habe ich die Leerzeichen als Unterstriche für die Lesbarkeit belassen.
Eingabe ist _a_^_A__$__
. Die Ausgabe ist 11
. Sie treten einen 1
Schritt vor, bemerken, dass Sie keinen Schlüssel für die A
Tür haben, und dann über Gesicht. Du gehst zurück, bis du den Raum besetzt, der die a
( 3
Schritte zurück, jetzt 4
total) enthält. Sie gehen dann vorwärts, bis Sie den Raum mit dem Ausgang besetzen ( 7
Schritte vorwärts, 11
total).
Eingabe ist b__j^__a_AJB_$
. Die Ausgabe ist 41
Sie machen zwei getrennte Reisen zur Rückseite des Labyrinths, eine, um den j
Schlüssel zu bekommen , und die nächste, um den b
Schlüssel zu bekommen .
Eingabe ist __m__t_^__x_T_MX_$____
. Die Ausgabe ist 44
. Sie werden keinen zusätzlichen Ausflug machen, um den x
Schlüssel zu bekommen , da Sie ihn auf dem Weg von Anfang bis zur Tür abgeholt haben T
.
Eingabe ist g_t_^G_T$
. Die Ausgabe ist 12
. Sie können den G
Raum nicht ohne Schlüssel betreten und sofort umkehren. Sie haben das Glück, t
auf dem Weg zum g
Schlüssel den Schlüssel abzuholen und auf dem Weg in die Freiheit beide Türen zu öffnen.
Eingabe ist _^_____$
. Die Ausgabe ist 6
. Das war einfach.
I / O-Richtlinien und Gewinnkriterium
Es gelten die Standard-E / A-Regeln. Dies ist eine Code-Golf- Herausforderung.
A
in bA^aB$
wäre auch nicht überflüssig. ;)