2012年11月13日火曜日

ソーシャルコーディングは楽しいねー。

毎週火曜日の定時後、弊社ではテーマ自由で当番の人がプレゼンをする社内勉強会が開催されています。

今日は@kuchitama さんがプログラミングコンテストをテーマにプレゼンしてました。

いろいろなプログラミングの腕試しの場を紹介してくださったのですが、個人的にその中のProject Eulerが面白そうだと思いました。日本語訳も充実していてとっつきやすいので、ちょっとずつ進めて自分のgistを充実させようと。

その中のproblem2 について、こんなコードを書きました。
ちなみに問題はこちら

/*
* http://projecteuler.net/problem=2
* http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%202
*/
val fib: List[Int] => List[Int] = {xs =>
xs match {
case Nil => throw new IllegalArgumentException
case i::Nil => throw new IllegalArgumentException
case _ => {
val nextNum = xs.head + xs.tail.head
if (nextNum >= 4000000) {
xs
} else {
fib(nextNum :: xs)
}
}
}
}
fib(List(2, 1)).filter(_ % 2 == 0).sum
view raw problem2.scala hosted with ❤ by GitHub

なんか、力業感があるなー、と思いながらそれをTwitterでつぶやいて数分。
@xuwei_k さんがForkしてくださいました。


/*
* http://projecteuler.net/problem=2
* http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%202
*/
val fib: List[Int] => List[Int] = {
case Nil | _ :: Nil => throw new IllegalArgumentException
case xs @ (a :: b :: tail) => {
val nextNum = a + b
if (nextNum >= 4000000) {
xs
} else {
fib(nextNum :: xs)
}
}
}
fib(List(2, 1)).filter(_ % 2 == 0).sum
view raw problem2.scala hosted with ❤ by GitHub

あー。そうかー。matchの"@"とか知識としては知ってたけど、それを使えるほど手に馴染んでなかったー、など面白い気づきがありました。

いやー、ソーシャルコーディングって楽しいですねー。

仕事でもペアプロなどをしていますが、他の人の意見を聞いて吸収していくというのは、本当に楽しいです。

0 件のコメント:

コメントを投稿