Skip to content

Instantly share code, notes, and snippets.

@fabian57
Last active August 29, 2015 14:16
Show Gist options
  • Save fabian57/2d9a46d7c1f695c9b9e2 to your computer and use it in GitHub Desktop.
Save fabian57/2d9a46d7c1f695c9b9e2 to your computer and use it in GitHub Desktop.
UPPER_LETTER_OFFSET = ord("A") - 1
names = sorted(open("euler_022_data.txt").read().replace('"', "").split(","))
result = 0
for (i, name) in enumerate(names, 1):
name_score = 0
for c in name:
name_score += ord(c) - UPPER_LETTER_OFFSET
result += name_score * i
print result
@laowantong
Copy link

Très bien, mais si tu cherches la perfection, les points suivants sont à considérer:

  • Structuration: les initialisations des accumulateurs (lignes 4-5) seraient mieux placées immédiatement avant leur boucle d'accumulation respective.
  • Performance: supprime d'un coup tous les guillemets (avec replace) pour éviter une fastidieuse extraction de tranches en lignes 4, 6-7. Cette technique est fameusement illustrée ici.
  • Pythonisme: for (i, name) in enumerate(name_list, 1).
  • Bonne pratique: 64 est un nombre magique, définis plutôt: UPPER_LETTER_OFFSET = ord("A") - 1.
  • Bonne pratique: on déconseille en général d'inclure le nom du type dans celui d'une variable. En écrivant name_list tu mélanges sémantique et détail d'implémentation. Si plus tard tu te rends compte qu'une autre structure de données est plus adaptée, tu devras modifier le nom de la variable, alors que sémantiquement, c'est la même chose. La variable devrait simplement s'appeler names.

@laowantong
Copy link

Parfait, sauf la coquille en ligne 7, qui devrait s'écrire:

for c in name:

@fabian57
Copy link
Author

Ah oui, je l'avais oublié

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment