diff options
Diffstat (limited to 'haskell/022-names_scores.hs')
| -rw-r--r-- | haskell/022-names_scores.hs | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/haskell/022-names_scores.hs b/haskell/022-names_scores.hs new file mode 100644 index 0000000..dd91ac8 --- /dev/null +++ b/haskell/022-names_scores.hs @@ -0,0 +1,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..]]) |
