-- Using p022_names.txt, a 46K text file containing over five-thousand first names, begin by sorting it into alphabetical order. -- Then working out the alphabetical value for each name, multiply this value by its alphabetical position in the list to obtain a name score. -- -- For example, when the list is sorted into alphabetical order, COLIN, which is worth 3 + 15 + 12 + 9 + 14 = 53, is the 938th name in the list. -- So, COLIN would obtain a score of 938 × 53 = 49714. -- -- What is the total of all the name scores in the file? import Data.Char (ord) import Data.List (sort) import Data.List.Split (splitOn) nameScore :: String -> Int nameScore s = let a = ord 'A' - 1 in sum $ map ((\x -> x - a) . ord) s main = do contents <- readFile "p022_names.txt" let name_scores = map nameScore . sort . splitOn "," $ filter (/= '"') contents result = sum $ zipWith (*) name_scores [1..] putStrLn $ "Project Euler, Problem 22\n" ++ "Answer: " ++ show result