Permutação de Josephus
Um grupo de n prisioneiros fica em um círculo aguardando a execução. Começando de uma posição arbitrária(0), o carrasco mata cada k-ésima pessoa até restar uma pessoa de pé, que então recebe a liberdade (veja os exemplos).
Crie uma função que receba 2 argumentos — o número de pessoas a serem executadas n e o tamanho do passo k — e retorne a posição original (índice) da pessoa que sobrevive.
Exemplos
who_goes_free(9, 2) ➞ 2
# Prisoners = [0, 1, 2, 3, 4, 5, 6, 7, 8]
# Executed people replaced by - (a dash) for illustration purposes.
# 1st round of execution = [0, -, 2, -, 4, -, 6, -, 8] -> [0, 2, 4, 6, 8]
# 2nd round = [-, 2, -, 6, -] -> [2, 6] # 0 is killed in this round because it's beside 8 who was skipped over.
# 3rd round = [2, -]
who_goes_free(9, 3) ➞ 0
# [0, 1, 2, 3, 4, 5, 6, 7, 8]
# [0, 1, -, 3, 4, -, 6, 7, -] -> [0, 1, 3, 4, 6, 7]
# [0, 1, -, 4, 6, -] -> [0, 1, 4, 6]
# [0, 1, -, 6] -> [0, 1, 6]
# [0, -, 6] -> [0, 6]
# [0, -] -> [0]Observações
Consulte a aba Resources para obter mais informações.