(use '[clojure.string :only (split triml)]) (def certainty 5) (defn prime? [n] (.isProbablePrime (BigInteger/valueOf n) certainty)) #_(def input ["3" "1" "2" "5"]) (defn lowest-prime [ns] (first (filter prime? ns))) (defn game-turn [nums] (let [lowest (lowest-prime nums)] (when lowest (let [multiples (into #{} (filter (fn [num] (zero? (rem num lowest))) nums)) new-set (remove multiples nums)] new-set)))) (defn other-player [in] (if (= in "Bob") "Alice" "Bob")) ;; Gives winner (defn game [n] (let [nums (range 1 (inc n))] (loop [nums nums player "Alice"] (let [res (game-turn nums)] (if res (recur res (other-player player)) (other-player player)))))) (let [ input (line-seq (java.io.BufferedReader. *in*)) numbers (map #(Integer/parseInt %) (next input)) winners (map game numbers)] (doseq [winner winners] (println winner)))