Middle+
46
Python'i ülesanne: määrata, kas antud punktide nimekirja jaoks on vertikaalne sümmeetriatelg
Ettevõtted, kust küsiti
X5
Vastus AI-lt
sobes.tech AI
Чтобы определить, существует ли вертикальная ось симметрии для заданного списка точек на плоскости, нужно проверить, можно ли провести вертикальную линию, относительно которой все точки симметричны.
Идея решения:
- Найти минимальное и максимальное значение x среди точек.
- Вычислить потенциальную ось симметрии как
axis = (min_x + max_x) / 2. - Для каждой точки проверить, есть ли точка с зеркальной координатой относительно оси: если точка
(x, y), то должна существовать точка(2*axis - x, y).
Пример кода на Python:
from collections import defaultdict
def has_vertical_symmetry(points):
points_set = set(points)
xs = [x for x, y in points]
min_x, max_x = min(xs), max(xs)
axis = (min_x + max_x) / 2
for x, y in points:
mirrored = (2*axis - x, y)
if mirrored not in points_set:
return False
return True
# Пример использования
points = [(1,1), (3,1), (2,2)]
print(has_vertical_symmetry(points)) # False
points = [(1,1), (3,1), (2,2), (2,2)]
print(has_vertical_symmetry(points)) # True
Этот метод работает для множества точек и проверяет симметрию относительно вертикальной оси.