https://atcoder.jp/contests/abc246/tasks/abc246_a
第一感は、x座標で2回出てくる座標と1回出てくる座標があるので、1回出てくる方を取ればいいのだろう、というものでした。
# coding: utf-8 # Four Points from collections import Counter import sys #################### library #################### def read_tuple(): return tuple(map(int, raw_input().split())) #################### process #################### def read_input(): points = [ read_tuple() for _ in range(3) ] return points def F(points): x_counter = Counter(x for x, y in points) y_counter = Counter(y for x, y in points) x = next(x for x, c in x_counter.items() if c == 1) y = next(y for y, c in y_counter.items() if c == 1) return ' '.join(map(str, (x, y))) #################### main #################### points = read_input() print F(points)
しかし、なんか不自然な考え方ですよね。
もう少し一般的に考えましょう。3点で成す角度が直角である並びを見つければよいです。そうすれば、第4の点はベクトル計算で求められます。
# coding: utf-8 # Four Points from itertools import permutations #################### library #################### def read_tuple(): return tuple(map(int, raw_input().split())) #################### process #################### def read_input(): points = [ read_tuple() for _ in range(3) ] return points def add_vec((x1, y1), (x2, y2)): return (x1 + x2, y1 + y2) def sub_vec((x1, y1), (x2, y2)): return (x1 - x2, y1 - y2) def inner_product((x1, y1), (x2, y2)): return x1 * x2 + y1 * y2 def is_right_angle(pt1, pt2, pt3): return inner_product(sub_vec(pt2, pt1), sub_vec(pt3, pt1)) == 0 def F(points): for pt1, pt2, pt3 in permutations(points): if is_right_angle(pt1, pt2, pt3): pt4 = add_vec(pt1, add_vec(sub_vec(pt2, pt1), sub_vec(pt3, pt1))) return ' '.join(map(str, pt4)) #################### main #################### points = read_input() print F(points)
コード長いし、permutationsは3つ出せばいいところを6つ出していますね。
Python3ですが、NumPyを使えば短くなりますね。
# coding: utf-8 # Four Points from itertools import permutations import numpy as np #################### library #################### def read_tuple(): return tuple(map(int, input().split())) #################### process #################### def read_input(): points = [ np.array(read_tuple()) for _ in range(3) ] return points def F(points): for pt1, pt2, pt3 in permutations(points): if np.dot(pt2 - pt1, pt3 - pt1) == 0: pt4 = pt1 + (pt2 - pt1) + (pt3 - pt1) return ' '.join(map(str, pt4)) #################### main #################### points = read_input() print(F(points))