aboutsummaryrefslogtreecommitdiff
path: root/haskell/022-names_scores.hs
blob: dd91ac896c2f825bfc5cecca59cf458b22901043 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
-- Names scores
--
-- Problem 22
-- Using names.txt (right click and 'Save Link/Target As...'), 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)

main = do
    content <- readFile "../data/022_names.txt"
    let nameSum name = sum [ord c - ord 'A' + 1 | c <- name]
        names = sort $ words $ foldr
            (\c acc -> (if c `elem` "\"," then ' ' else c) : acc) "" content
    print (sum [nameSum n * i | (n, i) <- zip (names) [1..]])