Problem:
線対称

平面上の異なる 3 点 P1(x1,y1), P2(x2,y2), Q(xq,yq) の座標の組を読み込んで、点 P1 点P2 を通る直線を対称軸として点 Q と線対称の位置にある点 R(x,y) を出力するプログラムを作成してください。なお、点 Q は、その対称軸上にないものとします。

入力

入力は複数のデータセットからなります。各データセットは以下の形式で与えられます。

x1,y1,x2,y2,xq,yq

x1, y1, x2, y2, xq, yq (-100 以上 100 以下の実数) がカンマ区切りで１行に与えられます。

データセットの数は 50 を超えない。

出力

データセットごとに、x, y を空白区切りで 1 行に出力する。出力は実数で 0.0001 以下の誤差を含んでもよい。

Sample Input

1.0,0.0,-1.0,0.0,1.0,1.0
1.0,0.0,0.0,-1.0,3.0,0.0
0.0,1.0,0.0,-1.0,1.0,1.0

Output for the Sample Input

1.000000 -1.000000
1.000000 2.000000
-1.000000 1.000000

Solution in Scala (judge verdict: Accepted)

import scala.io.Source.stdin

object Main extends App {
  def f(x:Double) = if(x == -0.0) 0.0 else x

  val results = stdin.getLines.map { s=>
    val n = s.split(",").map(_.toDouble)
    val d = Math.pow(n(2)-n(0),2) + Math.pow(n(3)-n(1),2)
    val inner = (n(2)-n(0))*(n(4)-n(0)) + (n(3)-n(1))*(n(5)-n(1))
    val (x,y) = (2*inner*(n(2)-n(0))/d + 2*n(0)-n(4), 2*inner*(n(3)-n(1))/d + 2*n(1)-n(5))
    "%.6f %.6f".format(f(x),f(y))
  }
  println(results.mkString("\n"))
}