假设您有一个整数数组,其非负值是指向同一数组中其他位置的指针,只是这些值表示隧道,因此如果位置A中的值为正并指向位置B,则位置中的值B也必须为正,并指向位置A以代表隧道的两端。所以:
挑战
- 给定一个整数数组,请检查该数组是否符合作为隧道数组的限制,并为true和false返回两个不同的连贯值。
- 对于非隧道位置,数组中的值将小于零;对于隧道位置,数组中的值将小于零或大于零。如果您的数组是1索引的,则零值表示非隧道位置。不需要检查非隧道值。
- 如果单元格中的正值指向自身,那是错误的。如果A指向B,B指向C,C指向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)
这是代码高尔夫球,因此每种语言的最短代码可能会胜出!
[0,1]
,并[0,-1,2]
给?
[0,1]
在示例中。“如果一个积极的细胞分本身的价值,这是一个falsey”
[2,3,0,1]
[0]
什么?