1〜100の最小公倍数の質問をRubyで解いてみた。 - rscの日記
あんまり驚いたのでコピペしておきます。これだけで 1~100 までの最小公倍数が求められるとは! 流行の関数型プログラミングっぽい書き方です。
class Array def lcm; self.inject(:lcm); end end p (1..100).to_a.lcm
あるいはさらに圧縮すれば
p (1..100).to_a.inject(:lcm)
結果
69720375229712477164533808935312303556800
殆ど魔術ですね。これがすぐ理解できる人はすごいです。
中核部分は self.inject{|a,b| a.lcm(b)}
の簡略型になっています。inject
メソッドについてはこちら。最小公倍数を求める lcm
メソッドについてはこちら。
ここでの試行錯誤もおもしろいです。アルゴリズムの組立て方が、これほどプログラミングの簡略さに関ってくるとは。
しかし、これですけれど、
(1..5).each { |num| puts num }
を
(1..5).each(&method(:puts))
とやるのは、やりすぎではないかなあ。