(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.")))