Data commit

This commit is contained in:
Ingy döt Net 2023-07-01 11:58:00 -04:00
parent 7387c8f97b
commit cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions

View 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))

View 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))