17 lines
543 B
Text
17 lines
543 B
Text
module Happy where
|
|
|
|
import Prelude.Math
|
|
-- ugh, since Frege doesn't have Set, use Map instead
|
|
import Data.Map (member, insertMin, empty emptyMap)
|
|
|
|
digitToInteger :: Char -> Integer
|
|
digitToInteger c = fromInt $ (ord c) - (ord '0')
|
|
|
|
isHappy :: Integer -> Bool
|
|
isHappy = p emptyMap
|
|
where p _ 1n = true
|
|
p s n | n `member` s = false
|
|
| otherwise = p (insertMin n () s) (f n)
|
|
f = sum . map (sqr . digitToInteger) . unpacked . show
|
|
|
|
main _ = putStrLn $ unwords $ map show $ take 8 $ filter isHappy $ iterate (+ 1n) 1n
|