Распространенные паттерны 2D массивов
Часть раздела Логика и поток путешествия по JavaScript на Coddy — урок 13 из 65.
При работе с двумерными массивами часто встречаются определенные паттерны. Распознавание этих паттернов поможет вам решать задачи более эффективно. Вот несколько распространенных паттернов:
Диагональный обход
Доступ к элементам, где индекс строки равен индексу столбца (matrix[i][i]), дает вам главную диагональ. Для побочной диагонали сумма индексов строки и столбца равна размеру массива минус 1 (matrix[i][size - 1 - i]).
Например:
1 2 3
4 5 6
7 8 9Обход по главной диагонали (matrix[i][i]): 1, 5, 9
Обход по побочной диагонали (matrix[i][size - 1 - i]): 3, 5, 7
Обход границ
Для обхода граничных элементов вы оставляете один индекс постоянным (0 или size - 1), перебирая другой.
Для доступа к верхней границе вы перебираете столбцы, при этом индекс строки зафиксирован на 0.
Например:
1 2 3 4
5 6 7 8
9 10 11 12граничные элементы: 1, 2, 3, 4, 8, 12, 11, 10, 9, 5 (все, кроме 6 и 7)
Задание
ЛегкоСоздайте функцию с именем printPatterns, которая принимает квадратный двумерный массив целых чисел (matrix) в качестве входных данных и выводит следующие паттерны:
- Главная диагональ: Выведите все элементы, у которых индекс строки равен индексу столбца.
- Побочная диагональ: Выведите все элементы, у которых сумма индексов строки и столбца равна размеру матрицы минус 1.
- Границы: Выведите элементы верхней, нижней, левой и правой границ матрицы.
Вывод должен выглядеть следующим образом:
Main Diagonal: 1 6 11 16
Anti-Diagonal: 4 7 10 13
Top Border: 1 2 3 4
Bottom Border: 13 14 15 16
Left Border: 1 5 9 13
Right Border: 4 8 12 16Шпаргалка
Распространенные паттерны обхода двумерных массивов:
Диагональный обход
Главная диагональ: matrix[i][i] (индекс строки равен индексу столбца)
Побочная диагональ: matrix[i][size - 1 - i] (сумма индексов строки и столбца равна size - 1)
1 2 3
4 5 6
7 8 9Главная диагональ: 1, 5, 9
Побочная диагональ: 3, 5, 7
Обход границ
Оставляйте один индекс неизменным (0 или size - 1), итерируя по другому:
- Верхняя граница: индекс строки = 0, итерация по столбцам
- Нижняя граница: индекс строки = size - 1, итерация по столбцам
- Левая граница: индекс столбца = 0, итерация по строкам
- Правая граница: индекс столбца = size - 1, итерация по строкам
Попробуйте сами
function printPatterns(matrix) {
let mainDiagonal = []
// TODO: Реализовать
console.log("Main Diagonal:", mainDiagonal.join(" "));
let antiDiagonal = [];
// TODO: Реализовать
console.log("Anti-Diagonal:", antiDiagonal.join(" "));
let topBorder = [];
// TODO: Реализовать
console.log("Top Border:", topBorder.join(" "));
let bottomBorder = [];
// TODO: Реализовать
console.log("Bottom Border:", bottomBorder.join(" "));
let leftBorder = [];
// TODO: Реализовать
console.log("Left Border:", leftBorder.join(" "));
let rightBorder = [];
// TODO: Реализовать
console.log("Right Border:", rightBorder.join(" "));
}
// Не пишите ничего вне функцииВ этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и поток
1Строки в деталях
Основы работы со строкамиИтерация по строкамШаблонные литералыМетоды строкИтоги — String Weaver4JSON Часть 2
Итерация по JSONВложенный JSONОпциональная цепочка JSONПоверхностное и глубокое копированиеПовторение — Магазин велосипедовПовторение — Солнечная система7Система управления библиотекой
Обзор проектаДобавление книг10Управление системой фестиваля
Обзор проектаДобавление фильмов и площадок2Многомерные массивы
Основы 2D массивовДоступ к элементам 2D массиваВложенные циклы и 2D массивыПовторение: 2D массивыСложение и вычитание матрицСтупенчатые массивы3D массивы и далееРаспространенные паттерны 2D массивовПовторение: всё о массивах5Множества. Часть 1
Что такое множество?Итерация по множествамДобавление элементаУдаление элементаПроверка наличия элементаРазмер и проверка на пустотуКопирование и очисткаИтоги — Основы множеств8Интересные темы о массивах
Деструктуризация массивовСинтаксис Spread в массивахРазреженные массивыИтоги — Воркшоп по массивам3JSON. Часть 1
Что такое JSON?Проверка наличия ключаМетоды объектовОператор spread. Часть 1Оператор spread. Часть 2Удаление ключейПовторение: манипуляции с ключами JSON