Ich liebe es wirklich, Puzzles zu schieben, aber in letzter Zeit hatte ich keine Zeit dafür. Daher brauche ich ein Programm, mit dem ich meine Schiebepuzzlespiele, insbesondere Klotski-Puzzlespiele, reparieren kann.
Ihre Eingabe erfolgt in folgendem Format:
#######
#001gg#
##.222#
.######
wobei #
Wände darstellt, .
stellt einen offenen Bereich, g
stellt das Ziel, und benachbarte Zahlen repräsentieren verschiedene Blöcke. Sie können davon ausgehen, dass:
- Es wird nicht mehr als 10 Blöcke geben
- Es wird nicht zwei Blöcke mit der gleichen Nummer geben
- Alle Blöcke werden von Mauern umschlossen
- Das Raster ist rechteckig
- Der
0
Block ist groß genug, um alle Torfelder abzudecken. - Es gibt eine gültige Lösung
Sie müssen eine Folge von Zügen zurückgeben, mit denen der 0
Block alle Zielfelder abdeckt. Blöcke können keine Wände oder andere Blöcke passieren. Für das obige Puzzle wäre eine geeignete Reihenfolge
2L,1R,1R,1D,0R,0R,0R
Während das Verschieben des 2
Blocks 1 Quadrat nach links darstellt, wird der 1
Block 2 mit dem Quadrat nach rechts (über dem Tor), dann mit dem Quadrat nach unten und dann mit dem 0
Quadrat nach rechts mit dem Block 3 verschoben.
Tatsächlich gibt es mehrere Sequenzen, die für das obige Problem geeignet sind, und das Erzeugen einer von ihnen ist akzeptabel. Ihre Lösung sollte optimal sein, was bedeutet, dass eine Sequenz erstellt werden sollte, die das Rätsel in so wenigen Schritten wie möglich löst.
Die Sequenz sollte wie oben gedruckt werden, kann jedoch durch Kommas, Zeilenumbrüche oder Leerzeichen getrennt sein. Es ist mir egal, ob es nachgestellte Kommas oder Leerzeichen gibt. Sie sollten die Ausgabe in angemessener Zeit erstellen (maximal 120 Sekunden bei den unten aufgeführten Rätseln).
Puzzle 1:
..####..
..#00#..
###00###
#......#
#.1122.#
##3124##
.#3344#.
.##55##.
..#gg#..
..####..
Puzzle 2:
######
#1002#
#1002#
#3445#
#3675#
#8gg9#
######
Puzzle 3:
.####.
##1g##
#22g3#
#4255#
#4.56#
#.006#
#7008#
######
Puzzle 4:
.####.
##00##
#.00g#
#.0.1#
#..g2#
######
Das ist Code-Golf, also gewinnt die kürzeste Lösung (in Bytes)!