Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
Simplified version of previous solution (no unnecessary sqrt(), abs(), round()) solution in Clear category for Similar Triangles by jakubbortlik
from itertools import combinations
from typing import List, Tuple
Coords = List[Tuple[int, int]]
def get_squared_sizes(coords) -> tuple:
"""Return sorted list of second powers of triangle side sizes."""
return sorted(
(x1 - x2) ** 2 + (y1 - y2) ** 2
for (x1, y1), (x2, y2) in combinations(coords, 2)
)
def similar_triangles(coords_1: Coords, coords_2: Coords) -> bool:
"""Return True if all ratios of pairs of sides in two triangles are the same."""
sizes1, sizes2 = get_squared_sizes(coords_1), get_squared_sizes(coords_2)
ratios = {a / b for a, b in zip(sizes1, sizes2)}
return len(ratios) == 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!")
Nov. 22, 2022
Comments: