Using
names.txt, 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 worth3 + 15 + 12 + 9 + 14 = 53, is the 938th name in the list. So,COLINwould obtain a score of938 × 53 = 49714.
I love abusing map.
import re def word_sum(word): word_sum = sum(map(lambda letter: ord(letter)-ord('A')+1, word)) return word_sum def name_scores_sum(path): f = file(path) names = f.read() names = sorted(re.findall('([A-Z]+)',names)) sums = map(word_sum,names) scores = map(lambda (index,sum): index*sum, enumerate(sums,1)) return sum(scores) >>> name_scores_sum(path) 871198282 |