Imagine que você tenha uma matriz de números inteiros, cujos valores não negativos são ponteiros para outras posições na mesma matriz, apenas que esses valores representem túneis; portanto, se o valor na posição A for positivo e apontar para a posição B, então o valor na posição B também deve ser positivo e apontar para a posição A para representar as duas extremidades do túnel. Então:
Desafio
- Dada uma matriz de números inteiros, verifique se a matriz está de acordo com a restrição de ser uma matriz de encapsulamento e retorne dois valores distintos e coerentes para truthy e falsey.
- Os valores na matriz estarão abaixo de zero para posições fora do túnel e zero ou acima para posições no túnel. Se sua matriz é indexada em 1, o valor zero representa uma posição que não é do túnel. Valores não relacionados ao túnel não precisam ser verificados.
- Se um valor positivo em uma célula aponta para si mesmo, isso é falso. Se A aponta para B, B para C e C para A, isso é falso. Se um valor positivo aponta além dos limites da matriz, isso é um erro.
Exemplos
Os exemplos a seguir são indexados em 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)
Este é o código-golfe , portanto, pode ganhar o código mais curto para cada idioma!
[0,1]
e [0,-1,2]
dariam?
[0,1]
está nos exemplos. "Se um valor positivo em uma célula aponta para si mesmo, isso é uma falsa"
[2,3,0,1]
[0]
?