(ns monty-hall-problem (:use [clojure.contrib.seq :only (shuffle)])) (defn play-game [staying] (let [doors (shuffle [:goat :goat :car]) choice (rand-int 3) [a b] (filter #(not= choice %) (range 3)) alternative (if (= :goat (nth doors a)) b a)] (= :car (nth doors (if staying choice alternative))))) (defn simulate [staying times] (let [wins (reduce (fn [counter _] (if (play-game staying) (inc counter) counter)) 0 (range times))] (str "wins " wins " times out of " times)))