最小公倍数を求める(Ruby)

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))

とやるのは、やりすぎではないかなあ。