thoga31

Reversible numbers (Euler, 145)

Sep 9th, 2013
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -- ### Project Euler, problem 145 ### --
  2.  
  3. euler145 :: Int -> Int
  4. euler145 = length . filter (and . map odd . digits . f) . filter (not . leading0) . list 1
  5.   where
  6.     rev :: Int -> Int
  7.     rev = read . reverse . show
  8.  
  9.     digits :: Int -> [Int]
  10.     digits = map (read . return) . show  -- in this case, return v = [v] because the Monad is actually a List
  11.                                          -- "return" = "(:[])"
  12.  
  13.     list a b = [a..b]
  14.     f x = x + rev x
  15.     leading0 = (== 0) . (`mod` 10)
  16.     str ch = [ch]
  17.  
  18. main :: IO()
  19. main = do
  20.   solveit 1000    -- control
  21.   solveit (10^9)  -- problem
  22.   where
  23.     solveit = putStrLn . show . euler145
Advertisement
Add Comment
Please, Sign In to add comment