thoga31

Sums of Digit Factorials (Euler, 254)

Aug 27th, 2013
441
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -- ### Project Euler, problem 254 ### --
  2. import Data.List (find)
  3. import Data.Maybe (fromJust)
  4.  
  5. fact :: Integer -> Integer
  6. fact n | n > 1            = n * fact (n-1)
  7.        | n == 0 || n == 1 = 1
  8.        | otherwise        = 0
  9.  
  10. intToLStr :: Integer -> [String]
  11. intToLStr = map (\x -> [x]) . show
  12.  
  13. digsSum :: Integer -> Integer
  14. digsSum = sum . map read . intToLStr
  15.  
  16. f :: Integer -> Integer
  17. f = sum . map (fact . read) . intToLStr
  18.  
  19. sf :: Integer -> Integer
  20. sf = digsSum . f
  21.  
  22. g :: Integer -> Integer
  23. g i = fromJust $ find ((== i) . sf) [1..]
  24.  
  25. sg :: Integer -> Integer
  26. sg = digsSum . g
  27.  
  28. solveit :: Integer -> Integer
  29. solveit n = sum $ map sg [1..n]
  30.  
  31. main = do
  32.   putStrLn . show $ solveit 20   -- control-case
  33.   putStrLn . show $ solveit 150  -- problem
Advertisement
Add Comment
Please, Sign In to add comment