Project Euler: Problem45
なんだか Haskell だとうまくいかないので Scala で。実際には eclipse プラグインに scala モードがあるのを知ってなんか書いてみたかっただけなんですが。Haskell 版をそのまま移植した説が濃厚。
イテレータを継承してみたりした。コンストラクタの書き方がかわっているなぁと思った。
object Problem45 { class Generator (gen : Int => Int) extends Iterator[Int] { val this.gen = gen; var n = 0; def hasNext : Boolean = true; def next : Int = { n += 1; return gen(n); } } def main(args : Array[String]) : Unit = { var triangle = new Generator(n => n*(n+1)/2); var pentagonal = new Generator(n => n*(3*n-1)/2); var hexagonal = new Generator(n => n*(2*n-1)); var x = triangle.next(); var y = pentagonal.next(); var z = hexagonal.next(); while (true) { if (x==y && y==z) println(x); if (x < y) { if (x < z) x = triangle.next(); else z = hexagonal.next(); } else { if (y < z) y = pentagonal.next(); else z = hexagonal.next(); } } } }