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 matrices 2D aparecen tan a menudo que vale la pena reconocerlas por su nombre.
Suma cada celda: aplana la cuadrícula en un array unidimensional y llama a sum:
grid = [[1, 2], [3, 4]]
puts grid.flatten.sum # 10Diagonal 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, 9Transponer: Ruby incluye esta función. Las filas se convierten en columnas y viceversa:
matrix.transpose
# [[1, 4, 7], [2, 5, 8], [3, 6, 9]]Conocerlos por su nombre te evita reescribir los mismos bucles anidados.
Desafío
FácilSe proporciona la matrix cuadrada (n × n). Imprime tres líneas, todas derivadas de los patrones de la teoría:
Anti-diagonal sum: <n>, la suma de las celdas donder + c == matrix.length - 1Column sums: [...], la suma de cada columna. Pista: transpón primero, después asigna a cada fila su suma y, finalmente, usainspectSymmetric: trueofalse: ¿la matriz es igual a su propia transpuesta?
Para la matriz predeterminada, la salida es:
Anti-diagonal sum: 15
Column sums: [12, 15, 18]
Symmetric: falsePruébalo tú mismo
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
# TODO: anti-diagonal sum, column sums via transpose, symmetric check
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
1Cadenas en profundidad
Descripción general de los métodos de cadenasInterpolación de cadenasIteración sobre cadenasSeparar y unirRepaso: Tejedor de cadenas4Bloques, Procs y Lambdas
¿Qué es un bloque?do..end frente a llavesLa palabra clave yieldParámetros de bloqueProcs y LambdasRepaso: iterador personalizado7Hashes Parte 2
Hash.new con valores predeterminadosIteración de hashesHashes anidadosCombinación y transformaciónRepaso: contador de frecuencias10Proyecto - Registros de estudiantes
Descripción general del proyectoAgregar estudiante5Potencia Enumerable
Select y RejectEncadenamiento de MapReduce / Injectcount, all?, any?, none?group_by y partitionsort_by, min_by, max_byRepaso: canalización de datos3Matrices 2D
Fundamentos de matrices 2DAcceso a elementos 2DRecorrido de matrices 2DPatrones comunes en 2DRepaso - Operaciones con matrices6Proyecto - Gestor de biblioteca
Descripción general del proyectoAñadir libroPractica por tu cuenta: Compilador de Ruby online