Bestimmen Sie anhand eines Richtungsgitters sowie einer Start- und Endposition die Mindestanzahl von Ersetzungen im Richtungsraster, die vorgenommen werden müssen, um den Pfad zwischen den beiden Punkten zu vervollständigen. Das Gitter ist doppelt zylindrisch. Dies wird anhand eines Beispiels klarer.
Beispiel
Nehmen wir als Beispiel das folgende Raster:
>>>>v
>>>><
<<<<<
Beginnen wir bei (1, 1)
und enden bei (1, 3)
(wo die Koordinaten sind (x, y)
oder (col, row)
, wobei die obere Zeile und die linke Spalte sind 1
). Eine mögliche Lösung besteht darin, das (1, 1)
und (1, 2)
durch zu ersetzen v
, sodass das endgültige Raster folgendermaßen aussieht:
v>>>v
v>>><
<<<<<
Ausgehend von (1, 1)
würde uns der Weg führen (1, 3)
. Es gibt jedoch eine kürzere Lösung, die ersetzt (5, 2)
werden v
muss. Das endgültige Raster lautet also:
>>>>v
>>>>v
<<<<<
Ausgehend von (1, 1)
führt ein ziemlich langer Weg zu (1, 3)
.
Das Ersetzen von allem in der obersten Reihe durch ^
funktioniert auch (danke @Spitemaster).
Eingang
Die Eingabe besteht aus einem rechteckigen Raster mit 4 möglichen Werten sowie zwei Koordinaten. Sie können das Raster in jedem vernünftigen Format verwenden. Beispiel: Zeichen- oder Ganzzahlmatrix, Zeichenfolgenliste usw. Sie können auch die Abmessungen des Rasters anfordern. Sie können die Koordinaten in jedem vernünftigen Format verwenden. Beispiel: Ganzzahlpaar, komplexe Zahl usw. Sie können zwischen 0- und 1-Indizierung wählen.
Ausgabe
Die Ausgabe sollte eine einzelne Ganzzahl sein, die minimale Anzahl von Gitterersetzungen, die erforderlich sind, um den Pfad vom Anfang bis zum Ende zu schließen.
Regeln und Spezifikationen
- Standardschlupflöcher gelten
- Das Gitter ist doppelt zylindrisch, was bedeutet, dass die Bewegung von oben nach unten, von links nach links nach rechts usw. erfolgt.
Beispielfälle
Die Beispielfälle werden als Zeichenmatrix und 1-indizierte Koordinaten angegeben.
Fall 1
Eingang
>>>>v
>>>><
<<<<<
1 1
1 3
Ausgabe
1
Erläuterung
Siehe Beispiel.
Fall 2
Eingang
<<<<<
v>v>v
>>>>>
1 1
5 3
Ausgabe
1
Erläuterung
Sie können entweder (1, 1)
mit v
oder (2, 1)
mit ersetzen v
. Im ersten Fall (1, 1)
geht der Pfad ausgehend geradeaus und dann rechts zum Ziel. Im zweiten Fall schlängelt sich der Pfad von links nach rechts, erreicht (2, 1)
, geht nach unten, rechts, unten und dann nach rechts, bis er das Ziel erreicht.
Fall 3
Eingang
^^^^^^
><<>>>
vvvvvv
2 2
5 2
Ausgabe
2
Erläuterung
Die beste Änderung besteht darin, die mittlere Reihe links bis zum Punkt zu wickeln. Das heißt, machen Sie das erste und letzte Element in der mittleren Reihe <
. Alternativ machen 2 2
und 3 2
beides >
.
Dies ist eine Code-Golf- Herausforderung, also gewinnt der kürzeste Code!
quelle
^
oder ändernv
.><
? Ping Pong hin und her (so dass beide Positionen erreicht sind) oder ist es so, als ob sich zwischen ihnen eine Wand befindet?Antworten:
JavaScript (ES6),
140135 ByteNimmt die Eingabe als
(a, width, height, x1, y1)(x0, y0)
woa[]
ist eine Matrix von ganzen Zahlen und alle Koordinaten sind 0-indiziert.Wegbeschreibung: für links , für oben , für rechts und für unten .−2 - 1 0 1−1 0 1
Probieren Sie es online aus!
Wie?
Wir verwenden eine Breitensuche, um alle möglichen Pfade von nach auszuprobieren ohne zweimal dieselbe Zelle zu besuchen.(x,y) (X,Y)
Wir verfolgen, wie oft die gewählte Richtung nicht mit der in der Eingabematrix gespeicherten Richtung übereinstimmt.n
Wir geben schließlich , was als der Minimalwert von .m n
quelle
Gelee ,
7372 BytesProbieren Sie es online aus!
Beispiel mit Fall 3, der zwei Änderungen erfordert (hat auch eine Fußzeile, um die
><v^
in Zahlen zu übersetzen ).Ein vollständiges Programm, das die folgenden Argumente erwartet:
Links: eine Liste von zwei Listen; Zuerst das abgeflachte Richtungsgitter, codiert als 1 = rechts, 2 = links, 3 = unten, 4 = oben, gefolgt von einer Liste der Endposition und Startposition als Nullindizes [Zeile, Spalte]. Zum ersten Beispiel
[1,1,1,1,3,1,1,1,1,4,2,2,2,2,2],[[2,0],[0,0]]
.Rechts: Eine Liste der Anzahl der Zeilen, gefolgt von Spalten. Zum ersten Beispiel
[3,5]
Gibt die Anzahl der Änderungen zurück, die erforderlich sind, um von Anfang bis Ende zu gelangen. Langsam, sobald dies mehr als eine Änderung ist. Bei TIO dauert der dritte Beispielfall ca. 30 Sekunden bis zum Abschluss.
Vollständige Erklärung unten, aber Übersicht ist:
Vollständige Erklärung:
quelle