Возвращение в исходную точку

Задача:
Метеозонд отправляет данные с его смещениями по 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 шт):

Автор решения: Qwertiy

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 }

→ Ссылка