Munchausen numbers: Difference between revisions

Content added Content deleted
Line 1,050: Line 1,050:
main = print $ filter isMunchausen [1 .. 5000]</lang>
main = print $ filter isMunchausen [1 .. 5000]</lang>


Or, without digitToInt, but importing join and swap.
Or, without digitToInt, but importing join, swap and bool.
<lang haskell>import Control.Monad (join)
<lang haskell>import Control.Monad (join)
import Data.List (unfoldr)
import Data.List (unfoldr)
import Data.Bool (bool)
import Data.Tuple (swap)
import Data.Tuple (swap)


isMunchausen :: Integer -> Bool
isMunchausen :: Integer -> Bool
isMunchausen = (==) <*> (foldr ((+) . join (^)) 0 . unfoldr digit)
isMunchausen =
(==) <*>

(foldr ((+) . join (^)) 0 .
digit 0 = Nothing
digit n = Just $ swap (quotRem n 10)
unfoldr ((flip bool Nothing . Just . swap . flip quotRem 10) <*> (0 ==)))


main :: IO ()
main :: IO ()