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();
      }
    }
  }
}