RosettaCodeData/Task/Josephus-problem/Python/josephus-problem-4.py

31 lines
638 B
Python
Raw Permalink Normal View History

2023-07-01 11:58:00 -04:00
from itertools import compress, cycle
2026-04-30 12:34:36 -04:00
def josephus(prisoner, kill, survivor):
p = list(range(prisoner))
2023-07-01 11:58:00 -04:00
k = [0] * kill
k[kill-1] = 1
s = [1] * kill
s[kill -1] = 0
queue = p
queue = compress(queue, cycle(s))
try:
while True:
2026-04-30 12:34:36 -04:00
p.append(next(queue))
2023-07-01 11:58:00 -04:00
except StopIteration:
pass
kil=[]
killed = compress(p, cycle(k))
try:
while True:
2026-04-30 12:34:36 -04:00
kil.append(next(killed))
2023-07-01 11:58:00 -04:00
except StopIteration:
pass
2026-04-30 12:34:36 -04:00
print('The survivor is: ', kil[-survivor:])
print('The kill sequence is ', kil[:prisoner-survivor])
2023-07-01 11:58:00 -04:00
2026-04-30 12:34:36 -04:00
josephus(41, 3, 2)
josephus(5, 2, 1)