aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCharles <sircharlesaze@gmail.com>2019-09-04 21:05:44 +0200
committerCharles <sircharlesaze@gmail.com>2019-09-04 21:05:44 +0200
commite552bfe30c1640ed106a8dd95c3b0cbfbd3d5060 (patch)
tree80d59a5d9cf8a16d1bfd89741324ec47fe5042d2
parent69d729849ec734b3798eaab941c29febf37c9a68 (diff)
downloadproject_euler-e552bfe30c1640ed106a8dd95c3b0cbfbd3d5060.tar.gz
project_euler-e552bfe30c1640ed106a8dd95c3b0cbfbd3d5060.tar.bz2
project_euler-e552bfe30c1640ed106a8dd95c3b0cbfbd3d5060.zip
problem 32 haskell
-rw-r--r--haskell/032-pandigital_products.hs26
1 files changed, 26 insertions, 0 deletions
diff --git a/haskell/032-pandigital_products.hs b/haskell/032-pandigital_products.hs
new file mode 100644
index 0000000..5c5f23e
--- /dev/null
+++ b/haskell/032-pandigital_products.hs
@@ -0,0 +1,26 @@
+------
+-- Pandigital products
+-- Problem 32
+--
+-- 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 Data.List(sort, nubBy, nub)
+
+main = do
+ print (sum $ nub [a * b | a <- [1..2000], b <- [1..2000], isPandigitalProd a b])
+
+isPandigitalProd :: Int -> Int -> Bool
+isPandigitalProd a b = sort (revDigits a ++ revDigits b ++ revDigits (a * b)) == [1..9]
+
+revDigits :: Int -> [Int]
+revDigits 0 = []
+revDigits x = x `mod` 10 : revDigits (x `div` 10)