Натхненний ми робимо стрибки на вежу і пов'язані з 2D Maze Minus 1D
Вступ
Ваше завдання - знайти найкоротший шлях для виходу з лабіринту масиву, дотримуючись вказаних правил.
Виклик
1D масив a з n елементами може розглядатися як лабіринт, що складається з n точок, де точка з індексом k з'єднана з точками k + a [ k ], а k - a [ k ] односторонньо. Іншими словами, ви можете стрибати вперед або назад рівно на [ k ] кроки з точки з індексом k . Точки з індексом поза межами масиву вважаються поза лабіринту.
Щоб проілюструвати це, розглянемо наступний масив,
[0,8,5,9,4,1,1,1,2,1,2]
Якщо ми зараз на 5-му елементі, оскільки елемента 4, ми можемо перейти 4 кроки вперед до 9-го елемента або 4 кроки назад до 1-го елемента. Якщо ми робимо останнє, ми закінчуємо елементом 0, який вказує, що подальший хід не можливий. Якщо ми зробимо перший, оскільки 9-й елемент - це 2, ми можемо вибрати перехід до 11-го елемента, який знову є 2, і тоді ми можемо знову перейти до "13-го елемента", який знаходиться поза межами масив і розглядається вихід у лабіринт.
Отже, якщо ми почнемо з елемента в середині, один із способів вийти з лабіринту - це стрибок 1 крок назад, 4 кроки вперед, 2 кроки вперед і знову 2 кроки вперед, які можна виразити як масив [-1,4,2,2]
. Як альтернативу можна виразити за допомогою масиву , [4,8,10,12]
який реєструє нульовий індекс на основі всіх проміжних і кінцевих точок (1-індекс також добре), або тільки ознаки, [-1,1,1,1]
.
Уникнути лабіринту з кінця з низьким показником також добре.
Використання першої позначення і починаючи з того ж елемента [1,1,1,2,2]
також є рішенням, але це не є оптимальним, оскільки замість 4 є 5 кроків.
Завдання - знайти найкоротший шлях, щоб вибратися з лабіринту масиву та вивести шлях. Якщо є кілька оптимальних шляхів, ви можете вивести будь-який або всі з них. Якщо рішення немає, вам слід вивести вибране вами хибне значення, яке можна побачити з дійсного шляху (якщо взагалі немає жодного результату).
Для простоти кількість елементів масиву завжди є непарним числом, і ми завжди починаємо з елемента в середині.
Тестові справи
Тестові приклади ілюструють різні форми результатів, але ви цим не обмежуєтесь.
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]
[]
Технічні характеристики
Ви можете написати функцію або повну програму.
Масив містить лише неотримані цілі числа.
Вводити та виводити інформацію можна через будь-яку стандартну форму , але, будь ласка, вкажіть у своїй відповіді, яку форму ви використовуєте.
Це код-гольф , найменша кількість виграних байтів.
Як завжди, тут застосовуються лазівки за замовчуванням .
[1,1,1,-1]
замість [-1,1,1,1]
?
[0,8,5,9,4,1,1,1,2,1,2]
, виведення[[-1,4,2,2]]
)