Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (ns spiral.core
- (:require [cljs.nodejs :as nodejs]))
- (enable-console-print!)
- (nodejs/enable-util-print!)
- (defn is_prime? [nval]
- (if (< nval 2)
- false
- (if (or (= nval 2) (= nval 3))
- true
- (if (or (= (mod nval 2) 0) (not (or (= (mod nval 6) 1) (= (mod nval 6) 5))))
- false
- (loop [n 5]
- (if (> n (Math/sqrt nval))
- true
- (if (= (mod nval n) 0)
- false
- (recur (+ n 2)))))))))
- (defn nth_diags [n]
- (let [interval (* 2 (Math/ceil (/ n 4))) side (inc interval)]
- (- (* side side) (* (- 3 (mod (+ n 3) 4)) interval))))
- (defn gen_diags
- ([] (gen_diags 0))
- ([n] (lazy-seq (cons (nth_diags n) (gen_diags (inc n))))))
- (defn ratio [n]
- (let [llist (take n (gen_diags))]
- (/ (apply + (for [p llist :when (is_prime? p)] 1)) (count llist))))
- (defn square_list [n]
- (take (inc (* 4 (dec n))) (gen_diags)))
- (defn square_ratio [n]
- (ratio (inc (* 4 (dec n)))))
- (defn -main [& args]
- (loop [n 2]
- (if (>= (square_ratio n) 0.1)
- (do
- (println n "square:" (dec (* 2 n)) "square ratio:" (square_ratio n))
- (recur (inc n)))
- (println n "answer:" (dec (* 2 n)) "square ratio:" (square_ratio n))
- )))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement