-- We shall say that an n-digit number is pandigital if it makes use of all the -- digits 1 to n exactly once; for example, the 5-digit number, 15234, is 1 -- through 5 pandigital. -- -- The product 7254 is unusual, as the identity, 39 × 186 = 7254, containing -- multiplicand, multiplier, and product is 1 through 9 pandigital. -- -- Find the sum of all products whose multiplicand/multiplier/product identity -- can be written as a 1 through 9 pandigital. -- -- HINT: Some products can be obtained in more than one way so be sure to only -- include it once in your sum. import Euler partitions [] = [([],[])] partitions (x:xs) = map (first (x:)) ps ++ map (second (x:)) ps where ps = partitions xs main = print $ sum $ nub $ do (as, as') <- partitions [1..9] guard $ not $ null as (bs, cs) <- partitions as' guard $ not $ null bs guard $ not $ null cs guard $ length as <= length bs guard $ length as <= length cs guard $ length bs <= length cs guard $ length as + length bs >= length cs x <- fromDigits <$> permutations as y <- fromDigits <$> permutations bs guard $ x < y let p = x * y guard $ sort (toDigits p) == cs return p