Problem Description, from Project Euler
Find the largest palindrome made from the product of two 3-digit numbers
Solution
I couldn’t think of many optimizations for this problem, other than avoiding duplicates when calculating the products of numbers. That’s why I just brute-forced it. The only (barely) interesting thing I did here was to write a function which recognized palindromes. Thinking about the problem now, I suppose we can predict whether the first and last digits of a product will be the same by looking at the hundreds and tens digits of the factors.
; flattens a nested list
(defn flatten [x] (let [s? #(instance? clojure.lang.Sequential %)] (filter (complement s?) (tree-seq s? seq x))))
(defn palindrome? [s]
(if (or
; all 1 letter strings or
; nils are palindromes
(<= (count s) 1)
(nil? s)
)
true
(and
(= (first s) (last s))
(palindrome? (take (- (count s) 2) (rest s)))
)
)
)
(defn problem04 []
(def x (range 100 1000))
; sort, then take the last
(last (sort
; filter to only palindromes
(filter
#(palindrome? (str %))
; distinct products of all 3-digit numbers
(distinct (flatten
(map
(fn [n]
(map (fn [a] (* a n)) x))
x
)
))
)
))
)
Blog: Project Euler Problem 4 Solution: Clojure /programming/project-euler-problem-4-solution-clojure/
This comment was originally posted on Twitter
RT @jamiealy: Blog: Project Euler Problem 4 Solution: Clojure //is.gd/bDwpI
This comment was originally posted on Twitter