Viele von uns kennen das Spiel Tron. Sie steuern ein "Lightcycle", das auf einem Raster platziert ist. Das Lightcycle fährt immer vorwärts (obwohl Sie die Richtung steuern) und hinterlässt eine permanente Spur. Wenn Sie auf eine Spur stoßen, stürzen Sie ab!
Das Ziel hierbei ist, festzustellen, ob ein bestimmter Pfad eine gültige Schleife ist, das heißt, er kehrt ohne "Absturz" an seinen Ausgangspunkt zurück. Dazu gehen wir davon aus, dass wir am Punkt beginnen (0,0)
. Eine Eingabe erfolgt in der Form N2E1S2W1
, mit einer Reihe von Himmelsrichtungen ( N
ist north
,E
is east
usw.), gefolgt von der Entfernung, um diese Richtung zurückzulegen. In diesem Beispiel würden Sie reisen
N2 : North 2 to (0,2)
E1 : East 1 to (1,2)
S2 : South 2 to (1,0)
W1 : West 1 to (0,0)
Ein Pfad gilt als gültig, wenn er um endet, (0,0)
ohne eine andere Koordinate mehr als einmal zu besuchen (er wird (0,0)
genau zweimal aufgerufen. Einmal am Anfang und einmal am Ende). Denken Sie daran, als im obigen Beispiel, um von (0,0)
zu erhalten (0,2)
, müssen wir auch besuchen (0,1)
.
Andere Beispiele:
input -> output
N1E1S1W1 -> true
N1E1N1E1S2W2 -> true
N1S1E1W1 -> false // Visits (0,0) 3 times
N4E2S2W4S2E2 -> false // Visits (0,2) twice
N3E2S3 -> false // Does not return to (0,0)
N1S1 -> anything //I don't care how you evaluate this case
Ihre Ausgabe kann in beliebiger Form erfolgen, sofern sie für alle wahrheitsgemäßen oder falschen Werte dieselbe Ausgabe liefert.
Die Eingabe kann als Zeichenfolge oder als Liste von Zeichen entweder in der Form S1N2E3
... oder SNNEEE
... verwendet werden. Es gibt auch keine feste Grenze für die Rastergröße, aber es wird davon ausgegangen, dass die Eingabe nicht überläuft. Solange der Code grundsätzlich solide ist, ist es nicht entscheidend, Fälle wie N99999999999999
.
Hinweis: Sie können die Fälle bewerten N1S1
, E1W1
, S1N1
, und W1E1
aber Sie möchten. Sie sind technisch gültige Wege, aber sie widersprechen dem "Tron" -Geist der Herausforderung.
Wertung
Das ist Code-Golf , also gewinnt die kürzeste Antwort!
quelle
N1S1
sollte wahr sein, um mit Ihren Definitionen konsistent zu sein, da es(0, 0)
zweimal und(0, 1)
einmal erreicht, was unter Ihrer Definition gültig ist.N
as1j
,E
as1
,S
as-1j
undW
as nehmen-1
?N99999999999999
Antworten:
Pyth ,
4439 BytesTestsuite .
quelle
JavaScript,
247200 Bytesn
ist eine Funktion der Eingabezeichenfolges
, die1
für true und0
false zurückgibtHier ist eine ungolfed Version als Referenz / Erklärung:
quelle
contains
in keinem Dialekt von Javascript eine Funktion ist. Könnten Sie den Dialekt angeben?Python 3 ,
236161150 BytesProbieren Sie es online!
-75 Bytes dank Leaky Nun
-11 Bytes dank Leaky Nun Oder, wenn wir Eingaben als Liste von längencodierten komplexen Zahlen annehmen dürfen:
Python 2 ,
8573 BytesProbieren Sie es online!
-12 Bytes dank Mr. Xcoder / -9 Bytes dank Leaky Nun (zusammengeführt in einer Bearbeitung)
Das ist mir zu lang, lol
quelle
Jelly ,
1412 BytesIch spiele zum ersten Mal Golf in Jelly. Vorschläge sind willkommen.
Die Eingabe erfolgt als Array von
[direction, distance]
Paaren, wobei die Richtung als komplexe Zahl angegeben wird.Erläuterung:
quelle
Netzhaut , 86 Bytes
Probieren Sie es online! Link enthält Testfälle. Erläuterung:
Wandle die Zahlen in unäre um.
Lauflänge dekodieren die Buchstaben.
N111
muss in verwandelnNNN
, so dass man von jeder unären Zahl subtrahiert wird und dann jede 1 den vorherigen Buchstaben dupliziert.Generieren Sie alle Präfixe (dh Punkte auf dem Pfad) als separate Linien. Ein Leerzeichen wird vorangestellt, um Probleme mit leeren Zeilen zu vermeiden.
Sortieren Sie alle Buchstaben in jeder Zeile in der richtigen Reihenfolge und löschen Sie dann übereinstimmende Paare. Am Ende erhalten wir einen eindeutigen Code für einen bestimmten Punkt im Raster.
Überprüfen Sie Folgendes: a) Der letzte Punkt endet nicht in einem Leerzeichen (dh die Schleife wurde nicht geschlossen) oder zwei doppelte Punkte im Pfad. Wenn der Pfad gültig ist, schlagen alle Überprüfungen fehl und das Ergebnis ist Null.
Kehre das Ergebnis um.
quelle
Perl, 140
Funktioniert mit Zeichenketteneingabe. Vielleicht kann ich mit Array verkürzen, aber ich bezweifle es. Gerne für jede weitere Golfhilfe :)
quelle