Rundenbasierte Taktikspiele wie Advance Wars, Wargroove und Fire Emblem bestehen aus einem quadratischen Gitter mit unterschiedlichem Gelände und Einheiten unterschiedlicher Bewegungsklassen, die für jeden Geländetyp unterschiedliche Kosten erfordern. Wir werden eine Untergruppe dieses Problems untersuchen.
Herausforderung
Ihre Aufgabe ist es zu bestimmen, ob ein Ort von einem anderen aus erreichbar ist, wenn ein Raster von Geländekosten und eine Bewegungsgeschwindigkeit vorgegeben ist.
Einheiten können sich nur orthogonal bewegen, wenn die Kosten für das Bewegen auf ein Quadrat dem Wert der entsprechenden Zelle auf dem Gitter entsprechen (das Abheben ist kostenlos). Zum Beispiel kostet der Wechsel von einer Zelle mit dem Wert 3 zu einer Zelle mit dem Wert 1 1 Bewegung, der Wechsel in die andere Richtung erfordert 3 Bewegungen. Auf einige Felder kann möglicherweise nicht zugegriffen werden.
Beispiel
1 [1] 1 1 1
1 2 2 3 1
2 3 3 3 4
1 3 <1> 3 4
Um von [1]
nach zu gelangen, <1>
sind mindestens 7 Bewegungspunkte erforderlich, indem Sie ein Feld nach rechts und dann drei nach unten bewegen. Wenn also die Bewegungsgeschwindigkeit 6 oder weniger beträgt, sollten Sie eine falsche Antwort ausgeben.
Beispiel Testfälle
Bei diesen werden Koordinaten mit Nullindex (Zeile, Spalte) und nicht in eckigen Klammern angegeben, um das Parsen zu vereinfachen. Nicht erreichbare Zellen werden mit dargestelltX
Fall 1a
1 1 2 1 X
1 2 2 1 1
2 1 1 2 1
X X X 1 2
Speed: 5
From (2, 3) to (0, 1)
Output: True
Fall 1b
1 1 2 1 X
1 2 2 1 1
2 1 1 2 1
X X X 1 2
Speed: 4
From (2, 3) to (0, 1)
Output: False
Fall 1c
1 1 2 1 X
1 2 2 1 1
2 1 1 2 1
X X X 1 2
Speed: 5
From (0, 1) to (2, 3)
Output: False
Fall 2a
3 6 1 1 X 4 1 2 1 X
5 1 2 2 1 1 1 X 1 5
2 1 1 1 2 1 1 1 X 1
2 1 1 3 1 2 3 4 1 2
1 1 2 1 1 4 1 1 1 2
3 2 3 5 6 1 1 X 1 4
Speed: 7
From (3, 4) to (2, 1)
Output: True
Fall 2b
3 6 1 1 X 4 1 2 1 X
5 1 2 2 1 1 1 X 1 5
2 1 1 1 2 1 1 1 X 1
2 1 1 3 1 2 3 4 1 2
1 1 2 1 1 4 1 1 1 2
3 2 3 5 6 1 1 X 1 4
Speed: 4
From (3, 4) to (2, 1)
Output: False
Fall 2c
3 6 1 1 X 4 1 2 1 X
5 1 2 2 1 1 1 X 1 5
2 1 1 1 2 1 1 1 X 1
2 1 1 3 1 2 3 4 1 2
1 1 2 1 1 4 1 1 1 2
3 2 3 5 6 1 1 X 1 4
Speed: 7
From (1, 8) to (2, 7)
Output: True
Fall 3a
2 1 1 2
2 3 3 1
Speed: 3
From (0, 0) to (1, 1)
Output: False
Fall 3b
2 1 1 2
2 3 3 1
Speed: 3
From (1, 1) to (0, 0)
Output: True
Regeln, Annahmen und Hinweise
- Standardlücken sind verboten, I / O kann in jedem beliebigen Format vorliegen
- Sie können davon ausgehen, dass sich alle Koordinaten auf dem Raster befinden
- Die Bewegungsgeschwindigkeit wird niemals über 100 liegen
- Unzugängliche Zellen können mit sehr großen Zahlen (z. B. 420, 9001, 1 Million) oder mit 0 oder Null dargestellt werden, je nachdem, was für Sie am bequemsten ist.
- Alle Eingaben bestehen aus positiven Ganzzahlen (es sei denn, Sie verwenden Null oder 0, um nicht erreichbare Zellen darzustellen).
quelle
Antworten:
TSQL Abfrage,
205191 BytesDie Eingabe ist eine Tabellenvariable @t
@ x = Start xpos, @ y = Start ypos @ i = Ende xpos, @ j = Ende ypos @ = Geschwindigkeit
Probieren Sie es online ungolfed version
quelle
Python 2 , 220 Bytes
Probieren Sie es online!
Nimmt ein Array
m
von ganzen Zahlen, wobei'X'
als larger-than-Wert 100 ;, einer Geschwindigkeita
,m
mit der Breitew
und die Höheh
; und gibt zurück, ob wir bei der mit Null indizierten Zeilen- / Spaltenzelle beginnen(r,c)
und zur letzten Zelle gelangen können(R,C)
.Der Algorithmus ist eine modifizierte Überflutung. Leicht ungolfter Code:
quelle
JavaScript (ES7),
116113 Byte(matrix)([endRow, endCol])(speed, startRow, startCol)
Probieren Sie es online!
Kommentiert
quelle
Jelly , 59 Bytes
Probieren Sie es online!
Nicht furchtbar schnell; probiert alle Pfade aus, bis die Geschwindigkeitseinheiten erschöpft sind, und nimmt sogar die Schritte zurück. Dies vermeidet jedoch die Notwendigkeit zu überprüfen, ob Räume besucht werden. Die Eingabe erfolgt als
[nrows, ncols],[start_row, start_col],[end_row, end_col],speed,flattened matrix column-major
Erläuterung
Hilfslink
Hauptlink
quelle
Jelly , 38 Bytes
Ein extrem ineffizientes Vollprogramm, das das Gelände akzeptiert (mit nicht sichtbaren Werten wie 101), dann koordiniert Start und Ende die Geschwindigkeit.
Probieren Sie es online! (Es macht nicht viel Sinn, die meisten Testfälle auszuprobieren!)
Wie?
Erstellt eine Liste aller Permutationen jeder Potenzmenge von "allen Geländepositionen mit Ausnahme von Start und Ende", umgibt jede mit Start und Ende, filtert nach denjenigen, die nur orthogonale Bewegungen der Entfernung eins ausführen, lässt den Start fallen von jedem Index geht es zurück in das Terrain, summiert jeden, nimmt das Minimum, subtrahiert eins und testet, dass dies weniger als die Geschwindigkeit ist.
quelle