Проверка части нескольких массивов чисел на наличие чисел от 1 до 9
Дана матрица из целых чисел от 1 до 9, размером 3 * N, где N может быть больше либо равна 3. Необходимо определить содержит ли каждый участок матрицы 3 * 3 все числа от 1 до 9.
let array = [
[1, 2, 3, 2, 7],
[4, 5, 6, 8, 1],
[7, 8, 9, 4, 5]
];
Подскажите как это можно сделать
Ответы (1 шт):
Автор решения: vsemozhebuty
→ Ссылка
Можно попробовать так.
- Получаем индекс начала последней группы.
- Проходимся в цикле от
0до этого индекса. - В каждой итерации создаём из полной матрицы её участок из трёх элементов каждого ряда, а потом превращаем этот участок в линейный массив. Обе операции можно сделать сразу при помощи
Array.prototype.flatMap(). - После того, как мы получили массив из
9цифр, можно схитрить — превратить этот массив вSet. Если количество элементовSetвсё ещё будет равным9, значит все цифры были разные и участок проходит проверку. - Если встретили хоть один неправильный участок, сразу возвращаем
false. Иначе возвращаемtrueпосле цикла.
const array = [
[1, 2, 3, 2, 7],
[4, 5, 6, 8, 1],
[7, 8, 9, 4, 5]
];
function checkMatrix(matrix) {
const latGroupStart = matrix[0].length - 3;
for (let i = 0; i <= latGroupStart; i++) {
const section = matrix.flatMap(row => row.slice(i, i + 3));
const uniqueDigits = new Set(section);
if(uniqueDigits.size < 9) return false;
}
return true;
}
console.log(checkMatrix(array));