Menu
Coddy logo textTech

Yaygın 2D Kalıplar

Coddy'nin Ruby Journey'sinin Mantık ve Akış bölümünün bir parçası — ders 13 / 56.

Bazı 2D dizi işlemleri o kadar sık karşımıza çıkar ki, onları isimleriyle tanımaya değer.

Her hücreyi topla: ızgarayı tek boyutlu (1D) bir diziye düzleştirin ve sum metodunu çağırın:

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

Ana köşegen: satır dizininin sütun dizinine eşit olduğu hücreler (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

Transpoze: Ruby'de bu özellik yerleşik olarak bulunur. Satırlar sütun, sütunlar ise satır olur:

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

Bunları isimleriyle bilmek, sizi aynı iç içe döngüleri tekrar yazmaktan kurtarır.

challenge icon

Görev

Kolay

Kare matrix (n × n) verilmiştir. Teorideki desenlerden türetilen üç satır yazdırın:

  1. Anti-diagonal sum: <n>, r + c == matrix.length - 1 olan hücrelerin toplamı
  2. Column sums: [...], her sütunun toplamı. İpucu: önce transpose işlemini yapın, ardından her satırı kendi toplamına eşleyin (map), sonra inspect kullanın
  3. Symmetric: true veya false: matris kendi transpozuna eşit mi?

Varsayılan matris için çıktı şöyledir:

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

Kopya kağıdı

Ruby'de yaygın 2 boyutlu dizi işlemleri:

Tüm hücreleri topla — düzleştirin ve ardından toplayın:

grid.flatten.sum

Ana köşegen — satır dizininin sütun dizinine eşit olduğu hücreler (matrix[i][i]):

(0...matrix.length).each { |i| puts matrix[i][i] }
# i == 0: matrix[0][0], i == 1: matrix[1][1], ...

Ters köşegenr + c == matrix.length - 1 olan hücreler:

(0...matrix.length).each { |i| puts matrix[i][matrix.length - 1 - i] }

Transpoz — satırlar sütun olur:

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

Sütun toplamları — önce transpozunu alın, ardından her satırı toplayın:

matrix.transpose.map(&:sum)  # [col0_sum, col1_sum, ...]

Simetriyi kontrol et — matrisi transpozuyla karşılaştırın:

matrix == matrix.transpose  # true veya false

Kendin dene

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

# YAPILACAKLAR: ters köşegen toplamı, transpoz yoluyla sütun toplamları, simetri kontrolü
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Mantık ve Akış bölümündeki tüm dersler