我正在处理 Project Euler 的问题 22:
使用 names.txt(右键单击并“将链接/目标另存为...”),一个 46K 的文本文件,其中包含超过 5000 个名字,首先按字母顺序对其进行排序。然后计算每个名称的字母值,将该值乘以其在列表中的字母位置以获得名称分数。
例如,当列表按字母顺序排序时,价值 3 + 15 + 12 + 9 + 14 = 53 的 COLIN 是列表中的第 938 个名称。因此,COLIN 将获得 938 × 53 = 49714 的分数。
文件中所有名称分数的总和是多少?
http://projecteuler.net/problem=22
当我在下面编译我的代码时,我得到了答案871196077。正确答案应该是871198282。
进口时间
def euler_22():
## Creates a sorted list of the names in Py_Euler_22.txt names = open('Py_Euler_22.txt', 'r') names = names.read() names = names.split('","') names[0] = names[0][1:] names[-1] = names[-1][:-2] names = sorted(names) ## Creates a dictionary: letter -> value value_letters = {} start = ord("A") for i in range(0, 26): value_letters[chr(start+i)] = i+1 result = 0 for i in range(1, len(names)+1): name = names[i-1] sum_letters = 0 for letter in name: sum_letters += value_letters[letter]*i # = value of the letter multiplied with the name position result += sum_letters return result
tstart = time.time() print euler_22() print "运行时间:" + str(time.time() - tstart)
我试图找到一个具有类似解决方案的程序,但我只知道 Python,这限制了选项。我用我创建的更简单的文本文件运行程序,在那里我可以在没有程序的情况下得到答案,并且所有这些都有效。我用谷歌搜索了问题的答案,但这也无济于事,因为我找不到缺失的点。
我是初学者,所以我非常感谢有关程序和 Python 的任何提示,不仅是那些,这将帮助我正确解决问题。
非常感谢!