Sie sind ein Reisender, der die Wüste zwischen zwei Städten durchquert. Sie können nicht genug Wasser tragen, um ohne anzuhalten durchzukommen. Dies ist eine Variante eines klassischen Puzzles.
Die Regeln
Eine Wüste sieht so aus: ein BxH-Gitter mit größtenteils leerem Raum. Das markierte Feld S
befindet sich dort, wo Sie beginnen, E
wo Sie enden möchten, und ein mit der Nummer N markiertes Quadrat enthält N Wassereinheiten. Quadrate, die mit einem .
Hold-Zero Wasser markiert sind.
.....................................
........S............................
.....................................
.........7...........................
.....................................
.......................3.............
.....5...............................
................................2....
.....................................
.....................................
.....................................
...............................E.....
.....................................
....................7................
.....................................
.....................................
Sie beginnen bei S mit 5 Einheiten Wasser.
Sie können maximal 5 Einheiten Wasser mitführen.
Jedes Mal, wenn du an der Reihe bist
- ein Quadrat nach oben, unten, links oder rechts bewegen,
- verbrauchen Sie 1 Einheit Wasser, das Sie tragen,
- Nehmen Sie einige Wassereinheiten auf oder lassen Sie sie fallen .
Ein wiederum notiert also: (direction)(+|-)(units of water)
, +
zeigen Sie Wasser Aufnehmen, -
dass Sie es fallen.
Beispiel Kurven:
D+0 Move Down
R+0 Move Right
D+2 Move Down, pick up two units of water.
U-1 Move Up, drop one unit of water.
Wenn Sie diese Züge ab S im obigen Beispiel ausführen, sieht die Wüste danach so aus.
.....................................
........S............................
.........1...........................
.........5...........................
.....................................
.......................3.............
.....5...............................
................................2....
.....................................
.....................................
.....................................
...............................E.....
.....................................
....................7................
.....................................
.....................................
Sie können nicht mehr Wasser aufnehmen, als sich bereits auf Ihrem Platz befindet. Wenn Sie das Wasser aufheben, ziehen Sie diese Anzahl von Einheiten von der Zählung der Kacheln ab.
Sie können nur Wasser aufnehmen, um maximal 5 Einheiten aufzunehmen.
Kein Plättchen kann mehr als 9 Einheiten enthalten, außer S, das unendlich viele Einheiten enthält.
Sie können nur so viel Wasser fallen lassen, wie Sie gerade halten.
Das Wasser auf dem Boden bleibt unverändert, bis Sie es wieder aufnehmen.
Wenn Sie zu S zurückkehren, können Sie eine beliebige Menge Wasser aufnehmen, ohne es zu verbrauchen.
Wenn Sie E erreichen , gewinnen Sie . Sie gewinnen immer noch, wenn Sie Ihre letzte Wassereinheit auf E verbrauchen.
Wenn du nach deinem Zug null Wasser hast und nicht auf E bist, stirbst du .
Ein- und Ausgang
Ihr Programm erhält eine Startkarte beliebiger Größe STDIN
als ASCII-Grafik im obigen Format. Sie können davon ausgehen, dass es sich um ein Rechteck handelt, dh dass alle Zeilen die gleiche Länge haben, dass es genau ein S
und ein E
Quadrat gibt, dass alle Zeilen mit abgeschlossen \n
sind und dass die gesamte STDIN diesem regulären Ausdruck entspricht:/^[SE1-9\.\n]+$/
Ihr Programm schreibt die folgende Ausgabe nach STDOUT:
- die Liste der Züge,
- der Endzustand der Karte.
Sie können die Liste der Züge in einem beliebigen Format ausgeben.
Der Endzustand der Karte wird im selben Format wie die Eingabe gedruckt, außer dass zusätzlich die Route angezeigt wird, die Sie durch die Wüste genommen haben, indem alle besuchten Kacheln mit markiert werden #
, wenn diese Kacheln kein Wasser enthalten und nicht S oder E sind (d. H es ist .
).
BEISPIEL Eingabe:
.....S.
.......
.......
E......
....8..
BEISPIEL für eine erfolgreiche Ausgabe:
D+0
D+0
D+0
D+0
L+5
L+0
L+0
L+0
L+0
U+0
.....S.
.....#.
.....#.
E....#.
####3#.
Nichttrivialität
Wenn Sie Ihren Code veröffentlichen, veröffentlichen Sie eine Beispiel-Map-Eingabe, in der Ihr Code eine Lösung findet, für die die folgenden Nicht-Trivialitätsbedingungen erfüllt sind:
- S und E sind mindestens 10 Züge voneinander entfernt.
- Jedes Quadrat, das anfänglich N Wassereinheiten enthält, muss von einem N-breiten Rand umgeben sein, in dem sich alle Quadrate befinden
.
(kein Wasser, kein S oder E).
BEISPIEL
........2.
..........
..........
S.1..2....
..........
..........
........1.
..3.......
.........E
Wenn Sie die Wassermenge auf einer Fliese erhöhen, ist das oben Gesagte trivial.
Bedarf
Vermutlich wird Ihr Programm eine Reihe von fehlgeschlagenen Versuchen haben, bevor es eine Lösung findet.
- Ihr Programm muss eventuell lösbare Eingaben lösen.
- Ich möchte Ihnen beim Sterben zusehen - Ihr Programm gibt die Züge und die endgültige Karte der Route zum Tode für jeden fehlgeschlagenen Versuch, eine Lösung zu finden, aus.
- Wenn Sie auf eine gewinnbringende Lösung stoßen, drucken Sie die vollständige Ausgabe aus und beenden Sie den Vorgang.
- Führen Sie den Test durch, bis eine Lösung gefunden wurde. Versuchen Sie jedoch nicht, dieselbe Lösung zweimal zu verwenden. Alle Todesfälle sollten auf unterschiedlichen Wegen verlaufen.
- Verwenden Sie dies als Testeingang:
(Es ist mindestens eine Bewegung erforderlich, um einen Wasser-Cache in der Mitte abzulegen.)
S........
.........
.........
........E
Kürzester Code, der mit einer nicht trivialen Demonstrationseingabe gepostet wird, die er löst, gewinnt.