diff options
| author | Charles <sircharlesaze@gmail.com> | 2019-09-04 21:05:44 +0200 |
|---|---|---|
| committer | Charles <sircharlesaze@gmail.com> | 2019-09-04 21:05:44 +0200 |
| commit | e552bfe30c1640ed106a8dd95c3b0cbfbd3d5060 (patch) | |
| tree | 80d59a5d9cf8a16d1bfd89741324ec47fe5042d2 /haskell | |
| parent | 69d729849ec734b3798eaab941c29febf37c9a68 (diff) | |
| download | project_euler-e552bfe30c1640ed106a8dd95c3b0cbfbd3d5060.tar.gz project_euler-e552bfe30c1640ed106a8dd95c3b0cbfbd3d5060.tar.bz2 project_euler-e552bfe30c1640ed106a8dd95c3b0cbfbd3d5060.zip | |
problem 32 haskell
Diffstat (limited to 'haskell')
| -rw-r--r-- | haskell/032-pandigital_products.hs | 26 |
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) |
