Bayangkan Anda memiliki array bilangan bulat, yang nilai non-negatifnya adalah pointer ke posisi lain dalam array yang sama, hanya saja nilai-nilai itu mewakili terowongan, jadi jika nilai di posisi A positif dan menunjuk ke posisi B, maka nilai di posisi B harus juga positif dan arahkan ke posisi A untuk mewakili kedua ujung terowongan. Begitu:
Tantangan
- Diberikan array bilangan bulat, periksa apakah array sesuai dengan batasan menjadi array tunneling dan mengembalikan dua nilai koheren yang berbeda untuk truthy dan falsey.
- Nilai dalam array akan berada di bawah nol untuk posisi non-terowongan, dan nol atau di atas untuk posisi terowongan. Jika larik Anda diindeks 1, maka nilai nol mewakili posisi non-terowongan. Nilai-nilai non-terowongan tidak perlu diperiksa.
- Jika nilai positif dalam sel menunjuk ke dirinya sendiri, itu adalah kesalahan. Jika A menunjuk ke B, B ke C dan C ke A, itu kesalahan. Jika nilai positif menunjuk di luar batas array, itu kesalahan.
Contohnya
Contoh-contoh berikut diindeks 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)
Ini adalah kode-golf , jadi semoga kode terpendek untuk setiap bahasa menang!
[0,1]
dan [0,-1,2]
kasing?
[0,1]
ada dalam contoh. "Jika nilai positif dalam sel menunjuk ke dirinya sendiri, itu kesalahan"
[2,3,0,1]
[0]
?