## A simple Project Euler problem in Clojure

*May 6th 2010*

Let's try to solve Project Euler problem 4 in Clojure. Here is the problem statement:

A palindromic number reads the same both ways. The largest palindrome made from the product of two 2-digit numbers is 9009 = 91 × 99. Find the largest palindrome made from the product of two 3-digit numbers.

Let's first try to generate all the products of two 3 digit numbers:

(defn all-products [] (for [x (range 100 1000) y (range 100 1000)] (* x y)))

Now, we have to check whether a number is a palindrome. Here is one way to do it:

(defn reverse-1 [n] (java.math.BigInteger. (apply str (reverse (str n))))) (defn palindrome? [n] (= n (reverse-1 n)))

Just one more step - filter out all palindromes from the product list and find the maximum:

(defn all-palindromes [] (filter palindrome? (all-products))) (defn biggest-palindrome [] (apply max (all-palindromes)))

The Clojure solution is slow; much slower than a Python version which uses two for loops to compute the products. I am sure that there are better Clojure solutions out there! (there should be a better way to do the number reverse; and, the `apply max' solution for finding maximum of a sequence doesn't sound good).

[Go to Code Clojure home] [Follow me on Twitter] [Go to pramode.net home]