# frozen_string_literal: true

# 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?

# reading the contents of the file
file_contents = File.read('p022_names.txt')

# replacing the occuerance of \" to '' and spliting the result by ','
# to get an array of sorted words
words = file_contents.tr('\"', '').split(',').sort

# this method calculates the worth of a word based on the ASCII
# values of the characters
def word_worth(word)
  word.chars.sum { |char| char.ord - 'A'.ord + 1 }
end

# this method takes the words as an input
# calls `word_worth` method on each word
# to that value multiply that with the index of the word in the array
# add the same to the result
def total_rank(words)
  result = 0
  words.each_with_index { |word, index| result += word_worth(word) * (index + 1) }
  result
end

# outputs total rank on the console
puts total_rank(words)