2012年3月24日土曜日

Project Euler-Problem 2をscalaで解いてみる

問題内容

Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be:

1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...

By considering the terms in the Fibonacci sequence whose values do not exceed four million, find the sum of the even-valued terms.


訳すと・・・

フィボナッチ数列の項は前の2つの項の和である。 最初の2項を 1, 2 とすれば、最初の10項は以下の通りである。

1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
数列の項の値が400万を超えない範囲で、偶数値の項の総和を求めよ。

scalaのコード

fibo関数でフィボナッチ数列をListにつめていきます。400万を超えない範囲でとなっているので、400万を超えた時点でfibo関数から抜けます。
その結果のListから偶数でフィルタをかけて、sum関数で合計を求めて終わりです。
def fibo(n1: Int, n2: Int): List[Int] = {
  val n = n1 + n2
  if (n > 4000000) {
    Nil
  } else {
    n :: fibo(n2, n)
  }
}
val sum = fibo(0, 1).filter(_ % 2 == 0).sum
println("sum = " + sum)