Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
float accuracy problem solution in Clear category for Similar Triangles by oleg.sidorov.ds
from typing import List, Tuple
Coords = List[Tuple[int, int]]
def similar_triangles(coords_1, coords_2):
side_len = lambda a, b: ((a[0] - b[0]) ** 2 + (a[1] - b[1]) ** 2) ** 0.5
sides_1 = sorted(
[side_len(coords_1[0], coords_1[1]), side_len(coords_1[0], coords_1[2]), side_len(coords_1[2], coords_1[1])]
)
sides_2 = sorted(
[side_len(coords_2[0], coords_2[1]), side_len(coords_2[0], coords_2[2]), side_len(coords_2[2], coords_2[1])]
)
ratio_1 = {
round(sides_1[0] / sides_1[1], 5),
round(sides_1[0] / sides_1[2], 5),
round(sides_1[2] / sides_1[1], 5)
}
ratio_2 = {
round(sides_2[0] / sides_2[1], 5),
round(sides_2[0] / sides_2[2], 5),
round(sides_2[2] / sides_2[1], 5)
}
print(ratio_1, ratio_2)
return ratio_1 == ratio_2
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!")
Sept. 2, 2023
Comments: