Dies ist ein "Pfeil-Labyrinth":
v <
> v
> ^
> v
^ < *
Das *
markiert die Stelle, an der Sie fertig werden. Ihr Ziel ist es, zu finden, wo das Labyrinth beginnt (daher umgekehrtes Labyrinth). In diesem Fall ist es das erste >
in der zweiten Zeile.
v------<
S-+---v |
| >--^
>-+-------v
^ < *
Beachten Sie, dass alle Pfeile verwendet werden müssen. Beachten Sie auch, dass Sie davon ausgehen können, dass die Zeilen gleich lang mit Leerzeichen aufgefüllt werden.
Ihr Programm muss das Labyrinth in einer angemessenen Weise eingeben (stdin, aus einer Datei, einem Meldungsfeld usw.), das Labyrinth muss jedoch vollständig intakt sein. Beispielsweise können Sie die durch Kommas getrennten Zeilen nicht eingeben. Die Eingabe muss genau das Labyrinth sein.
Sie müssen den Anfang des Labyrinths in einer angemessenen Weise ausgeben. Zum Beispiel könnten Sie
- Geben Sie die Koordinaten des Starts aus
- Gib das gesamte Labyrinth aus, wobei der Startpfeil durch einen ersetzt wird
S
- Gib das gesamte Labyrinth mit allen Pfeilen außer dem Startpfeil aus (Leerzeichen intakt!)
- etc.
Solange Sie anhand Ihrer Ausgabe erkennen können, welcher Pfeil der Startpfeil ist, ist dies in Ordnung. Zum Beispiel eine Ausgabe von
"0"
"2"
ist in Ordnung, unabhängig von den Zeilenumbrüchen und Anführungszeichen, da man noch erkennen kann, wo der Start war.
Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes.
>v^
der>
auf das zeigtv
, nicht auf das^
. Ich bearbeite noch mehr Sachen, wenn ich heute wieder zu Hause an einem Computer bin.Antworten:
GolfScript, 55 Bytes
Online-Demo
Es wird davon ausgegangen, dass alle Eingabezeilen mit Leerzeichen gleicher Länge und durch Zeilenumbrüche getrennt sind. Gibt den Byte-Versatz des Startpfeils ab dem Beginn der Eingabezeichenfolge aus (z. B.
12
für das Beispiel-Labyrinth in der Challenge).Insbesondere ermittelt dieses Programm die Byte-Offsets aller Pfeile, auf die kein anderer Pfeil verweist (vorausgesetzt, alle Pfeile verweisen auf einen Pfeil oder ein Ziel; wenn dies nicht zutrifft, kann ein merkwürdiges Verhalten auftreten). Wenn es mehrere solcher Pfeile gibt (die laut Spezifikation in einer gültigen Eingabe nicht möglich sein sollten), werden ihre Offsets standardmäßig einfach in der Ausgabe verkettet. Wenn Sie möchten, können Sie sie
n*
an das Programm anhängen , um sie stattdessen durch Zeilenumbrüche zu trennen.De-Golf-Version mit Kommentaren:
quelle
w
.z
,&
um keinen zusätzlichen Platz zu benötigen. OTOH,?~.~)
macht einen hübschen Smiley. :-)GolfScript (
101100 Bytes)Die Ausgabe erfolgt in der Form,
[[x y]]
in der die Koordinaten beide auf 0 basieren.Online-Demo
Die Verarbeitung erfolgt in zwei Phasen: In der ersten Phase wird das Labyrinth in eine Reihe von
[x y dx dy]
Tupeln umgewandelt. Die zweite Phase ordnet jeden Pfeil / Stern dem Pfeil / Stern zu, auf den er zeigt. (Sternchen verweisen auf sich selbst). Nach der Definition des Problems gibt es genau einen Pfeil, der nicht im Ergebnis dieser Karte enthalten ist, und das ist die Lösung.quelle
;'STUFF'
simuliert die VersorgungSTUFF
über stdin.Mathematica
491323Ungolfed mit Kommentaren
Die Prozedur beginnt am Ende ("*"), findet den darauf zeigenden Pfeil und so weiter, bis der Start erreicht ist.
Die Funktion f [Labyrinth].
Vorläufer [{Abflachen [{überMe [loc, a], unterMe [loc, a], rechts vonMe [loc, a], links vonMe [loc, a]}, 2], a, Voranstellen [Liste, loc]}]]
Golf gespielt
Beispiel
Das Labyrinth. Jedes geordnete Paar enthält die Zeile und Spalte einer Zelle. Beispielsweise bezeichnet {2, 3} die Zelle in Zeile 2, Spalte 3.
Eingang
Ausgabe : Der Pfad von Anfang bis Ende.
quelle
Ich glaube, ich habe einen guten Weg gefunden, um das zu lösen, aber ich habe zufällig daran gesogen, es zu spielen. Ich denke, das könnte viel kürzer sein, also werde ich meine Idee erklären, damit andere sie verwenden können, wenn sie es gut finden.
Wenn jeder Pfeil verwendet werden muss, werden alle Pfeile von einem anderen Pfeil gezeigt, außer einem, das ist unsere Lösung.
Das bedeutet, dass wir das Labyrinth nicht rückwärts spielen müssen, sondern von links oben ausgehend für jeden einzelnen den nächstgelegenen Zeigepfeil überprüfen müssen. Dies ist ein echtes Problem für größere Labyrinthe (da Sie nicht alle vier Richtungen überprüfen müssen, sondern nur eine).
Hier ist meine Lösung:
PHP, 622 Bytes
Ungolfed:
quelle
PHP - 492 Bytes
Diese Lösung setzt voraus, dass sich die Karte in einer lokalen Variablen befindet
$m
. Die kürzeste Methode, die ich zum Übergeben habe, ist über$_GET
:$m=$_GET['m'];
bei 14 Byte. Eine unbenutzte Version mit variabler Karte wird unten zur besseren Lesbarkeit bereitgestellt.quelle
K
281277258Hier ist eine frühere, ungolfed Version
Liefert den Startpunkt wie
x y
bei 0-basierten Indizes.quelle
Python 422
Die Eingabe erfolgt in einer Datei namens
m.txt
. Die Ausgabe ist,(x, y)
aber wenn Sie die letzte Druckanweisung in ändernprint g
, wird die Ausgabe eine Liste[(x, y), (x, y), ...]
mit allen Schritten sein, die vom Ende bis zum Anfang erforderlich sind.quelle