Menu
Coddy logo textTech

Gängige 2D-Muster

Teil des Abschnitts Logik & Programmfluss der Ruby-Journey von Coddy — Lektion 13 von 56.

Einige 2D-Array-Operationen treten so häufig auf, dass es sich lohnt, sie namentlich zu kennen.

Jede Zelle summieren: Wandeln Sie das Gitter in ein 1D-Array um und rufen Sie sum auf:

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

Hauptdiagonale: die Zellen, bei denen der Zeilenindex dem Spaltenindex entspricht (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

Transponieren: Ruby hat dies bereits integriert. Zeilen werden zu Spalten und umgekehrt:

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

Diese beim Namen zu kennen, erspart Ihnen das erneute Schreiben derselben verschachtelten Schleifen.

challenge icon

Aufgabe

Einfach

Die quadratische matrix ist gegeben (n × n). Geben Sie drei Zeilen aus, die alle von den Mustern in der Theorie abgeleitet sind:

  1. Anti-diagonal sum: <n>, die Summe der Zellen, bei denen r + c == matrix.length - 1 gilt
  2. Column sums: [...], die Summe jeder Spalte. Hinweis: Zuerst transponieren, dann jede Zeile auf ihre Summe mappen, dann inspect
  3. Symmetric: true oder false: Ist die Matrix gleich ihrer eigenen Transponierten?

Für die Standard-Matrix lautet die Ausgabe:

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

Spickzettel

Gängige Operationen für 2D-Arrays in Ruby:

Alle Zellen summieren — erst glätten (flatten), dann summieren:

grid.flatten.sum

Hauptdiagonale — Zellen, bei denen der Zeilenindex dem Spaltenindex entspricht (matrix[i][i]):

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

Nebendiagonale (Anti-diagonal) — Zellen, bei denen r + c == matrix.length - 1 gilt:

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

Transponieren — Zeilen werden zu Spalten:

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

Spaltensummen — erst transponieren, dann jede Zeile summieren:

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

Symmetrie prüfen — Matrix mit ihrer Transponierten vergleichen:

matrix == matrix.transpose  # true or false

Probier es selbst

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

# TODO: Summe der Gegendiagonalen, Spaltensummen via Transponierung, Symmetrie-Prüfung
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Programmfluss