Однажды ты просыпаешься только для того, чтобы оказаться пойманным во множестве. Вы пытаетесь просто уйти оттуда, взяв один индекс за раз, но, похоже, существуют другие правила:
Массив полностью заполнен натуральными числами.
- Если вы попали в индекс
n
, вы переходите в индексarray[n]
, кроме: - Если вы попадаете в индекс,
n
который является простым числом, вы делаетеarray[n]
шаги назад
Пример: вы начинаете с индекса 4
в этом массиве (индекс запуска равен 0):
array = [1,4,5,6,8,10,14,15,2,2,4,5,7];
-----------------^ you are here
Поскольку значение поля, на котором вы находитесь, является первым шагом 8
, вы переходите к индексу 8
. Поле, в котором вы приземлились, содержит значение 2
. Затем вы идете на индекс в 2
качестве второго шага. Как 2
простое число, вы делаете 5 шагов назад, это ваш третий шаг. Поскольку индекс отсутствует -3
, вы успешно экранировали массив всего за 3 шага.
Ваша задача:
Написать программу или функцию, которая принимает массив и начальный индекс в качестве параметра и выводит количество шагов для выхода из массива. Если вы не можете избежать массива (например, [2,0,2]
с помощью start-index 2
=> вы постоянно переходите от индекса 2
к 0
), выведите ложное значение. Вы можете использовать индексирование на основе одного индекса или индексирование на основе нуля, но, пожалуйста, укажите, какое из них вы используете.
Контрольные примеры
Входные данные: [2,5,6,8,1,2,3], 3
Выход: 1
Входные данные: [2, 0, 2], 2
Выход: false
Входные данные : [14,1,2,5,1,3,51,5,12,3,4,41,15,4,12,243,51,2,14,51,12,11], 5
;
Выход: 6
Самый короткий ответ выигрывает.
источник
Ответы:
Pyth, 31 байт
Тестовые случаи
Для указания ложного значения используется ноль, в противном случае количество прыжков.
источник
Python,
161138 байткредиты для факториала.
Идео это!
Как это работает
Теорема Вильсона используется для простой проверки.
Обнаружение цикла путем сохранения видимых индексов в array (
l
) и проверки наличия текущего индексаl
.источник
Python, 107 байт
Использование:
f(list, start)
ex:f([2,5,6,8,1,2,3], 3)
Возвращает
0
для циклов (определяется, когдаn > len(a)
)источник
Matlab, 138 байт
Это простой подход, использующий индексы на основе 1, потому что Matlab по умолчанию использует индексы на основе 1. Для подсчета количества шагов мы используем
for
цикл от 1 до бесконечности (!). В случае, если мы не можем избежать массива, мы используем вектор,v
чтобы отслеживать, какие записи мы уже посетили. Если мы посещаем запись дважды, мы знаем, что застряли в неизбежном цикле. Чтобы проверить, не находимся ли мы вне массива, мы используемtry/catch
структуру, которая также ловит исключения за пределами границ.источник
05AB1E, 32 байта
объяснение
Попробуйте онлайн
источник
JavaScript (ES6), 100
Индекс базы 0. Примечание: эта функция изменяет входной массив
Меньше гольфа
Тест
источник
JAVA,
229218 байтБлагодаря Кевину, 11 байтов кусает пыль.
источник
Stack<Integer>i=new Stack<>();
могут быть измененыStack i=new Stack();
иreturn 1==2;
могут быть измененыreturn 0>1;
. Кроме того, вы можете упомянуть, что это Java 7 вместо Java в целом.a,b->{...}
вместо этогоObject e(int[]a,int b){...}
, поэтому я лично упоминаю Java 7, чтобы люди знали, что я специально не использовал лямбды Java 8, но решать вам.CJam, 44 байта
Ожидается
index array
в стеке.Попробуйте онлайн!
Мой первый ответ CJam, поэтому он такой ужасный и обязательный ...
(считается нормальным сбой после правильного вывода, как напечатано, что и делает программа здесь)
источник
C, 121 байт
Функция
f
принимает массив, начальный индекс (на основе 0) и количество элементов в массиве, так как нет способа проверить конец массива в C (по крайней мере, я не знаю ни одного).Попробуйте это на Ideone!
Примечание:
function p(n)
проверяет,n
является ли простое число или нет. Кредит на это идет к @ Линн и его ответу Для этого числа простое число?источник
c
для повторного вызова функции.JavaScript,
121132 байтаизменить 1: упс, пропустил бит о возвращении количества шагов. исправить скоро
редактировать 2: исправлено
источник
Ракетка,
183156 байтВозможно, больше байтов будет сохранено при дальнейшей игре в гольф, но это все для меня. :)
Полный модуль с набором тестов с функцией очистки:
Запустите это как
raco test e.rkt
Главные похвалы для @cat обнаружения недокументированной
prime?
функции .источник
Java,
163160 байтp(n)
для простого тестирования,f(a,n)
для функции escape. Использование:Безголовая версия:
источник
Perl 6 , 85 байт
Объяснение:
Это ленивая последовательность индексов, пройденных по правилу. Если индекс в конечном счете превышает границы входного массива (
!(0 <= * < a)
условие), последовательность конечна; в противном случае индексы вращаются бесконечно.Эта последовательность передается внутренней анонимной функции:
Если последовательность определена с индексом, заданным размером входного массива, она должна войти в бесконечный цикл, поэтому
0
возвращается. В противном случае+$_
возвращается размер последовательности .источник
Perl 5 , 107 + 1 (
-a
) = 108 байтПопробуйте онлайн!
0 на основе списка. Возвращает false (пусто), если список неизбежен.
источник