ScalaでProject Eulerをやってみる。
アルゴリズムや数学みたいなのもやっておかないといけない気がしたので、
とりあえずScalaでProject Eulerの最初の二問をやってみました。
ちなみに、一応関数型っぽい書き方をしようと思ったので、再帰を使うなどいろいろと心がけてます。
まずはProblem 1。
1000未満の3か5の倍数の合計を出せってことらしいです。FizzBuzzの派生か何かか?
object Problem1 { def loop (count: Int, total: Int): Int = { if (count == 0) total else loop (count - 1, (if (count % 5 == 0 || count % 3 == 0) total + count else total)) } def main (args: Array[String]) = { print (loop (1000 - 1, 0)) } }
関数名や変数名は完全に適当です。
自分の大嫌いな横に長いコードになってしまった・・・
次にProblem 2。
400万以下のフィボナッチ数列の偶数の項を全部たすってことらしい。
object Problem2 { def loop (first: Int, second: Int, total: Int): Int = { if (first + second < 4000000) loop (second, first + second, if ((first + second) % 2 == 0) total + (first + second) else total ) else total } def main (args: Array[String]) = { print (loop (0, 1, 0)) } }
フィボナッチ数列の生成と偶数の項をたすのを同じ関数の中に詰め込んだせいでifが複雑になっています。
これからもやっていきたいと思います。絶対途中で挫折するはずですが