プロジェクト・オイラー再開 Problem15

数学ガールに影響されて、数学の問題をプログラミングで解こうサイト「Project Euler」を再開しました。


公式サイト
http://projecteuler.net/


和訳サイト
http://odz.sakura.ne.jp/projecteuler/index.php?Project%20Euler

2 × 2 のマス目の左上からスタートした場合、引き返しなしで右下にいくルートは 6 つある。
では、20 × 20 のマス目ではいくつのルートがあるか。
Problem15






***以降はネタバレ含***








この問題は、かなり数学チックなので難しかったです。やはり、少ないマス目で考えて、法則っぽいのを見つけるために仮説→検証を繰り返して解きました。


で、ソースコードはこちら。

def c(n, r)
  def f(a, b)
    a.downto(b).inject{|result, item| result * item}
  end
  f(n, n - r + 1) / f(r, 1)
end
puts c(40, 20)

適当なワンライナーを起こしたので、間違ってたらごめんなさい。


■適当なワンライナー

ruby -e "def f(a, b)a.downto(b).inject{|r, i| r * i};end;p f(40, 21) / f(20, 1)"


いつの間にか300問超えてるし。とりあえず2日で1問を目標にしたいと思います。