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..]])
|