23 lines
833 B
Clojure
23 lines
833 B
Clojure
(defn xpat2-with-seed
|
|
"produces an xpat2 function initialized from seed"
|
|
[seed]
|
|
(let [e9 1000000000
|
|
fs (fn [[i j]] [j (mod (- i j) e9)])
|
|
s (->> [seed 1] (iterate fs) (map first) (take 55) vec)
|
|
rinit (map #(-> % inc (* 34) (mod 55) s) (range 55))
|
|
r-atom (atom [54 (int-array rinit)])
|
|
update (fn [[nprev r]]
|
|
(let [n (-> nprev inc (mod 55))
|
|
rx #(get r (-> n (- %) (mod 55)))
|
|
rn (-> (rx 55) (- (rx 24)) (mod e9))
|
|
_ (aset-int r n rn)]
|
|
[n r]))
|
|
xpat2 #(let [[n r] (swap! r-atom update)]
|
|
(get r n))
|
|
_ (dotimes [_ 165] (xpat2))]
|
|
xpat2))
|
|
|
|
(def xpat2 (xpat2-with-seed 292929))
|
|
|
|
(println (xpat2) (xpat2) (xpat2)) ; prints: 467478574 512932792 539453717
|