Enumerable#inject

http://d.hatena.ne.jp/mssh/20080309#1205040537

合計を求める場合はEnumerable#injectを使うのが定番。
lambdaはブロックで。

def sum(s, e, &func)
  (s..e).inject{|sum, i| sum + func[i] }
end

def f(n) n % 7 end

def g(n) 3 * f(sum(1, 7){|i| i**n }) end

100.times do |i|
  result = g(i)
  puts "g(#{i}) = #{result}" if result > 0
end
# >> g(6) = 18
# >> g(12) = 18
# >> g(18) = 18
# >> g(24) = 18
# >> g(30) = 18
# >> g(36) = 18
# >> g(42) = 18
# >> g(48) = 18
# >> g(54) = 18
# >> g(60) = 18
# >> g(66) = 18
# >> g(72) = 18
# >> g(78) = 18
# >> g(84) = 18
# >> g(90) = 18
# >> g(96) = 18