DZone Snippets is a public source code repository. Easily build up your personal collection of code snippets, categorize them with tags / keywords, and share them with the world

Roger has posted 34 posts at DZone. View Full User Profile

Euler Problem 4 In Haskell

11.16.2010
| 1625 views |
  • submit to reddit
        // 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.
//
// There are shorter ways to do this, and I cheat a bit by counting down to 900 rather than 100, but this one short-circuits when it finds the answer,
// and so is very efficient.


isPalindrome :: String -> Bool
isPalindrome [] = True
isPalindrome str = let str2 = reverse str
                       in (str2 == str)

factors :: [(Int, Int)]
factors = [(x,y) | x <- reverse [900..999], y <- reverse [900..999]]
                         
findPal :: [(Int, Int)] -> Int
findPal []         = 0
findPal ((x,y):xs) = let pal = isPalindrome $ show mult 
                         mult = x * y
                     in case pal of
                        True -> mult
                        False -> findPal xs

main = do
    return (findPal factors)