Menu
Coddy logo textTech

Modèles 2D courants

Fait partie de la section Logique et Flux du Journey Ruby de Coddy — leçon 13 sur 56.

Certaines opérations sur les tableaux 2D reviennent si souvent qu'il vaut la peine de les reconnaître par leur nom.

Sommer chaque cellule : aplatissez la grille en un tableau 1D et appelez sum :

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

Diagonale principale : les cellules où l'indice de ligne est égal à l'indice de colonne (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

Transposer : Ruby intègre déjà cette fonctionnalité. Les lignes deviennent des colonnes et vice-versa :

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

Les connaître par leur nom vous évite de réécrire les mêmes boucles imbriquées.

challenge icon

Défi

Facile

La matrix carrée est donnée (n × n). Affichez trois lignes, toutes dérivées des modèles de la théorie :

  1. Anti-diagonal sum: <n>, la somme des cellules où r + c == matrix.length - 1
  2. Column sums: [...], la somme de chaque colonne. Astuce : transposez d'abord, puis mappez chaque ligne à sa somme, puis utilisez inspect
  3. Symmetric: true ou false : la matrice est-elle égale à sa propre transposée ?

Pour la matrice par défaut, la sortie est :

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

Aide-mémoire

Opérations courantes sur les tableaux 2D en Ruby :

Somme de toutes les cellules — aplatir puis additionner :

grid.flatten.sum

Diagonale principale — cellules où l'index de ligne est égal à l'index de colonne (matrix[i][i]) :

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

Anti-diagonale — cellules où r + c == matrix.length - 1 :

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

Transposition — les lignes deviennent des colonnes :

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

Sommes des colonnes — transposer d'abord, puis additionner chaque ligne :

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

Vérifier la symétrie — comparer la matrice à sa transposée :

matrix == matrix.transpose  # true or false

Essayez vous-même

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

# TODO : somme de l'anti-diagonale, sommes des colonnes via la transposée, vérification de la symétrie
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Logique et Flux