プログラマ脳を鍛える数学パズル シンプルで高速なコードが書けるようになる70問をやる。今回は、Q16:3本のひもで作る四角形。

Q: 長さが1から500まで変化する同じ長さのひも3本で、正方形を1つ、長方形を2つ作った時、正方形の面積と2つの長方形の面積の和が等しくなる組をカウントする。ただし、同じ比で整数倍のものは1つとしてカウントする。

def count(max:Int) = {
  (for {
    len <- 1 to max/4
    Seq(a,b) <- (1 until len).combinations(2) if a*a + b*b == len*len
  } yield {
    (a/len.toFloat, b/len.toFloat)
  }).toSet.size
}
count(500)