aboutsummaryrefslogtreecommitdiff
path: root/haskell/022-names_scores.hs
diff options
context:
space:
mode:
authorCharles <sircharlesaze@gmail.com>2019-08-17 20:39:03 +0200
committerCharles <sircharlesaze@gmail.com>2019-08-17 20:39:03 +0200
commit9a65938232d1fa9e1afe9a6eb2de48d25ff738a6 (patch)
tree6f5e9dbef23a884a74f9fa10643ff5c0bea3d751 /haskell/022-names_scores.hs
parent78fbf8dbcf39aa51cf682a8795d0d0c3be6034c6 (diff)
downloadproject_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.hs24
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..]])