Verwenden Sie die 46K-Textdatei filenames.txt mit über 5000 Namen. Sortieren Sie zuerst alphabetisch.
Danach wird die Punktzahl des Namens berechnet, indem dem Alphabet für jeden Namen ein Wert zugewiesen und mit der Zahl in der Reihenfolge ihres Auftretens in der Liste multipliziert wird.
Wenn die Liste beispielsweise alphabetisch sortiert ist, befindet sich COLIN an der 938. Position in der Liste, und COLIN hat den Wert 3 + 15 + 12 + 9 + 14 = 53, sodass COLIN 938 x 53 = 49714 ist. Haben Sie eine Punktzahl.
Suchen Sie die Summe der Bewertungen für alle Namen in der Datei. http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2022
Üben Sie die Reduktionsfunktion.
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