Lucas Willems

LUCAS WILLEMS

Un étudiant de 21 ans passionné par les maths et la programmation

English

Project Euler 22 : solution Python

Article

Voici un résumé de l'énoncé du problème 22 "Names scores" du Project Euler (traduction complète en français ici) :

What is the total of all the name scores in the file ? (voir énoncé complet)

Compréhension du problème

Reformulons le problème : il nous faut trouver la total de tous les scores des noms présents dans le fichier donné dans l'énoncé. Pour résoudre ce problème, il nous suffit, tout simplement, de suivre la démarche expliquée dans l'énoncé et qui consiste à :

  1. Faire la liste de tous les noms du fichier
  2. Trier cette liste par ordre alphabétique
  3. Trouver, pour chacun de ces noms, le produit de la position de ce nom dans la nouvelle liste par sa valeur alphabétique, c'est à dire la somme de la position alphabétique de ses lettres
  4. Faire la somme de tous les produits trouvés

Le programme

Voici donc le programme Python que nous pouvons utiliser pour résoudre ce problème :

#Cette fonction prend en paramètre un nom/mot et retourne sa valeur alphabétique
def name_score(name):
    score = 0
    #Lecture un par un des lettres du mot
    for i in name:
        #La fonction ord prend en paramètre un caractère et retourne son code ascii
        #Le code ascii de A étant 65, il nous faut soustraire 64 au code ascii
        #d'une lettre pour obtenir sa position dans l'alphabet
        score += ord(i) - 64
    return score
​ fichier = open("022_names.txt", "r") #Lecture des noms du fichier et génération de la liste des noms names = list(eval(fichier.read())) fichier.close() names.sort() resultat = 0 for i, name in enumerate(names): resultat += name_score(name)*(i+1) print(resultat)

Notez que pour que ce programme fonctionne, il vous faut au préalable enregistrer tous les noms dans un fichier "002_names.txt" se trouvant dans le même dossier que le programme.

Le résultat

La réponse à ce problème est 871198282.

Recherche

Voici les recherches relatives à cette page :

Commentaires

Qu'en pensez-vous ? Donnez moi votre avis (positif ou négatif) pour que je puisse l'améliorer.