Adoro i puzzle a tessere scorrevoli, ma di recente non ho avuto tempo per loro. Quindi, ho bisogno di un programma per darmi la mia soluzione di puzzle a tessere scorrevoli, in particolare i puzzle di Klotski.
Il tuo input sarà nel seguente formato:
#######
#001gg#
##.222#
.######
dove #
rappresenta i muri, .
rappresenta un'area aperta, g
rappresenta l'obiettivo e i numeri adiacenti rappresentano blocchi diversi. Puoi presumere che:
- Non ci saranno più di 10 blocchi
- Non ci saranno due blocchi con lo stesso numero
- Tutti i blocchi saranno chiusi da muri
- La griglia è rettangolare
- Il
0
blocco è abbastanza grande da coprire tutti i quadrati dell'obiettivo. - C'è una soluzione valida
Devi restituire una sequenza di mosse che metterà il 0
blocco in modo che copra tutti i quadrati dell'obiettivo. I blocchi non possono passare attraverso muri o altri blocchi. Per il puzzle di cui sopra, sarebbe una sequenza appropriata
2L,1R,1R,1D,0R,0R,0R
mentre rappresenta lo spostamento del 2
blocco 1 quadrato a sinistra, il 1
blocco 2 quadrati a destra (in cima all'obiettivo) quindi 1 quadrato in basso, quindi il 0
blocco 3 quadrati a destra.
Esistono in realtà diverse sequenze che funzioneranno per il problema sopra riportato e la loro produzione è accettabile. La tua soluzione dovrebbe essere ottimale, nel senso che dovrebbe produrre una sequenza che risolva il puzzle nel minor numero di passaggi possibile.
La sequenza deve essere stampata come sopra, ma può essere separata da virgola, newline o spazio. Non mi importa se ci sono virgole o spazi vuoti finali. Dovresti produrre l'output in un tempo ragionevole (massimo 120 secondi nei puzzle di seguito).
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#
######
Questo è code-golf, quindi vince la soluzione più breve (in byte)!