ScalaでProject Euler(82)

Problem 52

6倍まで桁上りがあってはいけないので、[1, 10 / 6)を10のべき乗で掛けた数になります。あとは、各倍数の10進の数字をソートして比較するだけです。

import scala.testing.Benchmark

def pow(n :Int, e :Int) = (1 to e).foldLeft(1)((x, y) => x * n)

def digits(n :Int) :List[Int] =
    if(n == 0) Nil else (n % 10) :: digits(n / 10)

def is_solution(n :Int) :Boolean = {
    val it_m = Iterator.range(1, M + 1).map(n *).
                    map(m => digits(m).sortWith(_ < _))
    val ds1 = it_m.next
    it_m.forall(ds1 ==)
}

def gen_solutions(N :Int) = {
    val begin = pow(10, N - 1)
    val end = (pow(10, N) - 1) / M + 1
    Iterator.range(begin, end).filter(is_solution)
}

def solve() = {
    println (Iterator.from(6).flatMap(gen_solutions).take(5).toList)
}

object Test extends Benchmark {
    def run() = solve
}

val M = 6
println (Test.runBenchmark(10))