Tìm đường Roguelike
Nhiệm vụ của bạn sẽ là, đưa ra một mảng hai chiều của các yếu tố được mô tả bên dưới, đại diện cho ngục tối, để xuất hoặc trả về một số duy nhất đại diện cho số lượng vàng mà kẻ lừa đảo có thể thu thập mà không đánh thức bất kỳ quái vật nào.
Các yếu tố của mảng như sau:
- Các khoảng trống được thể hiện bằng một
.
hoặc một khoảng trắng , cuộc gọi của bạn; - Vị trí bắt đầu của Rogue được đại diện bởi, tất nhiên ,
@
; - Một miếng vàng được đại diện bởi
$
; - Tường được đại diện bởi
#
; - Quái vật được đại diện bởi các nhân vật từ regrec sau :
[a-zA-Z*&]
.
Mảng không được chứa bất kỳ ký tự nào không được liệt kê ở trên, vì vậy bạn có thể cho rằng bất cứ thứ gì không phải là một bức tường, một khoảng trống, kẻ lừa đảo hoặc một miếng vàng đều là một con quái vật.
Các quy tắc cho tìm đường là:
- Kẻ lừa đảo chỉ có thể đi qua các ô trống hoặc các ô chứa vàng;
- Phải mất một lượt để di chuyển đến một ô liền kề hoặc theo đường chéo;
- Nhặt vàng là ngay lập tức;
- Kẻ lừa đảo không thể ở liền kề hoặc theo đường chéo với một con quái vật trong hơn một lượt mà không đánh thức nó dậy, điều đó bị cấm;
- Kẻ lừa đảo có thể đi vào khu vực nhận thức của một con quái vật bất kỳ số lần, con quái vật sẽ chỉ thức dậy nếu kẻ lừa đảo dành hai lượt liên tiếp gần nó.
Quy tắc đầu vào và đầu ra
Bạn có thể nhận đầu vào ở bất kỳ định dạng hợp lý nào, bao gồm mảng hai chiều, mảng phẳng, chuỗi hoặc bất cứ thứ gì khác. Nếu nó làm cho cuộc sống của bạn dễ dàng hơn, bạn cũng có thể lấy kích thước của mảng.
Nó được đảm bảo rằng kẻ lừa đảo sẽ không ở gần một con quái vật ngay từ đầu.
Một chương trình đầy đủ hoặc một chức năng là tốt.
Chấm điểm
Đây là môn đánh gôn , điểm số là số byte trong bài nộp của bạn với ít hơn là tốt hơn.
Các trường hợp thử nghiệm
Tôi sử dụng dấu chấm cho các khoảng trống ở đây cho mục đích dễ đọc, nếu bạn muốn bạn có thể sử dụng khoảng trắng (xem bên trên). Cũng lưu ý rằng đây là một sự trùng hợp thuần túy rằng kẻ lừa đảo luôn ở góc trên bên trái, mã của bạn cũng sẽ xử lý bất kỳ vị trí hợp lệ nào khác.
1)
@..
.$.
... -> 1
Chỉ là một bài kiểm tra vệ sinh.
2)
@....
...g$
..... -> 0
Một lần nữa, một bài kiểm tra sự tỉnh táo.
3)
@....
...$g
..... -> 1
Kẻ lừa đảo có thể lấy vàng bằng cách di chuyển từ bên trái.
4)
@....g..
.......$
........
.....h.. -> 1
Kẻ lừa đảo có thể ngoằn ngoèo giữa những con quái vật, không bao giờ ở lại quá một lượt gần nhau.
5)
@....z..
.......$
.....b.. -> 0
Các chiến thuật từ trường hợp thử nghiệm trước không hoạt động ở đây - các khu vực nhạy cảm quái vật chồng chéo.
6)
@$#.
###$
.... -> 1
Kiểm tra sự tỉnh táo.
7)
@..#..
$.$g.$
...#.. -> 2
Như trên.
8)
@#.d#$
$...##
e.....
..$...
##..$b
.#..g$ -> 3
Trong số tất cả vàng ở đây, chỉ có thể đạt được ba mức an toàn: vàng gần vị trí bắt đầu có thể nhận được bằng cách di chuyển xuống một và sau đó quay trở lại vị trí bắt đầu. Để thoát khỏi góc trên cùng bên trái, kẻ lừa đảo phải di chuyển theo đường chéo xuống bên phải hai lần. Vàng ở giữa đặt ra không có thách thức. Vàng bên ngoài được bảo vệ bởi g
và b
có thể có được bằng cách di chuyển theo đường chéo từ nơi bên phải của vàng giữa và sau đó quay trở lại. Phần còn lại không thể có được: vàng phía trên bên phải bị chặn bởi các bức tường và vàng phía dưới bên phải yêu cầu hai lượt trong khu vực nhạy cảm với quái vật.
Các trường hợp thử nghiệm sau đây đã được tặng bởi mbomb007.
9)
12345678
a @....g.D
b .......$
c ......#.
d .....h.. -> 1
Điều này là khó khăn. Một con đường là b4-b5-c6-b7-c8-b8(grab)
.
10)
12345678
a @....g.D
b .......$
c .......#
d .....h.. -> 1
Một con đường là [bc]4-c5-b6-c7-b8(grab)
.
11)
12345678
a @....g.D
b ......#$
c .......#
d .....h.. -> 1
Bức tường phụ không thực sự thay đổi bất cứ điều gì, [bc]4-c5-b6-c7-b8(grab)
vẫn là một giải pháp.
@
là một đầu vào hợp lệ?