20 lines
423 B
Clojure
20 lines
423 B
Clojure
(defn s-of-n-fn-creator [n]
|
|
(fn [[sample iprev] item]
|
|
(let [i (inc iprev)]
|
|
(if (<= i n)
|
|
[(conj sample item) i]
|
|
(let [r (rand-int i)]
|
|
(if (< r n)
|
|
[(assoc sample r item) i]
|
|
[sample i]))))))
|
|
|
|
(def s-of-3-fn (s-of-n-fn-creator 3))
|
|
|
|
(->> #(reduce s-of-3-fn [[] 0] (range 10))
|
|
(repeatedly 100000)
|
|
(map first)
|
|
flatten
|
|
frequencies
|
|
sort
|
|
println)
|