介绍
在这个挑战中,您的任务是模拟某种消除游戏。在游戏中,参与者围成一个圆圈,每个人都拿着一个整数。在游戏的每一轮中,每个参与者都指向该人n
走开(如果n
他们持有的人数)。如果n
为正,则在其右边进行计数;如果n
为负,则在其左侧进行计数;如果n
为零,则它们指向自己。每个有人指着他们的参与者都将被淘汰,并离开圈子。这结束了回合。巡回赛一直持续到没有参与者离开为止。
输入值
您的输入是非空整数列表,采用任何合理格式。它代表游戏参与者持有的数字。
输出量
您的输出是直到游戏结束为止的回合数。
例
考虑输入列表[3,1,-2,0,8]
。在第一轮中,发生以下情况:
- 持有人
3
指向持有人0
。 - 持有人
1
指向持有人-2
。 - 持有人
-2
指向持有人3
。 - 持有人
0
指着自己。 - 持有人
8
指向持有人的权利-2
(列表代表一个圆圈,因此在末尾环绕)。
,这意味着0
,-2
和3
被淘汰,所以第二轮与清单进行[1,8]
。在这里,1
指向8
,然后8
指向自己,因此8
被消除。第三轮与清单进行[1]
,在那里1
只需要点在自理和消除。经过三轮淘汰所有参与者,所以正确的输出是3
。
规则和计分
您可以编写完整的程序或函数。最低字节数获胜,并且不允许出现标准漏洞。
测试用例
[3] -> 1
[0,0,0] -> 1
[-2,-1,0,1,2,3,4,5,6,7] -> 2
[5,5,5,6,6,6] -> 2
[3,-7,-13,18,-10,8] -> 2
[-7,5,1,-5,-13,-10,9] -> 2
[4,20,19,16,8,-9,-14,-2,17,7,2,-2,10,0,18,-5,-5,20] -> 3
[11,2,7,-6,-15,-8,15,-12,-2,-8,-17,6,-6,-5,0,-20,-2,11,1] -> 4
[2,-12,-11,7,-16,9,15,-10,7,3,-17,18,6,6,13,0,18,10,-7,-1] -> 3
[18,-18,-16,-2,-19,1,-9,-18,2,1,6,-15,12,3,-10,8,-3,7,-4,-11,5,-15,17,17,-20,11,-13,9,15] -> 6
n
此人持有的号码是多少?