Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
15
Task/Happy-numbers/Clojure/happy-numbers-1.clj
Normal file
15
Task/Happy-numbers/Clojure/happy-numbers-1.clj
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
(defn happy? [n]
|
||||
(loop [n n, seen #{}]
|
||||
(cond
|
||||
(= n 1) true
|
||||
(seen n) false
|
||||
:else
|
||||
(recur (->> (str n)
|
||||
(map #(Character/digit % 10))
|
||||
(map #(* % %))
|
||||
(reduce +))
|
||||
(conj seen n)))))
|
||||
|
||||
(def happy-numbers (filter happy? (iterate inc 1)))
|
||||
|
||||
(println (take 8 happy-numbers))
|
||||
35
Task/Happy-numbers/Clojure/happy-numbers-2.clj
Normal file
35
Task/Happy-numbers/Clojure/happy-numbers-2.clj
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
(require '[clojure.set :refer [union]])
|
||||
|
||||
(def ^{:private true} cache {:happy (atom #{}) :sad (atom #{})})
|
||||
|
||||
(defn break-apart [n]
|
||||
(->> (str n)
|
||||
(map str)
|
||||
(map #(Long/parseLong %))))
|
||||
|
||||
(defn next-number [n]
|
||||
(->> (break-apart n)
|
||||
(map #(* % %))
|
||||
(apply +)))
|
||||
|
||||
(defn happy-or-sad? [prev n]
|
||||
(cond (or (= n 1) ((deref (:happy cache)) n)) :happy
|
||||
(or ((deref (:sad cache)) n) (some #(= % n) prev)) :sad
|
||||
:else :unknown))
|
||||
|
||||
(defn happy-algo [n]
|
||||
(let [get-next (fn [[prev n]] [(conj prev n) (next-number n)])
|
||||
my-happy-or-sad? (fn [[prev n]] [(happy-or-sad? prev n) (conj prev n)])
|
||||
unknown? (fn [[res nums]] (= res :unknown))
|
||||
[res nums] (->> [#{} n]
|
||||
(iterate get-next)
|
||||
(map my-happy-or-sad?)
|
||||
(drop-while unknown?)
|
||||
first)
|
||||
_ (swap! (res cache) union nums)]
|
||||
res))
|
||||
|
||||
(def happy-numbers (->> (iterate inc 1)
|
||||
(filter #(= :happy (happy-algo %)))))
|
||||
|
||||
(println (take 8 happy-numbers))
|
||||
Loading…
Add table
Add a link
Reference in a new issue