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