Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
38
Task/Pi/Clojure/pi.clj
Normal file
38
Task/Pi/Clojure/pi.clj
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
(ns pidigits
|
||||
(:gen-class))
|
||||
|
||||
(def calc-pi
|
||||
; integer division rounding downwards to -infinity
|
||||
(let [div (fn [x y] (long (Math/floor (/ x y))))
|
||||
|
||||
; Computations performed after yield clause in Python code
|
||||
update-after-yield (fn [[q r t k n l]]
|
||||
(let [nr (* 10 (- r (* n t)))
|
||||
nn (- (div (* 10 (+ (* 3 q) r)) t) (* 10 n))
|
||||
nq (* 10 q)]
|
||||
[nq nr t k nn l]))
|
||||
|
||||
; Update of else clause in Python code: if (< (- (+ (* 4 q) r) t) (* n t))
|
||||
update-else (fn [[q r t k n l]]
|
||||
(let [nr (* (+ (* 2 q) r) l)
|
||||
nn (div (+ (* q 7 k) 2 (* r l)) (* t l))
|
||||
nq (* k q)
|
||||
nt (* l t)
|
||||
nl (+ 2 l)
|
||||
nk (+ 1 k)]
|
||||
[nq nr nt nk nn nl]))
|
||||
|
||||
; Compute the lazy sequence of pi digits translating the Python code
|
||||
pi-from (fn pi-from [[q r t k n l]]
|
||||
(if (< (- (+ (* 4 q) r) t) (* n t))
|
||||
(lazy-seq (cons n (pi-from (update-after-yield [q r t k n l]))))
|
||||
(recur (update-else [q r t k n l]))))]
|
||||
|
||||
; Use Clojure big numbers to perform the math (avoid integer overflow)
|
||||
(pi-from [1N 0N 1N 1N 3N 3N])))
|
||||
|
||||
;; Indefinitely Output digits of pi, with 40 characters per line
|
||||
(doseq [[i q] (map-indexed vector calc-pi)]
|
||||
(when (= (mod i 40) 0)
|
||||
(println))
|
||||
(print q))
|
||||
Loading…
Add table
Add a link
Reference in a new issue