diff options
| author | Charles <sircharlesaze@gmail.com> | 2019-08-17 20:39:03 +0200 |
|---|---|---|
| committer | Charles <sircharlesaze@gmail.com> | 2019-08-17 20:39:03 +0200 |
| commit | 9a65938232d1fa9e1afe9a6eb2de48d25ff738a6 (patch) | |
| tree | 6f5e9dbef23a884a74f9fa10643ff5c0bea3d751 /haskell/022-names_scores.hs | |
| parent | 78fbf8dbcf39aa51cf682a8795d0d0c3be6034c6 (diff) | |
| download | project_euler-9a65938232d1fa9e1afe9a6eb2de48d25ff738a6.tar.gz project_euler-9a65938232d1fa9e1afe9a6eb2de48d25ff738a6.tar.bz2 project_euler-9a65938232d1fa9e1afe9a6eb2de48d25ff738a6.zip | |
haskell problem 22, 24, 25, 29, 39, 40, 45, 53, 59
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..]]) |
