josephus_problem.sf 424 B

12345678910111213141516171819202122
  1. #!/usr/bin/ruby
  2. func josephus(n, k) {
  3. var prisoners = @^n
  4. while (prisoners.len > 1) {
  5. prisoners.rotate!(k - 1).shift
  6. }
  7. return prisoners[0]
  8. }
  9. func josephus_rec(n, k) {
  10. n == 1 ? 0 : ((__FUNC__(n-1, k) + k) % n)
  11. }
  12. var survivor1 = josephus(41, 3);
  13. say "Prisoner #{survivor1} survived.";
  14. var survivor2 = josephus_rec(41, 3);
  15. say "Prisoner #{survivor2} survived.";
  16. assert_eq(survivor1, survivor2)