Menu
Coddy logo textTech

Распространенные паттерны 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)

challenge icon

Задание

Легко

Создайте функцию с именем printPatterns, которая принимает квадратный двумерный массив целых чисел (matrix) в качестве входных данных и выводит следующие паттерны:

  1. Главная диагональ: Выведите все элементы, у которых индекс строки равен индексу столбца.
  2. Побочная диагональ: Выведите все элементы, у которых сумма индексов строки и столбца равна размеру матрицы минус 1.
  3. Границы: Выведите элементы верхней, нижней, левой и правой границ матрицы.

Вывод должен выглядеть следующим образом:

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(" "));
}
// Не пишите ничего вне функции
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и поток