Middle
/** * მოცემულია მთელი რიცხვებით წარმოდგენილი წერტილების მასივი (x, y). * განსაზღვრეთ, არსებობს თუ არა ვერტიკალური სწორი, * რომელიც ნაწილებს წერტილებს ორ სითმეტრიულ ჯგუფად ამ სწორის მიმართ: * შენიშვნა: მოსახერხებლობისთვის, წერტილი შეიძლება წარმოდგენილი იყოს არა როგორც მასივი [x, y], არამედ როგორც ობიექტი {x, y} */ isVertSym([[0, 0], [0, 0], [1, 1], [2, 2], [3, 1], [4, 0], [4, 0]]) // ჭეშმარიტი isVertSym([[0, 0], [0, 0], [1, 1], [2, 2], [3, 1], [4, 0]]) // მცდარი isVertSym([]) // ჭეშმარიტი isVertSym([[0, 0]]) // ჭეშმარიტი isVertSym([[0, 0], [10, 0]]) // ჭეშმარიტი isVertSym([[0, 0], [11, 1]]) // მცდარი isVertSym([[0, 0], [1, 0], [3, 0]]) // მცდარი function isVertSym(list) { // კოდი აქ }
sobes.tech AI
პასუხი AI-სგან
Для проверки, существует ли вертикальная ось симметрии, можно:
- Найти минимальное и максимальное значение x среди точек.
- Вычислить потенциальную ось симметрии как
mid = (minX + maxX) / 2. - Для каждой точки проверить, существует ли зеркальная точка относительно этой оси.
Для удобства можно использовать структуру данных, например, Map или Set, чтобы быстро проверять наличие зеркальных точек.
Пример реализации на JavaScript:
function isVertSym(points) {
if (points.length <= 1) return true;
let minX = Infinity, maxX = -Infinity;
const pointSet = new Set();
for (const [x, y] of points) {
minX = Math.min(minX, x);
maxX = Math.max(maxX, x);
pointSet.add(`${x},${y}`);
}
const mid = (minX + maxX) / 2;
for (const [x, y] of points) {
const mirroredX = 2 * mid - x;
if (!pointSet.has(`${mirroredX},${y}`)) {
return false;
}
}
return true;
}
Этот код проверяет, что для каждой точки существует зеркальная точка относительно вертикальной линии x = mid. Если для всех точек это условие выполняется, функция возвращает true, иначе — false.