Imaginez que vous ayez un tableau d'entiers, dont les valeurs non négatives sont des pointeurs vers d'autres positions dans le même tableau, seulement que ces valeurs représentent des tunnels, donc si la valeur en position A est positive et pointe vers la position B, alors la valeur en position B doit également être positif et pointer vers la position A pour représenter les deux extrémités du tunnel. Donc:
Défi
- Étant donné un tableau d'entiers, vérifiez si le tableau est conforme à la restriction d'être un tableau de tunnellisation et renvoyez deux valeurs distinctes et cohérentes pour truey et falsey.
- Les valeurs dans le tableau seront inférieures à zéro pour les positions non tunnel et à zéro ou supérieures pour les positions tunnel. Si votre tableau est indexé sur 1, la valeur zéro représente une position non tunnel. Les valeurs non tunnel n'ont pas besoin d'être vérifiées.
- Si une valeur positive dans une cellule pointe vers elle-même, c'est une falsey. Si A pointe vers B, B vers C et C vers A, c'est une falsey. Si une valeur positive pointe au-delà des limites du tableau, c'est une falsey.
Exemples
Les exemples suivants sont indexés 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)
C'est du code-golf , alors le code le plus court pour chaque langue peut gagner!
[0,1]
et [0,-1,2]
donner?
[0,1]
est dans les exemples. "Si une valeur positive dans une cellule pointe vers elle-même, c'est une falsey"
[2,3,0,1]
[0]
?