使用names.txt
(LINK:https://projecteuler.net/project/resources/p022_names.txt),一个包含超过5,000个名字的46K文本文件,首先将其按字母顺序排序。然后计算出每个名称的字母值,将该值乘以其在列表中的字母位置即可获得名称分数。
例如,当列表按字母顺序排序时,值得3 + 15 + 12 + 9 + 14 = 53
的COLIN是列表中的第938个名称。因此,COLIN将获得938 × 53 = 49714
的分数。
文件中所有名称分数的总和是什么?
我的输出:
811204450
我不知道我哪里写错了,我对“ COLIN”的回答也为49714
,并且名称也正确排序。
我的代码:
d=dict()
j=1
for i in range(ord('A'),ord('Z')+1):
d[chr(i)]=j
j+=1
def main():
global d
print(d)
f=open("p022_names.txt","r")
t=f.read()
t=t.split(',')
t.sort() #THIS IS BUILT IN FN. SORT
print(t[0:10]) #CHECKING IF EVERYTHING IS SORTED
tot=0
l=[]
i=0
for i in range(5000): #THERE ARE 5000 NAMES
for s in t[i]:
if(s=='"'):
#print(s)
continue
else:
#print(s)
tot+=d[s]
p=(i+1)*tot
l.append(p)
if(t[i]=='"COLIN"'):
print(t[i]," i= ",i)
print("p= ",p," tot= ",tot)
print(t[i]," ",l[i])
tot=p=0
p=0
print("len(l) = ",len(l))
for i in range(len(l)):
p+=l[i]
print("total score= ",p)
main()
答案 0 :(得分:0)
来自https://projecteuler.net/problem=22:
...一个包含 over 五千个名字的...的46K文本文件...
如果您希望检查它是 5163 。只需更改:
for i in range(5000):
到
for i in range(len(t)):
您还可以使用sum
和生成器表达式来缩短代码:
t = sorted(name.strip('"') for name in t)
result = sum(sum(ord(c)-64 for c in t[i]) * (i+1) for i in range(len(t)))