Advertisement
Guest User

Foop

a guest
Jan 2nd, 2017
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. (ns spiral.core
  2.     (:require [cljs.nodejs :as nodejs]))
  3.  
  4. (enable-console-print!)
  5. (nodejs/enable-util-print!)
  6.  
  7. (defn is_prime? [nval]
  8.     (if (< nval 2)
  9.         false
  10.         (if (or (= nval 2) (= nval 3))
  11.             true
  12.             (if (or (= (mod nval 2) 0) (not (or (= (mod nval 6) 1) (= (mod nval 6) 5))))
  13.                 false
  14.                 (loop [n 5]
  15.                     (if (> n (Math/sqrt nval))
  16.                         true
  17.                         (if (= (mod nval n) 0)
  18.                             false
  19.                             (recur (+ n 2)))))))))
  20.                
  21. (defn nth_diags [n]
  22.  (let [interval (* 2 (Math/ceil (/ n 4))) side (inc interval)]
  23.     (- (* side side) (* (- 3 (mod (+ n 3) 4)) interval))))
  24.  
  25. (defn gen_diags
  26.     ([] (gen_diags 0))
  27.     ([n] (lazy-seq (cons (nth_diags n) (gen_diags (inc n))))))
  28.  
  29. (defn ratio [n]
  30.     (let [llist (take n (gen_diags))]
  31.         (/ (apply + (for [p llist :when (is_prime? p)] 1)) (count llist))))
  32.    
  33. (defn square_list [n]
  34.         (take (inc (* 4 (dec n))) (gen_diags)))
  35.    
  36. (defn square_ratio [n]
  37.     (ratio (inc (* 4 (dec n)))))
  38.  
  39. (defn -main [& args]
  40.     (loop [n 2]
  41.         (if (>= (square_ratio n) 0.1)
  42.             (do
  43.                 (println n "square:" (dec (* 2 n)) "square ratio:" (square_ratio n))
  44.                 (recur (inc n)))
  45.             (println n "answer:" (dec (* 2 n)) "square ratio:" (square_ratio n))
  46.         )))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement