Проблема в многомерном массиве в JavaScript - PullRequest
0 голосов
/ 05 января 2019

У меня есть многомерный массив, который имеет только 0 и 1 в качестве значений. Я хочу найти количество случаев, когда значение 1 находится в линейной паре.

Пример: Ниже приведена матрица (представьте ее как многомерный массив в javascript):

1 0 1 0 0
1 0 0 0 0
1 0 1 1 1
0 0 1 0 0

И вывод, который я хочу, - это общее количество нет. вхождений линейной пары 1 по горизонтали и вертикали (не смежно):

В этом случае выходные данные: 3 (один в первом столбце первых 3 строк. Второй - третий столбец последних двух строк. И последний - последние три столбца в третьей строке).

Любое решение или идея будет работать. Не стесняйтесь использовать любой язык программирования, если вас не устраивает javascript.

1 Ответ

0 голосов
/ 05 января 2019

Просто проверьте предшественника с ложным значением предшественника с истинным значением и посчитайте в обоих направлениях.

Это работает, ища образец как 0 1 1, где последний элемент - это фактическая позиция, обозначенная [], это должно быть правдой. Предшественник, обозначенный (), также должен быть правдивым. Последний элемент, обозначенный {}, является необходимым разделителем и должен быть ложным для подсчета начального шаблона.

По сути, вышеприведенная схема состоит в том, чтобы находить и считать в обоих направлениях.

Вертикальная

 {u} 
+---------------+
|(1) 0  1  0  0 |
|               |
|[1] 0 {0} 0  0 |
|               |
| 1  0 (1) 1  1 |
|               |
| 0  0 [1] 0  0 |
+---------------+

Горизонтальное

+---------------+
| 1  0  1  0  0 |
|               |
| 1  0  0  0  0 |
|               |
| 1 {0}(1)[1] 1 |
|               |
| 0  0  1  0  0 |
+---------------+

u означает undefind и не является частью матрицы

var matrix = [[1, 0, 1, 0, 0], [1, 0, 0, 0, 0], [1, 0, 1, 1, 1], [0, 0, 1, 0, 0]],
    count = 0;

matrix.forEach((row, i, m) =>
    row.forEach((v, j, r) => {
        if (!v) return;
        if (m[i - 1] && m[i - 1][j] && (!m[i - 2] || !m[i - 2][j])) ++count;
        if (r[j - 1] && !r[j - 2]) ++count;
    })
);

console.log(count);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...