Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
Concise algorithm solution in Speedy category for Similar Triangles by Igor_Sekretarev
from typing import List, Tuple
Coords = List[Tuple[int, int]]
def squared_side(point1: Tuple[int, int], point2: Tuple[int, int]) -> int:
x1, y1 = point1
x2, y2 = point2
return (x1-x2)**2 + (y1-y2)**2
def triangle_params(coords: Coords) -> List[int]:
return sorted((squared_side(coords[i], coords[(i+1)%3]) for i in range(3)))
def similar_triangles(coords_1: Coords, coords_2: Coords) -> bool:
params1 = triangle_params(coords_1)
params2 = triangle_params(coords_2)
return len({params1[i]/params2[i] for i in range(3)}) == 1
if __name__ == '__main__':
print("Example:")
print(similar_triangles([(0, 0), (1, 2), (2, 0)], [(3, 0), (4, 2), (5, 0)]))
# These "asserts" are used for self-checking and not for an auto-testing
assert similar_triangles([(0, 0), (1, 2), (2, 0)], [(3, 0), (4, 2), (5, 0)]) is True, 'basic'
assert similar_triangles([(0, 0), (1, 2), (2, 0)], [(3, 0), (4, 3), (5, 0)]) is False, 'different #1'
assert similar_triangles([(0, 0), (1, 2), (2, 0)], [(2, 0), (4, 4), (6, 0)]) is True, 'scaling'
assert similar_triangles([(0, 0), (0, 3), (2, 0)], [(3, 0), (5, 3), (5, 0)]) is True, 'reflection'
assert similar_triangles([(1, 0), (1, 2), (2, 0)], [(3, 0), (5, 4), (5, 0)]) is True, 'scaling and reflection'
assert similar_triangles([(1, 0), (1, 3), (2, 0)], [(3, 0), (5, 5), (5, 0)]) is False, 'different #2'
print("Coding complete? Click 'Check' to earn cool rewards!")
April 25, 2021
Comments: