Булевая Матрица
Есть булевая матрица элементы, которой являются множеством из true и false. Нужно переоброзавать матрицу в матрицу чисел так, чтобы элемент [i, j] в своих соседних полях показал количество полей, которые имеют значение true.
Например
A = [
[true, false, false],
[false, true, false],
[false, false, false]
];
В случае матрицы A, мы получим.
A = [
[1, 2, 1],
[2, 1, 1],
[1, 1, 1]
]
Нужно написать функцию который получает булевую матрицу и возвращает переоброзованную матрицу.
function bool(A) {
A = A.map((col, i) => A.map(row => +row[i]));
let counter = 0;
for (let i = 0; i < A.length; i++) {
for (let j = 0; j < A[i].length; j++) {
if (A[i][j] == 1) {
counter++;
}
if (A[i][j - 1] == 0 || A[i][j + 1] == 0) {
A[i][j] = counter;
}
}
}
return A
}
console.log(bool([[true, false, false],[false, true, false],[false, false, false]]));
// Должен выводится [[1, 2, 1], [2, 1, 1], [1, 1, 1]]
console.log(bool([[false, false, false],[false, false, false]]));
// Должен выводится [[0, 0, 0], [0, 0, 0]])
console.log(bool[[true, false, false, true],[false, false, true, false], [true, true, false, true]]));
// Должен выводится [[0, 2, 2, 1], [3, 4, 3, 3], [1, 2, 3, 1]]
console.log(bool[[true, false, false, true],[false, true, false, true], [false, false, false, true]]));
// Должен выводится [[1, 2, 3, 1], [2, 1, 4, 2], [1, 1, 3, 1]]
Помогите пожулйста верно втсавить условия и решить задачу...
Ответы (2 шт):
Автор решения: Igor
→ Ссылка
var A = [
[true, false, false],
[false, true, false],
[false, false, false]
];
/*[ [1, 2, 1],
[2, 1, 1],
[1, 1, 1] ]*/
function bool(A) {
let res = [];
for (let i = 0; i < A.length; i++) {
res.push([]);
for (let j = 0; j < A[i].length; j++) {
// check 8 entries of the 3x3 matrix around the current element A[i][j]
let v = 0;
for (let i1 = i - 1; i1 <= i + 1; i1++)
for (let j1 = j - 1; j1 <= j + 1; j1++)
if ((i1 != i || j1 != j) && A[i1] && A[i1][j1])
v++;
res[res.length - 1].push(v);
}
}
return res;
}
console.log(bool(A));
Автор решения: Stranger in the Q
→ Ссылка
У меня вот что получилось:
let bool = [
[true, false, false],
[false, true, false],
[false, false, false]
];
let kernel = [0,1,2,3,5,6,7,8];
let calc = (x, y, i) => {
let row = bool[y + parseInt(i / 3) - 1];
return row && row[x + i % 3 - 1];
};
let result = bool.map((row,y) => row.map((_,x) =>
kernel.map(i => calc(x,y,i))
.reduce((a,v) => (v||0)+a,0)));
console.log(JSON.stringify(result))