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 # 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 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.
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: primero transpón, luego mapea cada fila a su suma, después usainspectSymmetric: trueofalse: ¿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: falsePrué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
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
1Strings en profundidad
Visión general de los métodos de StringInterpolación de StringsIterar sobre StringsSplit y JoinRepaso - String Weaver4Bloques, Procs y Lambdas
¿Qué es un bloque?do..end vs llavesLa palabra clave yieldParámetros de bloqueProcs y LambdasResumen - Iterador personalizado7Hashes Parte 2
Hash.new con valores por defectoIteración de HashesHashes anidadosFusión y transformaciónResumen - Contador de frecuencia10Proyecto - Registros de Estudiantes
Descripción general del proyectoAgregar estudiante5Potencia de Enumerable
Select y RejectEncadenando MapReduce / Injectcount, all?, any?, none?group_by y partitionsort_by, min_by, max_byResumen - Data Pipeline3Arreglos 2D
Conceptos básicos de arreglos 2DAcceso a elementos 2DIteración sobre arreglos 2DPatrones comunes en 2DResumen - Operaciones con matrices6Proyecto - Gestor de biblioteca
Descripción general del proyectoAñadir libroPractica por tu cuenta: Compilador de Ruby online