ScalaでProject Euler(134)

Problem 91

直角三角形を3通りに分けて考えます。

  1. Pがy軸上でQがx軸上のもの
  2. Pがy軸上でQはその右、またはQがx軸上でPはその上
  3. P、Qは軸上にないもの

上の2つは簡単です。L = 50として、最初の場合はL^2個、次の場合は2L^2個あります。
3番目は、図のようにPがQの左上にありPが直角だとします。Qが直角の場合もあるのであとで2倍します。PがQの左上にあるような点の配置を列挙し、直角の判定をします。
最初Pythonのノリでcombinationsを使ったら遅かったので、下のように地味に書いたら200倍速くなりました。