Bạn là một du khách băng qua sa mạc giữa hai thị trấn. Bạn không thể mang đủ nước để đi qua mà không dừng lại. Đây là một biến thể của một câu đố cổ điển.
Những quy định
Một sa mạc trông như thế này: một lưới WxH chủ yếu là không gian trống. Không gian được đánh dấu S
là nơi bạn bắt đầu, E
là nơi bạn muốn kết thúc và một hình vuông được đánh dấu bằng số N chứa N đơn vị nước. Hình vuông được đánh dấu bằng một .
nước giữ không.
.....................................
........S............................
.....................................
.........7...........................
.....................................
.......................3.............
.....5...............................
................................2....
.....................................
.....................................
.....................................
...............................E.....
.....................................
....................7................
.....................................
.....................................
Bạn bắt đầu tại S với 5 đơn vị nước.
Bạn có thể mang theo tối đa 5 đơn vị nước.
Mỗi lượt bạn
- di chuyển một hình vuông lên, xuống, trái hoặc phải,
- tiêu thụ 1 đơn vị nước mà bạn đang mang,
- nhặt hoặc thả một số đơn vị nước.
Một ngã rẽ được ký hiệu như vậy : (direction)(+|-)(units of water)
, +
cho biết bạn đang lấy nước, -
rằng bạn đang thả nó.
Ví dụ lần lượt:
D+0 Move Down
R+0 Move Right
D+2 Move Down, pick up two units of water.
U-1 Move Up, drop one unit of water.
Nếu bạn thực hiện các động tác này bắt đầu từ S trong ví dụ trên, sa mạc sẽ trông như thế này sau đó.
.....................................
........S............................
.........1...........................
.........5...........................
.....................................
.......................3.............
.....5...............................
................................2....
.....................................
.....................................
.....................................
...............................E.....
.....................................
....................7................
.....................................
.....................................
Bạn có thể lấy không nhiều nước hơn trên quảng trường của bạn. Khi bạn lấy nước, hãy trừ số đơn vị đó vào số đếm của gạch.
Bạn chỉ có thể lấy nước để chứa tối đa 5 đơn vị.
Không có ô nào có thể chứa hơn 9 đơn vị, ngoại trừ S chứa các đơn vị vô cực.
Bạn chỉ có thể thả nhiều nước như bạn đang giữ.
Nước trên mặt đất vẫn không thay đổi cho đến khi bạn lấy lại.
Nếu bạn quay trở lại S, bạn có thể lấy bất kỳ lượng nước nào mà không làm cạn kiệt nó.
Nếu bạn đạt E thì bạn thắng . Bạn vẫn thắng nếu bạn tiêu thụ đơn vị nước cuối cùng của mình trên E.
Nếu sau lượt của bạn, bạn không có nước và bạn không ở trên E, bạn sẽ chết .
Đầu vào và đầu ra
Chương trình của bạn sẽ nhận được một bản đồ bắt đầu có kích thước tùy ý trên STDIN
dưới dạng nghệ thuật ASCII theo định dạng ở trên. Bạn có thể giả sử nó là hình chữ nhật tức là tất cả các dòng có cùng độ dài, có chính xác một S
và một E
hình vuông, tất cả các dòng được kết thúc \n
và toàn bộ STDIN sẽ tuân theo biểu thức này:/^[SE1-9\.\n]+$/
Chương trình của bạn sẽ ghi đầu ra sau vào STDOUT:
- danh sách các động thái,
- trạng thái cuối cùng của bản đồ.
Bạn có thể xuất danh sách di chuyển ở bất kỳ định dạng thuận tiện.
Trạng thái cuối cùng của bản đồ sẽ được in cùng định dạng với đầu vào ngoại trừ việc nó sẽ hiển thị thêm tuyến đường bạn đi qua sa mạc bằng cách đánh dấu tất cả các ô được truy cập bằng #
, nếu ô đó không chứa nước và không phải là S hoặc E (nghĩa là nó là .
)
VÍ DỤ đầu vào:
.....S.
.......
.......
E......
....8..
VÍ DỤ sản lượng chiến thắng:
D+0
D+0
D+0
D+0
L+5
L+0
L+0
L+0
L+0
U+0
.....S.
.....#.
.....#.
E....#.
####3#.
Vô dụng
Khi bạn đăng mã của mình, hãy đăng một đầu vào bản đồ mẫu mà mã của bạn tìm thấy giải pháp thỏa mãn các điều kiện không tầm thường sau:
- S và E cách nhau ít nhất 10 lần.
- Bất kỳ hình vuông nào ban đầu chứa N đơn vị nước phải được bao quanh bởi đường viền N chiều rộng trong đó tất cả các hình vuông là
.
(không có nước, không phải S hoặc E)
THÍ DỤ
........2.
..........
..........
S.1..2....
..........
..........
........1.
..3.......
.........E
Nếu bạn tăng lượng nước trên bất kỳ gạch nào, những thứ trên trở nên tầm thường.
Yêu cầu
Có lẽ chương trình của bạn sẽ gặp phải một số lần thử thất bại trước khi tìm thấy giải pháp, nếu có.
- Chương trình của bạn cuối cùng phải giải quyết bất kỳ đầu vào có thể giải quyết.
- Tôi muốn xem bạn chết - chương trình của bạn sẽ đưa ra các bước di chuyển và bản đồ cuối cùng của tuyến đường đến cái chết cho mỗi nỗ lực thất bại để tìm ra giải pháp.
- Nếu bạn gặp phải một giải pháp chiến thắng, hãy in toàn bộ đầu ra cho điều đó và chấm dứt.
- Chạy cho đến khi tìm thấy giải pháp, nhưng không thử cùng một giải pháp hai lần - tất cả các trường hợp tử vong phải theo các tuyến khác nhau.
- Sử dụng này một đầu vào thử nghiệm:
(nó yêu cầu ít nhất một lần di chuyển để thả bộ đệm nước ở một số điểm giữa).
S........
.........
.........
........E
Mã ngắn nhất được đăng với đầu vào trình diễn không tầm thường mà nó giải quyết được chiến thắng.