RosettaCodeData/Task/Happy-numbers/Frege/happy-numbers.frege
2023-07-01 13:44:08 -04:00

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