繁体   English   中英

项目Euler 22 Python | 从正确的结果300k

[英]Project Euler 22 Python | 300k from right result

我正在研究欧拉项目的问题22。

使用names.txt(右键单击和“保存链接/目标为...”),一个包含超过五千个名字的46K文本文件,首先按字母顺序排序。 然后计算每个名称的字母值,将该值乘以列表中的字母位置以获得名称分数。 例如,当列表按字母顺序排序时,值为3 + 15 + 12 + 9 + 14 = 53的COLIN是列表中的第938个名称。 因此,COLIN将获得938×53 = 49714的分数。文件中所有名称分数的总和是多少?

下面的我的代码适用于COLIN示例,我也尝试使用5个名称的小列表,这是正确的。 但在这里我的结果是870873746,它应该是871198282.所以~324k缺失了。 我编辑了names.txt文件。 每个名称都在一行中,没有“”。

nameList = []
letterDict = {"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}
a = 0
namescoresum = 0
b = 0
c = 0
while a < 5163:
    x = raw_input()
    nameList.append(x)
    a += 1

nameList.sort()
print nameList

for name in nameList:
    b += 1
    lettersum = 0
    for letter in name:
        c += 1
        lettersum += letterDict[letter]
    indexofname = nameList.index(name)
    namescoresum += (lettersum * indexofname)

print "NAMESCORESUM: ", namescoresum

我相信你有一个错误的错误。 请记住,数组索引从零开始,但序数(如第一,第二,第938)从一开始。

尝试这个:

namescoresum += lettersum * (indexofname+1)

要确定您是否有一个off-by-one错误,请将其添加到for循环中:

if name == 'COLIN':
    print 'COLIN', indexofname

另外,要完成这个问题......如果您想用单个理解列表解决问题(假设您已经准备好了数据),请参考以下提示:

  • ord,ASCII,sum,enumerate

你去:-)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM