Introdução
Neste desafio, sua tarefa é simular um certo tipo de jogo de eliminação. No jogo, os participantes ficam em círculo e todos estão segurando um número inteiro. Em cada rodada do jogo, cada participante aponta para a pessoa n
que se afasta, se n
é o número que está segurando. Se n
é positivo, conta à direita, se n
é negativo, conta à esquerda e, se n
for zero, aponta para si. Todo participante que tem alguém apontando para eles é eliminado e sai do círculo; isso termina a rodada. As rodadas continuam até que não haja mais participantes.
Entrada
Sua entrada é uma lista não vazia de números inteiros, em qualquer formato razoável. Representa os números que os participantes do jogo estão segurando.
Resultado
Sua saída é o número de rodadas necessárias até o final do jogo.
Exemplo
Considere a lista de entrada [3,1,-2,0,8]
. Na primeira rodada, acontece o seguinte:
- A pessoa que está segurando
3
aponta diretamente para a pessoa que está segurando0
. - A pessoa que está segurando
1
aponta diretamente para a pessoa que está segurando-2
. - A pessoa que mantém
-2
pontos deixados na pessoa que está segurando3
. - A pessoa que
0
aponta para si mesma. - A pessoa que está segurando
8
aponta diretamente para a pessoa que está segurando-2
(a lista representa um círculo, de modo que envolve as extremidades).
Isso significa que 0
, -2
e 3
são eliminados, a segunda rodada é feita com a lista [1,8]
. Aqui, 1
aponta para 8
, e 8
aponta para si mesmo, então 8
é eliminado. A terceira rodada é feita com a lista [1]
, onde 1
simplesmente aponta para si mesma e é eliminada. Foram necessárias três rodadas para eliminar todos os participantes, portanto a saída correta é 3
.
Regras e pontuação
Você pode escrever um programa completo ou uma função. A contagem de bytes mais baixa vence e as brechas padrão não são permitidas.
Casos de teste
[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
é o número que a pessoa está segurando?