Tôi dường như đã nhận được một chút của một dưa chua. Nghĩa đen Tôi đánh rơi một đống dưa chua trên sàn và bây giờ tất cả chúng đều nằm rải rác! Tôi cần bạn giúp tôi thu thập tất cả. Ồ, tôi đã đề cập đến việc tôi có một loạt các robot theo lệnh của tôi chưa? (Chúng cũng nằm rải rác khắp nơi; Tôi rất tệ trong việc sắp xếp mọi thứ.)
Bạn phải lấy đầu vào dưới dạng:
P.......
..1..2..
.......P
........
P3PP...4
.......P
tức là, nhiều dòng của một trong hai .
, P
(dưa muối) hoặc một chữ số (ID của robot). (Bạn có thể giả sử rằng mỗi dòng có độ dài bằng nhau, được đệm bằng .
.) Bạn có thể nhập các dòng này dưới dạng một mảng hoặc đọc từ STDIN hoặc đọc trong một dòng đơn được phân tách bằng dấu phẩy hoặc đọc tệp hoặc làm bất cứ điều gì bạn muốn muốn lấy đầu vào.
Đầu ra của bạn phải ở dạng n
đường kẻ, nơi n
có ID robot cao nhất. (ID Robot sẽ luôn được sắp xếp theo thứ tự bắt đầu từ 1.) Mỗi dòng sẽ chứa đường dẫn của robot, được hình thành từ các chữ cái L
(trái), R
(phải), U
(lên) và D
(xuống). Ví dụ: đây là một ví dụ đầu ra cho câu đố đó:
LLU
RDR
LRRR
D
Nó cũng có thể là
LLU RDR LRRR D
Hoặc là
["LLU","RDR","LRRR","D"]
Hoặc bất kỳ định dạng nào bạn muốn, miễn là bạn có thể cho biết giải pháp được cho là gì.
Mục tiêu của bạn là tìm ra đầu ra tối ưu, là đầu ra có ít bước nhất. Số lượng các bước được tính là số lượng bước lớn nhất từ tất cả các robot. Ví dụ, ví dụ trên có 4 bước. Lưu ý rằng có thể có nhiều giải pháp, nhưng bạn chỉ cần xuất một giải pháp.
Ghi điểm:
- Chương trình của bạn sẽ được chạy với mỗi trong số 5 trường hợp thử nghiệm (được tạo ngẫu nhiên).
- Bạn phải thêm các bước từ mỗi lần chạy và đó sẽ là điểm số của bạn.
- Tổng số thấp nhất, điểm tích lũy sẽ giành chiến thắng.
- Bạn có thể không cứng mã cho các đầu vào cụ thể này. Mã của bạn cũng sẽ làm việc cho bất kỳ đầu vào khác.
- Robot có thể đi qua nhau.
- Chương trình của bạn phải có tính xác định, tức là cùng một đầu ra cho mỗi lần chạy. Bạn có thể sử dụng một trình tạo số ngẫu nhiên, miễn là nó được tạo mầm và luôn tạo ra cùng một nền tảng số.
- Mã của bạn phải chạy trong vòng 3 phút cho mỗi đầu vào. (Ưu tiên ít hơn nhiều.)
- Trong trường hợp hòa, hầu hết các upvote sẽ giành chiến thắng.
Dưới đây là các trường hợp thử nghiệm. Chúng được tạo ngẫu nhiên với một tập lệnh Ruby nhỏ mà tôi đã viết lên.
P.......1.
..........
P.....P...
..P.......
....P2....
...P.P....
.PP..P....
....P....P
PPPP....3.
.P..P.P..P
....P.....
P....1....
.P.....PP.
.PP....PP.
.2.P.P....
..P....P..
.P........
.....P.P..
P.....P...
.3.P.P....
..P..P..P.
..1....P.P
..........
.......2P.
...P....P3
.P...PP..P
.......P.P
..P..P..PP
..P.4P..P.
.......P..
..P...P...
.....P....
PPPP...P..
..P.......
...P......
.......P.1
.P..P....P
P2PP......
.P..P.....
..........
......PP.P
.P1..P.P..
......PP..
P..P....2.
.P.P3.....
....4..P..
.......PP.
..P5......
P.....P...
....PPP..P
Chúc may mắn và đừng để dưa chua ngồi đó quá lâu, nếu không chúng sẽ hư hỏng!
Oh, và tại sao dưa chua, bạn hỏi?
Tại sao không?