Представьте, что у вас есть массив целых чисел, неотрицательные значения которых являются указателями на другие позиции в том же массиве, только эти значения представляют туннели, поэтому, если значение в позиции A положительно и указывает на позицию B, то значение в позиции B также должен быть положительным и указывать на положение A для представления обоих концов туннеля. Так:
Вызов
- Учитывая массив целых чисел, проверьте, соответствует ли массив ограничению для туннельного массива, и верните два различных, согласованных значения для истинности и ложности.
- Значения в массиве будут ниже нуля для не туннельных позиций и ноль или выше для туннельных позиций. Если ваш массив индексируется 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]
?