如果我运行这个怎么办:
get_score = proc{ |word, position|
val = 0
word[1..-2].each_byte do |c|
val = val + (c.ord - 64)
end
name_score = val*(position+1)
}
puts File.read("names.txt").split(',').sort.map.with_index(&get_score).inject(:+)
我得到答案:871193872
但是如果我运行这个:
get_score = proc{ |word, position|
val = 0
word.each_byte do |c|
val = val + (c.ord - 64)
end
name_score = val*(position+1)
}
puts File.read("names.txt").gsub('"','').split(',').sort.map.with_index(&get_score).inject(:+)
我明白了:871190344
(不同的是,在第二个中我使用 gsub 删除引号,但在第一个中我保留它们直到我使用 word[1..-2] 仅遍历引号之间的字符)
在第三个版本中,它使用 scan(/\w+/) 来搜索空格,即使文件中没有空格,但这是给出正确答案的那个:
names = File.open('names.txt').read.scan(/\w+/).sort
puts names.map { |name|
word_score = name.each_byte.map { |c| c - 64 }.reduce(:+)
(names.index(name) + 1) * word_score
}.reduce(:+)
编辑: