| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- '''
- > https://www.codingame.com/ide/puzzle/nature-of-quadrilaterals
- @author: olivier.massot, 2019
- '''
- import math
- import sys
- class Vertex():
- def __init__(self, name_, x, y):
- self.name = name_
- self.x = int(x)
- self.y = int(y)
- self.pos = (self.x, self.y)
-
- def __repr__(self):
- return f"{self.name}{self.pos}"
- class Side():
- def __init__(self, v1, v2):
- self.v1 = v1
- self.v2 = v2
- self.sqlength = (v2.x - v1.x)**2 + (v2.y - v1.y)**2
-
- self.a = (v2.x - v1.x) / (v2.y - v1.y) if v2.y != v1.y else (v2.x - v1.x) * math.inf
- self.b = -1 * self.a * v2.x + v2.y
- def ortho_to(self, s):
- if abs(self.a) == math.inf and s.a == 0:
- return True
- elif self.a == 0 and abs(s.a) == math.inf:
- return True
- elif self.a * s.a == -1:
- return True
- return False
-
- class Quadri():
- def __init__(self, *vertices):
- self.vertices = [Vertex(*v) for v in vertices]
- self.name = "".join([v.name for v in self.vertices])
- self.sides = [Side(v1, v2) for v1, v2 in list(zip(self.vertices, self.vertices[1:])) + [(self.vertices[-1], self.vertices[0])]]
-
- def __repr__(self):
- return f"<Q:{self.vertices}>"
- def nature(self):
- opposites_parallels = (abs(self.sides[0].a) == abs(self.sides[2].a) and \
- (abs(self.sides[1].a) == abs(self.sides[3].a)))
- same_length_sides = all([s.sqlength == self.sides[0].sqlength for s in self.sides[1:]])
- right_angles = self.sides[0].ortho_to(self.sides[1]) and self.sides[1].ortho_to(self.sides[2]) and self.sides[2].ortho_to(self.sides[3])
-
- if right_angles and same_length_sides:
- return "square"
- elif right_angles:
- return "rectangle"
- elif same_length_sides:
- return "rhombus"
- elif opposites_parallels:
- return "parallelogram"
- else:
- return "quadrilateral"
-
- input_ = [input().split() for _ in range(int(input()))]
- quadris = [Quadri(*zip(l[::3], l[1::3], l[2::3])) for l in input_]
- print(quadris, file=sys.stderr)
-
- for q in quadris:
- print(f"{q.name} is a {q.nature()}.")
|