Menu
Coddy logo textTech

Typowe wzorce 2D

Część sekcji Logika i przepływ programu ścieżki Ruby w Coddy. Lekcja 13 z 56.

Niektóre operacje na tablicach 2D pojawiają się tak często, że warto rozpoznawać je po nazwie.

Zsumuj każdą komórkę: spłaszcz siatkę do tablicy 1D i wywołaj sum:

grid = [[1, 2], [3, 4]]
puts grid.flatten.sum  # 10

Przekątna główna: komórki, w których indeks wiersza jest równy indeksowi kolumny (matrix[i][i]):

matrix = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
]

(0...matrix.length).each do |i|
  puts matrix[i][i]
end
# 1, 5, 9

Transponowanie: Ruby ma tę funkcję wbudowaną. Wiersze stają się kolumnami i odwrotnie:

matrix.transpose
# [[1, 4, 7], [2, 5, 8], [3, 6, 9]]

Znajomość ich nazw pozwala uniknąć ponownego zapisywania tych samych zagnieżdżonych pętli.

challenge icon

Wyzwanie

Łatwy

Dana jest kwadratowa macierz matrix (n × n). Wypisz trzy wiersze, wszystkie wynikające ze wzorców omówionych w teorii:

  1. Anti-diagonal sum: <n>, suma komórek, dla których r + c == matrix.length - 1
  2. Column sums: [...], suma każdej kolumny. Podpowiedź: najpierw wykonaj transpozycję, następnie przekształć każdy wiersz na jego sumę, a potem użyj inspect
  3. Symmetric: true lub false: czy macierz jest równa swojej transpozycji?

Dla domyślnej macierzy wynik to:

Anti-diagonal sum: 15
Column sums: [12, 15, 18]
Symmetric: false

Spróbuj swoich sił

matrix = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
]

# TODO: suma przekątnej przeciwnej, sumy kolumn za pomocą transpozycji, sprawdzenie symetrii
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Logika i przepływ programu

Poćwicz samodzielnie: Kompilator Ruby online