Die Schildkröte möchte sich entlang des Gitters bewegen, um zu seinem Futter zu gelangen. Er möchte wissen, wie viele Züge er braucht, um dorthin zu gelangen.
Da er langsam ist, hat er Teleporter um seine Domain eingerichtet, die er nutzen wird, wenn sich sein Weg verkürzt. Oder meide sie, wenn es seinen Weg verlängert.
Treffen Sie die Schildkröte
🐢
Die Schildkröte lebt auf einem Gitter
Die Schildkröte kann sich zu jedem benachbarten Quadrat bewegen ...
Die Schildkröte kann sich jedoch nicht auf ein Feld mit einem Berg bewegen.
Die Schildkröte möchte seine Erdbeere essen und möchte wissen, wie lange es dauern wird, bis sie zu ihrer Erdbeere
Dieses Beispiel würde die Schildkröte Umdrehungen
Zum Glück Die Schildkröte hat einen Teleporter gefunden! Es gibt zwei Teleports auf dem Gitter, die sich gegenseitig zuordnen. Wenn Sie auf den Teleporter treten, bewegt sich die Schildkröte sofort zum entsprechenden Teleporter. Teleporter sind sehr instabil und nach einmaliger Verwendung verschwinden sie und sind nicht mehr verwendbar.
Die Herausforderung
Wenn eine anfängliche Gitterkonfiguration die Anzahl der Bewegungen ausgibt, benötigt die Schildkröte, um ihre Erdbeere zu erreichen.
Regeln
Sie können davon ausgehen, dass das Eingaberaster eine Lösung hat
Jedes Gitter hat nur eins
strawberry
und zweiportals
und einsturtle
Das Eingaberaster kann in jedem geeigneten Format eingegeben werden
Sie sollten behandeln,
teleporters
sind EinwegartikelIn dem Zug, in dem sich die Schildkröte auf ein
teleporter
Feld bewegt, befindet er sich bereits auf dem entsprechendenteleporter
. Er zieht nie auf einteleporter
und bleibt dort für einen ZugDer kürzeste Weg muss das Portal nicht nutzen
Die Schildkröte kann nicht in Bergkacheln übergehen
Sie können eine beliebige ASCII - Zeichen oder ganze Zahl verwenden , um darzustellen
mountains
,turtle
,empty grid square
,strawberry
Sie können entweder dasselbe Zeichen oder zwei verschiedene ASCII-Zeichen oder ganze Zahlen verwenden, um die
teleporter
Paare darzustellenEin Gitter kann mehr als einen Pfad mit derselben kürzesten Pfadlänge haben
Das ist Code-Golf
Klarstellungen zu Regeln
- Sie sollten behandeln,
teleporters
sind Einwegartikel.
Begründung : Es wurde darauf hingewiesen, dass der Fall von:
Könnte nur durch zweimaliges Betreten und Verlassen der Portale gelöst werden. Zum Zeitpunkt dieser Klarstellung gingen beide Lösungen davon aus, dass sie entweder zur einmaligen Verwendung bestimmt waren, oder es gab keinen Grund, zuvor verwendete Quadrate zu testen. Um zu vermeiden, dass ihre hart erarbeiteten Lösungen kaputt gehen, schien dies der beste Weg zu sein, diesen Aufbau zu erklären. Daher würde dies als ungültiges Raster angesehen.
Testfälle, die als Listen formatiert sind
[ ['T', 'X', 'X', 'S', 'X'], ['X', 'X', 'X', 'X', 'X'], ['X', 'X', 'X', 'X', 'X'] ] --> 3
[ ['T', 'M', 'X', 'S', 'X'], ['X', 'M', 'X', 'X', 'X'], ['O', 'X', 'X', 'X', 'O'] ] --> 4
[ ['T', 'M', 'X', 'S', 'O'], ['O', 'M', 'X', 'X', 'X'], ['X', 'X', 'X', 'X', 'X'] ] --> 2
[ ['T', 'M', 'X', 'S', 'X'], ['O', 'M', 'X', 'X', 'X'], ['O', 'X', 'X', 'X', 'X'] ] --> 4
[ ['T', 'M', 'S', 'X', 'O'], ['X', 'M', 'M', 'M', 'M'], ['X', 'X', 'X', 'X', 'O'] ] --> 7
[ ['T', 'X', 'X', 'S', 'X'], ['O', 'M', 'M', 'M', 'X'], ['X', 'X', 'O', 'X', 'X'] ] --> 3
Für Menschen formatierte Testfälle
T X X S X
X X X X X
X X X X X --> 3
T M X S X
X M X X X
O X X X O --> 4
T M X S O
O M X X X
X X X X X --> 2
T M X S X
O M X X X
O X X X X --> 4
T M S X O
X M M M M
X X X X O --> 7
T X X S X
O M M M X
X X O X X --> 3
Credits
Design und Struktur über: Hungry mouse von Arnauld
Vorgeschlagene Herausforderungen Edit Advice: Kamil-drakari , Beefster
quelle
Antworten:
JavaScript (ES7),
140 139138 BytesÜbernimmt die Eingabe als Ganzzahlmatrix mit der folgenden Zuordnung:
Probieren Sie es online!
Wie?
Die rekursive Hauptsuchfunktion kann entweder nach einem bestimmten Plättchen auf der Tafel suchen (wenn es mit aufgerufen wird ) oder nach einem beliebigen Plättchen bei , das von der aktuellen Position .G t t ≤ 0 ( x , y) ( X, Y)
Es verfolgt die Länge des aktuellen Pfades in und aktualisiert das beste Ergebnis auf wenn die Schildkröte die Erdbeere findet.ich R min ( R , i )
Es wird zuerst mit aufgerufen , um die Startposition der Schildkröte zu finden.t = 2
Es ruft sich mit wenn ein Portal erreicht ist, so dass die Schildkröte zum anderen Portal teleportiert wird. Wir erhöhen während einer solchen Iteration nicht.t = - 1 ich
Jedes besuchte Plättchen wird vorübergehend auf einen Berg gesetzt, um zu verhindern, dass sich die Schildkröte zweimal auf demselben Plättchen auf demselben Weg bewegt. Wenn wir in einer Sackgasse gefangen sind, stoppt die Rekursion einfach, ohne zu aktualisieren .R
Kommentiert
quelle
Python 2 ,
441431341 BytesProbieren Sie es online!
Eingabe als Listen, aber mit Zahlen anstelle von Zeichen (dank Quintec) und einem separaten Wert für das Ziel des Teleporters. Diese großen Einrückungen sollten Tabulatorzeichen sein, wenn sie von Stack Exchange entfernt werden. Alle Tipps oder Ideen sind besonders willkommen, da ich der Meinung bin, dass dies
vieletwas kürzer werden könnte.Die Tabelle für die Zeichen, die in der Herausforderung für die für mein Programm verwendeten Zahlen verwendet wurden, ist unten aufgeführt. Sie können dieses Programm jedoch auch verwenden .
-10 Byte dank Quintec durch Änderung der Eingabe von Zeichen in Zahlen.
- Vielen Dank an Jonathan Frech, ElPedro und Jonathan Allan.
quelle
Python 2 , 391
397403422BytesProbieren Sie es online!
Das Problem wird in eine Grafik übersetzt und die Lösung besteht darin, den kürzesten Weg von der Schildkröte zur Erdbeere zu finden.
quelle