Skip to content

Instantly share code, notes, and snippets.

@kopos
Created September 8, 2019 03:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kopos/7898d35efb1565473d43a5a1d5243ba3 to your computer and use it in GitHub Desktop.
Save kopos/7898d35efb1565473d43a5a1d5243ba3 to your computer and use it in GitHub Desktop.
(def ^:const KARPEKAR 6174)
(defn ->number [ds]
(reduce (fn [n d] (+ d (* n 10))) ds))
(defn ->digits [n]
(loop [N n
ds []]
(if (= (count ds) 4)
ds
(recur (quot N 10) (cons (rem N 10) ds)))))
(defn abs [n] (if (< n 0) (- n) n))
(defn kdiff [n]
(let [ds (->digits n)
a (->number (sort ds))
b (->number (reverse (sort ds)))]
(abs (- a b))))
(def nums (for [a (range 10), b (range 10), c (range 10) d (range 10)]
[a b c d]))
(defn karpekar-seq [n]
(loop [n n
nums []]
(if (or (= n 0) (= n KARPEKAR))
(conj nums n)
(recur (kdiff n) (conj nums n)))))
(doseq [n nums]
(println (-> n ->number karpekar-seq)))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment