http://projecteuler.net/index.php?section=problems&id=62
Haskellで辞書は次のように使う。
import qualified Data.Map as M m = M.insert 1 2 M.empty n = m M.! 1 -- 2 b = M.member 1 m -- True
3乗して各桁の数字を降順に並べて数にする。同じ数になるものをカウントする。
import Data.List import qualified Data.Map as M digits 0 = [] digits n = (digits (div n 10)) ++ [ mod n 10 ] numerize a = foldl (\x y -> x * 10 + y) 0 a normalize = numerize . reverse . sort . digits next m n = if M.member cube m then if length (m M.! cube) == size - 1 then head (m M.! cube) else next (M.insert cube ((m M.! cube) ++ [n]) m) (n + 1) else next (M.insert cube [n] m) (n + 1) where cube = normalize (n^3) size = 5 n = next M.empty 1 main = print (n^3)