Immagina di avere un array di numeri interi, i cui valori non negativi sono puntatori ad altre posizioni nello stesso array, solo che quei valori rappresentano tunnel, quindi se il valore in posizione A è positivo e punta in posizione B, quindi il valore in posizione B deve anche essere positivo e puntare alla posizione A per rappresentare entrambe le estremità del tunnel. Così:
Sfida
- Dato un array di numeri interi, controlla se l'array è conforme alla restrizione per essere un array tunneling e restituisce due valori distinti e coerenti per verità e falsità.
- I valori nella matrice saranno inferiori a zero per le posizioni non tunnel e zero o superiore per le posizioni tunnel. Se l'array è 1 indicizzato, il valore zero rappresenta una posizione non tunnel. Non è necessario verificare i valori non tunnel.
- Se un valore positivo in una cella punta a se stesso, questa è una falsità. Se A indica B, da B a C e da C a A, è un falso. Se un valore positivo punta oltre i limiti dell'array, si tratta di un falso.
Esempi
I seguenti esempi sono indicizzati 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)
Questo è code-golf , quindi può vincere il codice più breve per ogni lingua!
[0,1]
e [0,-1,2]
dare?
[0,1]
è negli esempi. "Se un valore positivo in una cella indica se stesso, è un falso"
[2,3,0,1]
[0]
?