# 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?
# @see https://projecteuler.net/problem=22

def name_score(word)
  word.downcase.each_byte.reduce(0) {|sum, byte| sum + byte - 96 }
end
contents = File.read(File.expand_path('../../data/p022_names.txt', __FILE__))

sum = 0
contents.split(",").sort.each_with_index do |string, i|
  name = string[1..-2] # Remove leading and trailing quotes
  sum += name_score(name) * (i + 1)
end
puts sum
