Вдохновлен Мы делаем прыжок в башню и связаны с 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]]
)