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")

Tags:

cc-by-nc | code (python) | project euler


Project Euler : solution au problème 23, en Python (06/04/2009)Quelques chiffres... (31/03/2009)