26 September, 2010

[event] Reading TAPL

Types and Programming Languages ( http://www.amazon.co.jp/dp/0262162091 ) という定番の教科書を読もうという読書会です。
東京近辺の方はぜひどうぞ。

http://atnd.org/events/8291

20 September, 2010

[Scala] Fibonacci series including 7110

 今更ながら http://recruit.drecom.co.jp/event2010 の「7110を含むフィボナッチ数列で、初期値の組み合わせが一番小さいものをあげろ。※自然数に限る」をScalaで解いてみた。
 もうイベントは終わったから解答公開してもいいよね。

 fib が 7110以下の範囲のフォボナッチ数列を計算する関数。zipとか使って格好良く書けるかもとも思うが、判りやすさ優先で。ysのところにxs'と書けないScalaは残念な感じだ。


scala> def fib(n0:Int,n1:Int) = {
| def f(xs:List[Int]):List[Int] = xs match {
| case a::b::ys if a < 7110 => f((a+b)::xs)
| case _ => xs
| }
| f(n1::n0::Nil)
| }
fib: (Int,Int)List[Int]

scala> def solve = for( n1 <- (1 to 100).toList;
| n0 <- (1 to n1).toList if fib(n0,n1).head==7110
| ) yield {(n0,n1)}
solve: List[(Int, Int)]

scala> solve
res7: List[(Int, Int)] = List((16,70), (70,86))
scala>