RosettaCodeData/Task/Josephus-problem/XPL0/josephus-problem.xpl0

22 lines
694 B
Plaintext

include c:\cxpl\codes;
func Prisoner(N, K); \Return final surviving prisoner
int N, K; \number of prisoners, number to skip
int I, J;
char A;
[A:= Reserve(N);
for I:= 0 to N-1 do A(I):= I;
I:= 0;
repeat I:= I+K-1; \skip to next prisoner
I:= rem(I/N); \wrap to start if necessary
IntOut(0, A(I)); ChOut(0, ^ ); \show killed prisoner
for J:= I to N-2 do A(J):= A(J+1); \shift survivors down
N:= N-1; \one less prisoner
until N=1;
return A(0);
];
[IntOut(0, Prisoner(5, 2)); CrLf(0);
IntOut(0, Prisoner(41, 3)); CrLf(0);
]