Saya sangat suka menggeser puzzle ubin, tetapi baru-baru ini, saya belum punya waktu untuk itu. Oleh karena itu, saya memerlukan program untuk memberi saya perbaikan teka-teki geser ubin, khususnya teka-teki Klotski.
Masukan Anda akan dalam format berikut:
#######
#001gg#
##.222#
.######
di mana #
mewakili dinding, .
mewakili area terbuka, g
mewakili tujuan, dan angka yang berdekatan mewakili blok yang berbeda. Anda dapat mengasumsikan bahwa:
- Tidak akan lebih dari 10 blok
- Tidak akan ada dua blok dengan nomor yang sama
- Semua blok akan ditutup oleh dinding
- Grid berbentuk persegi panjang
- The
0
blok cukup besar untuk menutup semua kotak gawang. - Ada solusi yang valid
Anda harus mengembalikan urutan gerakan yang akan menempatkan 0
blok sehingga mencakup semua kotak sasaran. Blok tidak bisa melewati dinding atau blok lainnya. Untuk teka-teki di atas, urutan yang tepat adalah
2L,1R,1R,1D,0R,0R,0R
sementara mewakili memindahkan 2
blok 1 persegi kiri, 1
blok 2 kotak kanan (di atas gawang) kemudian 1 persegi bawah, dan kemudian 0
blok 3 kotak kanan.
Sebenarnya ada beberapa urutan yang akan bekerja untuk masalah di atas, dan menghasilkan salah satu dari mereka dapat diterima. Solusi Anda harus optimal, artinya harus menghasilkan urutan yang memecahkan teka-teki sesedikit mungkin langkah.
Urutan harus dicetak seperti di atas, tetapi dapat berupa koma, baris baru, atau spasi terpisah. Saya tidak peduli jika ada tanda koma atau spasi. Anda harus menghasilkan output dalam waktu yang wajar (maksimum 120 detik pada teka-teki di bawah).
Teka-teki 1:
..####..
..#00#..
###00###
#......#
#.1122.#
##3124##
.#3344#.
.##55##.
..#gg#..
..####..
Teka-teki 2:
######
#1002#
#1002#
#3445#
#3675#
#8gg9#
######
Teka-teki 3:
.####.
##1g##
#22g3#
#4255#
#4.56#
#.006#
#7008#
######
Teka-teki 4:
.####.
##00##
#.00g#
#.0.1#
#..g2#
######
Ini adalah kode-golf, jadi solusi terpendek (dalam byte) menang!