Sobes.tech
Middle+
47

Python-ի առաջադրանք՝ որոշել, արդյոք տվյալ կետերի ցանկի համար գոյություն ունի ուղղահայեակ սիմետրիայի գիծ

Ընկերությունները, որտեղ հարցրել են
X5

Պատասխան AI-ից

sobes.tech AI

Чтобы определить, существует ли вертикальная ось симметрии для заданного списка точек на плоскости, нужно проверить, можно ли провести вертикальную линию, относительно которой все точки симметричны.

Идея решения:

  1. Найти минимальное и максимальное значение x среди точек.
  2. Вычислить потенциальную ось симметрии как axis = (min_x + max_x) / 2.
  3. Для каждой точки проверить, есть ли точка с зеркальной координатой относительно оси: если точка (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

Этот метод работает для множества точек и проверяет симметрию относительно вертикальной оси.