14 lines
526 B
Clojure
14 lines
526 B
Clojure
(defn rotate [n s] (lazy-cat (drop n s) (take n s)))
|
|
|
|
(defn josephus [n k]
|
|
(letfn [(survivor [[ h & r :as l] k]
|
|
(cond (empty? r) h
|
|
:else (survivor (rest (rotate (dec k) l)) k)))]
|
|
(survivor (range n) k)))
|
|
|
|
(let [n 41 k 3]
|
|
(println (str "Given " n " prisoners in a circle numbered 1.." n
|
|
", an executioner moving around the"))
|
|
(println (str "circle " k " at a time will leave prisoner number "
|
|
(inc (josephus n k)) " as the last survivor.")))
|