Utilisez le fichier texte de 46 Ko filenames.txt avec plus de 5 000 noms. Triez d'abord par ordre alphabétique.
Après cela, le score du nom est calculé en attribuant une valeur à l'alphabet pour chaque nom et en le multipliant par le nombre dans l'ordre d'apparition dans la liste.
Par exemple, si la liste est triée par ordre alphabétique, COLIN est à la 938ème position dans la liste et COLIN a la valeur 3 + 15 + 12 + 9 + 14 = 53, donc COLIN est 938 x 53 = 49714. Ayez un score.
Trouvez la somme des scores de tous les noms du fichier. http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2022
Entraînez-vous à utiliser la fonction de réduction.
dict = {"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 get_point(name,i):
#if name == 'COLIN':
# print reduce(lambda x,y:x+y, map(lambda x:dict[x], name)) * (i+1)
return reduce(lambda x,y:x+y, map(lambda x:dict[x], name)) * (i+1)
def main():
filename = "names.txt"
F = open(filename)
names = F.read()
namelist = map(lambda x: x.strip('"'), names.split(","))
namelist.sort()
ans = 0
lng = len(namelist)
for i in range(lng):
ans += get_point(namelist[i],i)
print ans
main()
Recommended Posts