プロジェクト・オイラー再開 Problem15
数学ガールに影響されて、数学の問題をプログラミングで解こうサイト「Project Euler」を再開しました。
和訳サイト
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問を目標にしたいと思います。