-- A Pythagorean triplet is a set of three natural numbers, a < b < c, for which, -- -- a2 + b2 = c2 -- -- For example, 32 + 42 = 9 + 16 = 25 = 52. -- -- There exists exactly one Pythagorean triplet for which a + b + c = 1000. -- -- Find the product abc. module P009 (p009) where import Data.List (uncons) import Data.Maybe (fromJust) pythagoreanTriplet :: Int -> (Int, Int, Int) pythagoreanTriplet n = fst . fromJust $ uncons [(x, y, z) | x <- [1 .. n], y <- [x .. n], z <- [y .. n], x + y + z == n, x ^ (2 :: Int) + y ^ (2 :: Int) == z ^ (2 :: Int)] prodTriplet :: (Int, Int, Int) -> Int prodTriplet (x, y, z) = x * y * z p009 :: IO () p009 = do let result = prodTriplet $ pythagoreanTriplet 1000 putStrLn $ "Project Euler, Problem 9\n" ++ "Answer: " ++ show result