プロジェクトオイラー第一問
久しぶりにプログラミングの話題。
「1000未満の全ての自然数のうち、3の倍数と5の倍数のものを加算せよ」
を、なんの工夫もなしにPythonとRubyで一行プログラミングしてみませう。
print reduce(lambda x, y: x + y, filter(lambda x: x % 3 == 0 or x % 5 == 0, xrange(1, 1000)))
puts (1..999).select{|x| x % 3 == 0 or x % 5 == 0}.inject{|x, y| x + y}
ふむ。PythonのreduceメソッドにあたるのがRubyではinjectメソッドになるのか。Pythonのlambda式はかなりの確率でRubyのブロック構文に直すことができると。ふむふむ。
追記
Rubyもinjectの別名でreduceメソッドを持っているそうです。つまり次のコードも動作します。
puts (1..999).select{|x| x % 3 == 0 or x % 5 == 0}.reduce{|x, y| x + y}