Tôi thực sự thích các câu đố gạch trượt, nhưng gần đây, tôi không có thời gian cho chúng. Do đó, tôi cần một chương trình để cung cấp cho tôi cách khắc phục các câu đố trượt, đặc biệt là các câu đố Klotski.
Đầu vào của bạn sẽ có định dạng sau:
#######
#001gg#
##.222#
.######
trong đó #
đại diện cho các bức tường, .
đại diện cho một khu vực mở, g
đại diện cho mục tiêu và các số liền kề đại diện cho các khối khác nhau. Bạn có thể cho rằng:
- Sẽ không có quá 10 khối
- Sẽ không có hai khối có cùng số
- Tất cả các khối sẽ được bao quanh bởi các bức tường
- Lưới hình chữ nhật
- Các
0
khối là đủ lớn để trang trải tất cả các hình vuông được mục tiêu. - Có một giải pháp hợp lệ
Bạn cần trả về một chuỗi các bước di chuyển sẽ đặt 0
khối sao cho nó bao phủ tất cả các ô vuông mục tiêu. Các khối không thể xuyên qua tường hoặc các khối khác. Đối với câu đố trên, một chuỗi thích hợp sẽ là
2L,1R,1R,1D,0R,0R,0R
trong khi đại diện cho việc di chuyển 2
khối 1 hình vuông sang trái, 1
khối 2 hình vuông bên phải (trên cùng của mục tiêu) sau đó 1 hình vuông xuống, và sau đó 0
khối 3 hình vuông bên phải.
Thực tế, có một số trình tự sẽ hoạt động cho vấn đề trên, và sản xuất bất kỳ trong số chúng là chấp nhận được. Giải pháp của bạn phải là tối ưu, có nghĩa là nó sẽ tạo ra một chuỗi giải câu đố trong càng ít bước càng tốt.
Trình tự nên được in ra như trên, nhưng có thể là dấu phẩy, dòng mới hoặc khoảng cách. Tôi không quan tâm nếu có dấu phẩy hoặc khoảng trắng. Bạn nên tạo đầu ra trong thời gian hợp lý (tối đa 120 giây cho các câu đố bên dưới).
Câu đố 1:
..####..
..#00#..
###00###
#......#
#.1122.#
##3124##
.#3344#.
.##55##.
..#gg#..
..####..
Câu đố 2:
######
#1002#
#1002#
#3445#
#3675#
#8gg9#
######
Câu đố 3:
.####.
##1g##
#22g3#
#4255#
#4.56#
#.006#
#7008#
######
Câu đố 4:
.####.
##00##
#.00g#
#.0.1#
#..g2#
######
Đây là môn đánh gôn, vì vậy giải pháp ngắn nhất (tính bằng byte) sẽ thắng!