Поиск подматрицы
Матрицу A мы назавем "десятичной ", если после удаления каждой строки и столбца i, в полученной подматрице сумма элементов больше или равно 10 -и.
Например
A = [
[2, 4, 6],
[2, 2, 2],
[4, 8, 8]
]
Нужно написать функцию которая получает матрицу и возвращает true если она "десятичная " и false в обратном случае.
function matrixElementsSum(matrix) {
var res = 0;
for (var i = 0; i < matrix[0].length; i++) {
for (var j = 0; j < matrix.length; j++) {
if (matrix[j][i] === 0) {
break;
}
res += matrix[j][i];
}
}
return res;
}
function solution(a) {
let res = 0;
if (matrixElementsSum(a) > 10) {
res = true;
} else {
res = false;
}
return res
}
console.log(decimalSubMatrix([[2, 4, 6],[2, 2, 2],[4, 8, 8]])) // true
console.log(decimalSubMatrix([[1, 1, 1],[1, 1, 1],[1, 2, 1]])) // false
console.log(decimalSubMatrix([[4, 6, 8, 1],[2, 3, 5, 6],[1, 2, 8, 1], [9, 1, 0, 3]])) // true
console.log(decimalSubMatrix([[1, 0, 0], [0, 1, 0], [0, 0, 1]])) // false
console.log(decimalSubMatrix([[1, 1, 3], [1, 1, 1], [2, 2, 1]])) // true но должен возврощать false
Поможете решить задачу?
Ответы (1 шт):
Автор решения: Eugene Kuznetsov
→ Ссылка
Я вижу это вот, так, могу расписать поподробнее, если что-то непонятно будет.
const exampleArr1 = [
[2, 4, 6],
[2, 2, 2],
[4, 8, 8],
];
const exampleArr2 = [
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
];
const exampleArr3 = [
[4, 6, 8, 1],
[2, 3, 5, 6],
[1, 2, 8, 1],
[9, 1, 0, 3]
];
const exampleArr4 = [
[1, 1, 1],
[1, 1, 1],
[1, 2, 1]
];
function toPrematrix(array, index) {
// преобразовываем к подматрице
// принимает первым аргументом массив и индекс строки и столбцы который нужно убрать
const returnarr = [];
for (let i = 0; i < array.length; i += 1) {
if (i !== index) {
const preArr = [];
if (Array.isArray(array[i])) {
for (let j = 0; j < array[i].length; j += 1) {
if (j !== index) {
preArr.push(array[i][j]);
}
}
}
returnarr.push(preArr);
}
}
return returnarr;
}
const isMoreThanTenMatrix = (matrix) => {
// передаем получившуюся подматрицу и её анализируем
const toOneLevelArray = (arr) => arr.reduce((accum, currentVal) => accum.concat(Array.isArray(currentVal) ? toOneLevelArray(currentVal) : currentVal), []);
const reducer = (accumulator, currentValue) => accumulator + currentValue;
const oneLevelArr = toOneLevelArray(matrix);
const summOfelements = oneLevelArr.reduce(reducer);
if (summOfelements >= 10) {
return true;
}
return false;
};
console.log(isMoreThanTenMatrix(toPrematrix(exampleArr1, 0)));
console.log(isMoreThanTenMatrix(toPrematrix(exampleArr2, 0)));
console.log(isMoreThanTenMatrix(toPrematrix(exampleArr3, 0)));
console.log(isMoreThanTenMatrix(toPrematrix(exampleArr4, 0)));