我对Project Euler 022的解决方案运行不正确,我无法理解原因:
$scores = {
"A" => 1,
"B" => 2,
"C" => 3,
...
"Z" => 26
}
def alphabetScore(name)
nameScore = 0
array = name.split(//)
array.each { |n| nameScore += $scores[n] }
return nameScore
end
file = File.read("p022_names.txt").split(",")
file.map! { |n| n.tr('^A-Za-z0-9','') }
totalScore = 0
file.each do |findScore|
nameScore = alphabetScore(findScore)
totalScore += nameScore
end
p totalScore
# p file # to check that 'file' is indeed an array of strings
测试单个名称,例如p alphabetScore("AGNES")
会返回正确的值但是当我得到每个名称的得分时,我得到324536
,这是不正确的(正确的答案是871198282
)。我唯一的猜测是,为什么这不起作用的是其中一个名称(可能是导致totalScore
超过324536
的名称)在某种程度上被打破。
答案 0 :(得分:1)
看起来你错过了提示的这一部分:
然后计算每个名称的字母值,将此值乘以列表中的字母位置以获得名称分数。