紫だちたる雲の細くたなびきたる blog

春はあけぼの(をかし)

プロジェクトオイラー第一問

久しぶりにプログラミングの話題。

「1000未満の全ての自然数のうち、3の倍数と5の倍数のものを加算せよ」
を、なんの工夫もなしにPythonRubyで一行プログラミングしてみませう。

Python

print reduce(lambda x, y: x + y, filter(lambda x: x % 3 == 0 or x % 5 == 0, xrange(1, 1000)))

Ruby

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}