Eu realmente amo quebra-cabeças deslizantes, mas recentemente não tive tempo para eles. Por isso, preciso de um programa para me dar a minha solução de quebra-cabeças deslizantes, especificamente quebra-cabeças de Klotski.
Sua entrada estará no seguinte formato:
#######
#001gg#
##.222#
.######
onde #
representa paredes, .
representa uma área aberta, g
representa a meta e números adjacentes representam blocos diferentes. Você pode assumir que:
- Não haverá mais de 10 blocos
- Não haverá dois blocos com o mesmo número
- Todos os blocos serão fechados por paredes
- A grade é retangular
- O
0
bloco é grande o suficiente para cobrir todos os quadrados de gol. - Existe uma solução válida
Você precisa retornar uma sequência de movimentos que colocarão o 0
bloco para que cubra todos os quadrados de gol. Os blocos não podem atravessar paredes ou outros blocos. Para o quebra-cabeça acima, uma sequência apropriada seria
2L,1R,1R,1D,0R,0R,0R
enquanto representa mover o 2
bloco 1 quadrado para a esquerda, o 1
bloco 2 quadrados para a direita (no topo da meta), depois 1 quadrado para baixo e, em seguida, o 0
bloco 3 quadrados para a direita.
Na verdade, existem várias seqüências que funcionarão para o problema acima, e a produção de qualquer uma delas é aceitável. Sua solução deve ser ótima, o que significa que deve produzir uma sequência que resolva o quebra-cabeça o menor número possível de etapas.
A sequência deve ser impressa como acima, mas pode ser separada por vírgula, nova linha ou espaço. Não me importo se houver vírgulas ou espaços em branco. Você deve produzir a saída em tempo razoável (máximo de 120 segundos nos quebra-cabeças abaixo).
Quebra-cabeça 1:
..####..
..#00#..
###00###
#......#
#.1122.#
##3124##
.#3344#.
.##55##.
..#gg#..
..####..
Enigma 2:
######
#1002#
#1002#
#3445#
#3675#
#8gg9#
######
Enigma 3:
.####.
##1g##
#22g3#
#4255#
#4.56#
#.006#
#7008#
######
Quebra-cabeça 4:
.####.
##00##
#.00g#
#.0.1#
#..g2#
######
Isso é código-golfe, então a solução mais curta (em bytes) vence!