#!/usr/bin/ruby

func josephus(n, k) {
    var prisoners = @^n
    while (prisoners.len > 1) {
        prisoners.rotate!(k - 1).shift
    }
    return prisoners[0]
}

func josephus_rec(n, k) {
    n == 1 ? 0 : ((__FUNC__(n-1, k) + k) % n)
}

var survivor1 = josephus(41, 3);
say "Prisoner #{survivor1} survived.";

var survivor2 = josephus_rec(41, 3);
say "Prisoner #{survivor2} survived.";

assert_eq(survivor1, survivor2)