Возвращение в исходную точку
Задача:
Метеозонд отправляет данные с его смещениями по
X
и
Y
за последние
N
минут (
N
≥
1
). За минуту зонд может сместиться на +/-1 по каждой координате или остаться на месте.
Аппаратура зонда сломалась и отправляет все значения координат без знаков (’+’ или ’-’). Проверьте существование комбинации знаков, для которых зонд вернулся на свое начальное положение.
На вход данные передаются как массив из
N
смещений. Каждое смещение имеет формат:
[<diff_X>, <diff_Y>] Ваша функция должна вернуть модифицированный массив смещений со знаками, для которых зонд вернулся в начальное положение, или null, если такой комбинации не существует.
Формат ввода:
[
[1, 0],
[0, 1],
[1, 1]
]
Формат вывода:
[
[-1, 0],
[0, -1],
[1, 1]
]
Я написал такую функцию, но из 10 тестов, 2 пройдены неверно (остальные 8 верно), не знаю, что я сделал не так
function zond(arr) {
const diffs = arr;
const xArr = diffs.map(item => item[0]);
const yArr = diffs.map(item => item[1]);
const sumX = xArr.reduce((prev, item) => prev + item, 0);
const sumY = yArr.reduce((prev, item) => prev + item, 0);
if (!(sumX % 2 === 0 && sumY % 2 === 0)) return null;
let minusX = sumX / 2;
let minusY = sumX / 2;
for (let i = 0; i < diffs.length; i++) {
if (diffs[i][0] !== 0 && minusX !== 0) {
diffs[i][0] = -1 * diffs[i][0];
minusX--;
}
if (diffs[i][1] !== 0 && minusY !== 0) {
diffs[i][1] = -1 * diffs[i][1];
minusY--;
}
}
return diffs;
}
Ответы (1 шт):
var a = [
[1, 0],
[0, 1],
[1, 1]
]
var dx = 0, dy = 0
for (var d of a) {
if (d[0]) {
if (dx) {
d[0] = -1
dx = 0
} else {
dx = 1
}
}
if (d[1]) {
if (dy) {
d[1] = -1
dy = 0
} else {
dy = 1
}
}
}
console.log(dx || dy ? null : a)
.as-console-wrapper.as-console-wrapper { max-height: 100vh }