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 $938$th name in the list. So, COLIN would obtain a score of $938 \times 53 = 49714$.
What is the total of all the name scores in the file?
This problem from Project Euler problem 22 (a site that hosts a collection of problems intended to be solved with the aid of a computer).
We might solve this problem using Python.
First, we would need to load and sort the names from the text file. Assuming names are stored one per line, your Python code could start with:
“`python
with open(‘names.txt’, ‘r’) as file:
names = sorted(file.read().strip().split(‘\n’))
“`
Next, you would define a function to calculate the alphabetical score of a single name:
“`python
def name_score(name):
alphabet = ‘ABCDEFGHIJKLMNOPQRSTUVWXYZ’
return sum(alphabet.index(letter) + 1 for letter in name)
“`
The ‘+1’ is there because Python lists are 0-indexed, but the problem description is 1-indexed. Note that ‘A’ will be counted as 1, ‘B’ as 2, and so forth, up to ‘Z’ as 26.
After that, you would calculate the score of each name in the list and sum those scores:
“`python
total_score = sum((i + 1) * name_score(name) for i, name in enumerate(names))
“`
The ‘+1’ is again because Python counts from 0, but the problem description counts from 1.
Combining all these parts together, here is the full Python solution:
“`python
# read and sort names
with open(‘names.txt’, ‘r’) as file:
names = sorted(file.read().strip().split(‘\n’))
# define function to calculate name score
def name_score(name):
alphabet = ‘ABCDEFGHIJKLMNOPQRSTUVWXYZ’
return sum(alphabet.index(letter) + 1 for letter in name)
# calculate total score
total_score = sum((i + 1) * name_score(name) for i, name in enumerate(names))
print(total_score)
“`
This script will print out the total of all the name scores in the file, as required by your problem.
Finally, remember to replace ‘names.txt’ with the actual path of your text file.
More Answers:
Counting SundaysFactorial Digit Sum
Amicable Numbers