プログラマ脳を鍛える数学パズル シンプルで高速なコードが書けるようになる70問をやる。今回は、Q12:平方根の数字。

Q: 平方根を少数で表したとき、0~9までの数字がすべて現れる最小の整数を求める。正の平方根のみを対象とし、整数部分を含む場合と、少数部分のみの場合を求める。

def num(n:Int):Stream[Int] = n#::num(n+1)

1 + num(1).indexWhere{ scala.math.sqrt(_).toString.take(11).distinct.length == 11 }
1 + num(1).indexWhere{ n =>
  val s = scala.math.sqrt(n)
  (s - s.toInt).toString.take(12).tail.distinct.length == 11
}