Уявіть, що у вас є масив цілих чисел, чиї негативні значення є вказівниками на інші позиції в тому ж масиві, лише що ці значення представляють тунелі, тож якщо значення в позиції A додатне і вказує на позицію B, то значення в позиції B також повинен бути позитивним і вказувати на положення A, щоб представляти обидва кінці тунелю. Так:
Виклик
- Дано масив цілих чисел, перевірте, чи відповідає масив обмеженням тунельний масив і поверніть два чіткі, когерентні значення для truthy та falsey.
- Значення масиву будуть нижчими за нуль для позицій, які не є тунелями, і нульові або вище для позицій тунелю. Якщо ваш масив є 1-індексованим, то нульове значення являє собою не тунельну позицію. Значення без тунелю не потрібно перевіряти.
- Якщо позитивне значення в клітині вказує на себе, це фальсифікація. Якщо A вказує на B, B на C і C на A, це фальсифікація. Якщо додатне значення вказує за межі масиву, це фальсифікація.
Приклади
Наступні приклади індексуються 0:
[-1, -1, -1, 6, -1, -1, 3, -1, -1] Truthy (position 3 points to position 6 and vice versa)
[1, 0] Truthy (position 0 points to position 1 and vice versa)
[0, 1] Falsey (positions 0 and 1 point to themselves)
[4, 2, 1, -1, 0, -1] Truthy
[2, 3, 0, 1] Truthy
[1, 2, 0] Falsey (no circular tunnels allowed)
[-1, 2, -1] Falsey (tunnel without end)
[] Truthy (no tunnels, that's OK)
[-1, -2, -3] Truthy (no tunnels, that's OK)
[1, 0, 3] Falsey (tunnel goes beyond limits)
[1] Falsey (tunnel goes beyond limits)
[1, 0, 3, 7] Falsey (tunnel goes beyond limits)
Це код-гольф , тому може виграти найкоротший код для кожної мови!
[0,1]і [0,-1,2]дали?
[0,1]є в прикладах. "Якщо позитивне значення в комірці вказує на себе, це фальсифікація"
[2,3,0,1]
[0]?