#!/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)