Life Goes On

まあまあだけど楽しんでる方です

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