Project Euler: Problem38

残念ながら死ぬほど汚いんだけど…。

object Problem38 {
  def isPandigital(x:String):Boolean = {
    for (c <- x)
      if (c=='0') return false

    var a=0
    var b=0
    while (a<8) {
      b = a+1
      while (b<9) {
	if (x(a)==x(b))
	  return false
	b += 1
      }
      a += 1
    }
    return true
  }
  def make(x:Int):Option[Int] = {
    var c = 1
    var result = ""
    while (result.length < 9) {
      result += (x*c).toString()
      c += 1
    }
    println(result)
    if (result.length == 9 && isPandigital(result))
      return Some(Integer.parseInt(result))
    else
      return None
  }
  def search() : Int = {
    var max = 0
    var counter : Int = 10
    while ( counter%10000 != 0 ) {
      make(counter) match {
	case Some(x) => if (x > max) max = x
	case None    => ()
      }
      counter += 1
    }
    return max
  }
  def main(args:Array[String]) : unit = {
    println(search())
  }
}