Skip to content

Instantly share code, notes, and snippets.

@simlun
Created July 7, 2012 22:22
Show Gist options
  • Select an option

  • Save simlun/3068315 to your computer and use it in GitHub Desktop.

Select an option

Save simlun/3068315 to your computer and use it in GitHub Desktop.

Revisions

  1. simlun revised this gist Jul 7, 2012. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion euler_test.clj
    Original file line number Diff line number Diff line change
    @@ -12,7 +12,7 @@

    (fact "fib can handle even bigint-large numbers, just for fun"
    (fib 92) => 7540113804746346429
    (fib 93) => 12200160415121876738N)
    (fib 93) => 12200160415121876738)

    (fact "The Project Euler problem 2 answer"
    (sum-even-fibs-less-than 4000000) => 4613732)
  2. simlun revised this gist Jul 7, 2012. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion euler_test.clj
    Original file line number Diff line number Diff line change
    @@ -10,7 +10,7 @@
    (fib 4) => 3
    (fib 12) => 144)

    (fact "fib can handle even bigint-large numbers"
    (fact "fib can handle even bigint-large numbers, just for fun"
    (fib 92) => 7540113804746346429
    (fib 93) => 12200160415121876738N)

  3. simlun created this gist Jul 7, 2012.
    27 changes: 27 additions & 0 deletions euler.clj
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,27 @@
    (ns euler002.euler)

    (defn- fib-fast
    [i a b limit]
    (if
    (< i limit)
    (fib-fast (inc i) b (+ a b) limit)
    b))

    (defn fib
    [n]
    (if
    (= n 0)
    0
    (fib-fast (bigint 1) (bigint 0) (bigint 1) (bigint n))))

    (defn- even-fibs-less-than
    [max-fib]
    (for [n (range)
    :let [f (fib n)]
    :when (even? f)
    :while (< f max-fib)]
    f))

    (defn sum-even-fibs-less-than
    [max-fib]
    (reduce + (even-fibs-less-than max-fib)))
    18 changes: 18 additions & 0 deletions euler_test.clj
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,18 @@
    (ns euler002.euler-test
    (:use midje.sweet
    euler002.euler))

    (fact
    (fib 0) => 0
    (fib 1) => 1
    (fib 2) => 1
    (fib 3) => 2
    (fib 4) => 3
    (fib 12) => 144)

    (fact "fib can handle even bigint-large numbers"
    (fib 92) => 7540113804746346429
    (fib 93) => 12200160415121876738N)

    (fact "The Project Euler problem 2 answer"
    (sum-even-fibs-less-than 4000000) => 4613732)