Project Euler #015 – 道順の組合せ

In: Project Euler

9 1月 2010

Project EulerをClojureでおさらいシリーズ。
Problem 15

オリジナルはこちら

日本語訳:

2×2のマス目の左上よりスタートして右下にたどり着く道順は6通りである。 (ただし逆方向に引き返さないこととする)

20×20のマス目では何通りの道順が存在するかを求めよ。

40C20 ですね。以上。

久々に紙と鉛筆でもいける問題。
こういうのも嫌いじゃない。

以前Rubyで解いたバージョンはこちら:

#!/usr/bin/env ruby
 
# 40C20
p 21.upto(40).inject(1){|s,x| s*x} / 1.upto(20).inject(1){|s,x| s*x}

さて、次はClojure:

(ns euler.p015)
 
(defn fact
  "Return factorial of N."
  [n]
  (apply * (range 1 (inc n))))
 
(defn comb
  "Return number of combinations from N choose M."
  [n m]
  (/ (fact n)
     (fact m)
     (fact (- n m))))
 
(println "Answer : " (comb (* 20 2) 20))

せっかくなので階乗と組合せの関数でも定義してみた。

blog comments powered by Disqus
Get Adobe Flash playerPlugin by wpburn.com wordpress themes

About this blog

私 manjilab のポータル的サイトになっております。日々気付いたこと、考えたこと、発表したいものを載せていきます。

Photostream

    Lisp indent 考察Lisp indent 考察Lisp indent 考察Lisp indent 考察Lisp indent 考察Tips to use Clojure(Lisp) with TextMateTips to use Clojure(Lisp) with TextMateTips to use Clojure(Lisp) with TextMate