06/04/2009
Project Euler: solution au problème 22, en Python
Premier post du mois d'avril tiens, d'une certaine manière il était temps, nous sommes déjà le six! D'ici à ce qu'on dise que je laisse mon blog en désuétude, il n'y a qu'un pas!
Je continue dans les joyeusetés de Project Euler, avec le problème 22. L'idée est assez amusante, à savoir qu'on définit le "score" d'un mot comme la somme de ses lettres (avec A = 1, B = 2, ...), multiplié par la position de ce mot dans une liste. La liste en question est une liste de plus de 5000 prénoms, qu'on doit d'abord classer par ordre alphabétique. But: obtenir la somme des scores de tous ces noms, une fois triés.
#! /usr/bin/env python
# 2009/04/06 - euler022.py
# Solution au Probleme 22 de Project Euler
# http://projecteuler.net/index.php?section=problems&id=22
# Jean Karim Bockstael - jkb@jkbockstael.be
import re
letters = { 'A' : 1,
'B' : 2,
'C' : 3,
'D' : 4,
'E' : 5,
'F' : 6,
'G' : 7,
'H' : 8,
'I' : 9,
'J' : 10,
'K' : 11,
'L' : 12,
'M' : 13,
'N' : 14,
'O' : 15,
'P' : 16,
'Q' : 17,
'R' : 18,
'S' : 19,
'T' : 20,
'U' : 21,
'V' : 22,
'W' : 23,
'X' : 24,
'Y' : 25,
'Z' : 26 }
def filetolist(filename):
f = open(filename)
inp = f.readline()
names = re.split('\W+',inp)
f.close()
return names[1:-1]
def letterscore(letter):
return letters[letter]
def namescore(name):
score = 0
for i in range(0, len(name)):
score += letterscore(name[i])
return score
def euler22(filename):
names = sorted(filetolist(filename))
scoresum = 0
for i in range(0, len(names)):
scoresum += (i + 1) * namescore(names[i])
return scoresum
print euler22("names.txt")