Lấy cảm hứng từ Chúng tôi nhảy tháp và liên quan đến Mê cung 2D Minus 1D
Giới thiệu
Nhiệm vụ của bạn là tìm ra con đường ngắn nhất để thoát khỏi một mê cung mảng theo các quy tắc được chỉ định.
Thử thách
Mảng 1D a với n phần tử có thể được coi là một mê cung gồm n điểm, trong đó điểm có chỉ số k được kết nối với các điểm với k + a [ k ] và k - a [ k ] theo cách một chiều. Nói cách khác, bạn có thể nhảy tiến hoặc lùi chính xác một bước [ k ] từ điểm có chỉ số k . Các điểm có chỉ số nằm ngoài giới hạn của mảng được xem xét bên ngoài mê cung.
Để minh họa điều này, hãy xem xét các mảng sau,
[0,8,5,9,4,1,1,1,2,1,2]
Nếu chúng ta đang ở phần tử thứ 5 ngay bây giờ, vì phần tử là 4, chúng ta có thể nhảy 4 bước về phía phần tử thứ 9 hoặc lùi 4 bước cho phần tử thứ 1. Nếu chúng ta thực hiện sau, chúng ta sẽ kết thúc với phần tử 0, điều này cho thấy không có động thái nào nữa. Nếu chúng ta làm trước, vì phần tử thứ 9 là 2, chúng ta có thể chọn chuyển sang phần tử thứ 11, lại là phần 2, và sau đó chúng ta có thể nhảy lại phần tử thứ 13, nằm ngoài giới hạn của phần tử thứ 13 mảng và được coi là một lối thoát vào mê cung.
Vì vậy, nếu chúng ta bắt đầu từ phần tử ở giữa, một cách để thoát khỏi mê cung là nhảy lùi 1 bước, tiến 4 bước, tiến 2 bước và lại 2 bước tiến, có thể được biểu thị dưới dạng mảng [-1,4,2,2]
. Ngoài ra, bạn có thể biểu thị nó bằng mảng [4,8,10,12]
ghi chỉ số dựa trên số không của tất cả các điểm trung gian và điểm cuối (chỉ số dựa trên 1 cũng tốt) hoặc chỉ các dấu hiệu , [-1,1,1,1]
.
Thoát khỏi mê cung từ đầu chỉ số thấp cũng OK.
Sử dụng ký hiệu đầu tiên và bắt đầu từ cùng một yếu tố, [1,1,1,2,2]
cũng là một giải pháp nhưng nó không tối ưu vì có 5 bước thay vì 4.
Nhiệm vụ là tìm ra con đường ngắn nhất để thoát khỏi mê cung mảng và xuất ra đường dẫn. Nếu có nhiều hơn một đường dẫn tối ưu, bạn có thể xuất bất kỳ hoặc tất cả các đường dẫn đó. Nếu không có giải pháp, bạn nên xuất ra một giá trị giả do bạn chọn mà có thể thấy rõ từ một đường dẫn hợp lệ (không tạo ra đầu ra nào cả cũng được).
Để đơn giản, số phần tử trong mảng luôn là số lẻ và chúng tôi luôn bắt đầu từ phần tử ở giữa.
Các trường hợp thử nghiệm
Các trường hợp thử nghiệm minh họa các hình thức đầu ra khác nhau, nhưng bạn không bị giới hạn ở những trường hợp này.
Input
Output
[0,8,5,9,4,1,1,1,2,1,2]
[-1,4,2,2]
[2,3,7,1,2,0,2,8,9]
[2,9] (or [2,-5] or [[2,9],[2,-5]])
[0,1,2,2,3,4,4,4,3,2,2,3,0]
[1,-1,1,1]
[0,1,2,2,4,4,6,6,6,6,6,4,2,1,2,2,0]
[]
Thông số kỹ thuật
Bạn có thể viết một chức năng hoặc một chương trình đầy đủ.
Mảng chỉ chứa các số nguyên không âm.
Bạn có thể nhận đầu vào và đầu ra thông qua bất kỳ hình thức tiêu chuẩn nào , nhưng vui lòng ghi rõ trong câu trả lời của bạn về hình thức bạn đang sử dụng.
Đây là code-golf , số byte thấp nhất sẽ thắng.
Như thường lệ, sơ hở mặc định áp dụng ở đây.
[1,1,1,-1]
thay vì [-1,1,1,1]
?
[0,8,5,9,4,1,1,1,2,1,2]
xuất ra[[-1,4,2,2]]
)