55問目
http://projecteuler.net/index.php?section=problems&id=55
47は逆順にして足すと 47 + 74 = 121 で回文となる。349は 349 + 943 = 1292,
1292 + 2921 = 4213, 4213 + 3124 = 7337 と3回の操作で回文となる。196のように何度操作しても回文にならない数(Lychrel数と呼ぶ)もあると想定されている。
50回操作しても回文にならない数はLychrel数だと仮定したとき、一万未満の数にLychrel数がいくつあるか求める。
この問題も特に工夫は要りません。
main = print $ euler055 50 10000 euler055 :: Integer -> Integer -> Int euler055 i m = length $ filter (lychrel i) [1..m] lychrel :: Integer -> Integer -> Bool lychrel i n | (i == 0) = True | (n' == rev n') = False | otherwise = lychrel (i - 1) n' where n' = n + (rev n) rev = read . reverse . show