Project Euler 22

Project Euler 22はアルファベットの名前を足し算するような問題。mapとかinjectとか、実は読みづらいんじゃないかという気がしつつ。

while line = gets
  names = line.chomp.split(/,/).map{|name| name.gsub(/\"/,'')}
end

total = 0

def c2v(c)
  c.ord - "A".ord + 1
end

def name_value(name)
  name.split(//).map{|c| c2v(c)}.inject(:+)
end

names.sort.each_with_index do |name, i|
  total += name_value(name) * (i + 1)
 end

puts total