Realmente me encantan los rompecabezas de fichas deslizantes, pero recientemente, no he tenido tiempo para ellos. Por lo tanto, necesito un programa que me proporcione mi solución de rompecabezas de fichas deslizantes, específicamente los rompecabezas de Klotski.
Su entrada estará en el siguiente formato:
#######
#001gg#
##.222#
.######
donde #
representa paredes, .
representa un área abierta, g
representa la meta y los números adyacentes representan diferentes bloques. Puedes asumir que:
- No habrá más de 10 bloques.
- No habrá dos bloques con el mismo número.
- Todos los bloques estarán encerrados por paredes.
- La cuadrícula es rectangular
- El
0
bloque es lo suficientemente grande como para cubrir todos los cuadrados de la portería. - Hay una solucion valida
Debes devolver una secuencia de movimientos que colocará el 0
bloque para que cubra todos los cuadrados de la portería. Los bloques no pueden atravesar paredes u otros bloques. Para el rompecabezas anterior, una secuencia apropiada sería
2L,1R,1R,1D,0R,0R,0R
mientras que representa mover el 2
bloque 1 cuadro a la izquierda, el 1
bloque 2 cuadros a la derecha (en la parte superior de la portería) luego 1 cuadro hacia abajo y luego 0
3 cuadros a la derecha.
En realidad, hay varias secuencias que funcionarán para el problema anterior, y producir cualquiera de ellas es aceptable. Su solución debe ser óptima, lo que significa que debe producir una secuencia que resuelva el rompecabezas en el menor número de pasos posible.
La secuencia debe imprimirse como se indicó anteriormente, pero puede estar separada por comas, líneas nuevas o espacios. No me importa si hay comas finales o espacios en blanco. Debe producir la salida en un tiempo razonable (máximo 120 segundos en los siguientes acertijos).
Rompecabezas 1:
..####..
..#00#..
###00###
#......#
#.1122.#
##3124##
.#3344#.
.##55##.
..#gg#..
..####..
Rompecabezas 2:
######
#1002#
#1002#
#3445#
#3675#
#8gg9#
######
Rompecabezas 3:
.####.
##1g##
#22g3#
#4255#
#4.56#
#.006#
#7008#
######
Rompecabezas 4:
.####.
##00##
#.00g#
#.0.1#
#..g2#
######
Este es el código de golf, por lo que gana la solución más corta (en bytes).