J'adore vraiment les puzzles coulissants, mais récemment, je n'ai pas eu le temps pour eux. Par conséquent, j'ai besoin d'un programme pour me donner ma solution des puzzles de tuiles coulissantes, en particulier des puzzles Klotski.
Votre contribution sera au format suivant:
#######
#001gg#
##.222#
.######
où #
représente les murs, .
représente une zone ouverte, g
représente le but et les nombres adjacents représentent différents blocs. Vous pouvez supposer que:
- Il n'y aura pas plus de 10 blocs
- Il n'y aura pas deux blocs avec le même numéro
- Tous les blocs seront entourés de murs
- La grille est rectangulaire
- Le
0
bloc est suffisamment grand pour couvrir toutes les cases de but. - Il existe une solution valable
Vous devez renvoyer une séquence de mouvements qui mettra le 0
bloc de sorte qu'il couvre toutes les cases de but. Les blocs ne peuvent pas traverser des murs ou d'autres blocs. Pour le casse-tête ci-dessus, une séquence appropriée serait
2L,1R,1R,1D,0R,0R,0R
tandis que représente le déplacement du 2
bloc 1 carré vers la gauche, le 1
bloc 2 carrés vers la droite (en haut du but) puis 1 carré vers le bas, puis le 0
bloc 3 carrés vers la droite.
Il existe en fait plusieurs séquences qui fonctionneront pour le problème ci-dessus, et la production de l'une d'entre elles est acceptable. Votre solution doit être optimale, ce qui signifie qu'elle doit produire une séquence qui résout le casse-tête en un minimum d'étapes.
La séquence doit être imprimée comme ci-dessus, mais peut être séparée par des virgules, des sauts de ligne ou des espaces. Peu m'importe s'il y a des virgules ou des espaces. Vous devez produire la sortie dans un délai raisonnable (maximum 120 secondes sur les puzzles ci-dessous).
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#
######
C'est du code-golf, donc la solution la plus courte (en octets) l'emporte!