Imagine que tiene una matriz de enteros, cuyos valores no negativos son punteros a otras posiciones en la misma matriz, solo que esos valores representan túneles, por lo que si el valor en la posición A es positivo y apunta a la posición B, entonces el valor en la posición B también debe ser positivo y apuntar a la posición A para representar ambos extremos del túnel. Entonces:
Desafío
- Dado un conjunto de enteros, verifique si el conjunto cumple con la restricción de ser un conjunto de túneles y devuelve dos valores distintos y coherentes para verdadero y falso.
- Los valores en la matriz estarán por debajo de cero para las posiciones que no sean de túnel, y cero o más para las posiciones de túnel. Si su matriz está indexada en 1, entonces el valor cero representa una posición no túnel. Los valores que no son de túnel no necesitan ser verificados.
- Si un valor positivo en una celda apunta a sí mismo, eso es falso. Si A apunta a B, B a C y C a A, eso es falso. Si un valor positivo apunta más allá de los límites de la matriz, eso es falso.
Ejemplos
Los siguientes ejemplos están indexados 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)
Este es el código de golf , ¡así que puede ganar el código más corto para cada idioma!
[0,1]y [0,-1,2]darían?
[0,1]está en los ejemplos. "Si un valor positivo en una celda apunta a sí mismo, eso es un error"
[2,3,0,1]
[0]?