22問目
http://projecteuler.net/index.php?section=problems&id=22
名前のリストに対して、それぞれの名前に対応する得点を計算してそれを足し合わせる。
42問目に合わせて修正しました。
import Data.Char import Data.List main = do names <- readFile "names.txt" print $ sum $ euler022 $ read $ "[" ++ names ++ "]" -- print $ sum $ euler022 $ words $ map replace names -- replace :: Char -> Char -- replace '\"' = ' ' -- replace ',' = ' ' -- replace c = c euler022 :: [String] -> [Int] euler022 names = zipWith (*) (map score $ sort names) [1..] score :: String -> Int score name = sum $ map (\ c -> ord c - ord 'A' + 1) name