JavaScript - Целевые индексы в столбце многомерного массива ниже указанного c index - PullRequest
1 голос
/ 01 марта 2020

Я пытаюсь выполнить задачу в аркаде CodeSignal, которая принимает многомерный массив с целочисленными значениями и добавляет значение этих индексов. Если индекс = 0, мне нужно игнорировать этот индекс и все индексы ниже указанного индекса c. Например:

array = [
[0, 1, 2],
[1, 0, 3],
[3, 1, 0]
];

У меня проблемы с таргетингом на все индексы в COLUMN, начиная с индекса со значением 0. С этим массивом я должен получить вывод 6. Вот что Пока у меня есть:

function matrixElementsSum(matrix) {
const checkHaunt = []; 
    for (let c = 0; c < matrix.length; c++) {
        // console.log(`Matrix: ${matrix[c]}`)
        for (let i = 0; i < matrix[c].length; i++) {
            // console.log(`index: ${matrix[c][i]}`)
            if (matrix[c][i] != 0 && c == 0) {
                checkHaunt.push(matrix[c][i]);
            }
            else if (matrix[c][i] != 0 && matrix[c-1][i] != 0) {
                checkHaunt.push(matrix[c][i]);
            }
        }
    }
    return checkHaunt.reduce((a, b) => a + b, 0);
}

Сначала я думал, что мне нужно игнорировать любые индексы непосредственно ниже значения 0, но я неправильно прочитал инструкции. С этим кодом я бы получил вывод 9 с вышеуказанным массивом.

Будем весьма благодарны за любые предложения по добавлению кода для целевых индексов, которые мне нужны.

1 Ответ

0 голосов
/ 01 марта 2020

Если я правильно понимаю ваши требования, я бы использовал немного другой подход - отслеживайте столбцы, содержащие ноль, по мере их появления; иначе добавьте к переменной суммы:

const array = [
  [0, 1, 2],
  [1, 0, 3],
  [3, 1, 0]
];

function matrixElementsSum(matrix) {
  let sum = 0;
  const zeroCols = new Set();

  matrix.forEach(row => {
    row.forEach((val, i) => {
      if (val === 0) {
        zeroCols.add(i);
      } else if (!zeroCols.has(i)) {
        sum += val;
      }
    });
  });

  return sum;
}

console.log(matrixElementsSum(array));
>>> 6
...