Menu
Coddy logo textTech

Patrones comunes en 2D

Parte de la sección Lógica y flujo del Journey de Ruby de Coddy — lección 13 de 56.

Algunas operaciones con arreglos 2D aparecen con tanta frecuencia que vale la pena reconocerlas por su nombre.

Sumar cada celda: aplana la cuadrícula en un array unidimensional y llama a sum:

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

Diagonal principal: las celdas donde el índice de fila es igual al índice de columna (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

Transponer: Ruby tiene esto incorporado. Las filas se convierten en columnas y viceversa:

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

Conocer estos por su nombre te evita reescribir los mismos bucles anidados.

challenge icon

Desafío

Fácil

Se proporciona la matrix cuadrada (n × n). Imprime tres líneas, todas derivadas de los patrones de la teoría:

  1. Anti-diagonal sum: <n>, la suma de las celdas donde r + c == matrix.length - 1
  2. Column sums: [...], la suma de cada columna. Pista: primero transpón, luego mapea cada fila a su suma, después usa inspect
  3. Symmetric: true o false: ¿es la matriz igual a su propia transpuesta?

Para la matriz por defecto, la salida es:

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

Hoja de referencia

Operaciones comunes con arreglos bidimensionales en Ruby:

Sumar todas las celdas — aplanar y luego sumar:

grid.flatten.sum

Diagonal principal — celdas donde el índice de fila es igual al índice de columna (matrix[i][i]):

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

Anti-diagonal — celdas donde r + c == matrix.length - 1:

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

Transponer — las filas se convierten en columnas:

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

Sumas de columnas — transponer primero, luego sumar cada fila:

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

Comprobar simetría — comparar la matriz con su transpuesta:

matrix == matrix.transpose  # true o false

Pruébalo tú mismo

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

# TODO: suma de la diagonal secundaria, sumas de columnas mediante transposición, comprobación de simetría
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y flujo