Patrones comunes de arrays 2D
Parte de la sección Lógica y flujo del Journey de GDScript de Coddy. Lección 17 de 78.
Algunas formas de recorrer una cuadrícula aparecen una y otra vez. Estos ejemplos usan una cuadrícula cuadrada de tamaño n:
var grid := [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
var n := grid.size()Diagonales. En la diagonal principal, el índice de fila es igual al índice de columna: grid[i][i]. En la diagonal secundaria, desde la esquina superior derecha hasta la esquina inferior izquierda, la columna es n - 1 - i. Basta con un bucle:
for i in range(n):
print(grid[i][i], " ", grid[i][n - 1 - i])1 3
5 5
9 7Filas, columnas y bordes. Fija un índice y recorre el otro. La fila superior es grid[0] y la fila inferior es grid[n - 1]. Una columna mantiene fijo c mientras cambia la fila:
var left_total := 0
for r in range(n):
left_total += grid[r][0] # columna izquierda: 1 + 4 + 7
print(left_total) # 12Vecinos. En los juegos de cuadrícula, a menudo miras las celdas alrededor de una posición: arriba, abajo, a la izquierda y a la derecha. Guarda los cuatro pasos como un array de pares [row, column] y omite los pasos que salen de la cuadrícula:
var r := 0
var c := 1
for step in [[-1, 0], [1, 0], [0, -1], [0, 1]]:
var nr: int = r + step[0]
var nc: int = c + step[1]
if nr >= 0 and nr < n and nc >= 0 and nc < n:
print(grid[nr][nc])La celda grid[0][1] está en el borde superior, así que tiene 3 vecinos: 5, 1 y 3.
Desafío
FácilEscribe una función llamada print_patterns con un parámetro, grid: una matriz 2D cuadrada de enteros (declárala como grid: Array). Imprime seis líneas, con los valores separados por espacios individuales:
Main diagonal:y las celdas donde el índice de fila es igual al índice de columnaAnti-diagonal:y las celdas desde la esquina superior derecha hasta la esquina inferior izquierdaTop row:y la primera filaBottom row:y la última filaLeft column:y la primera columna, de arriba abajoRight column:y la última columna, de arriba abajo
Para la cuadrícula [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]], la salida es:
Main diagonal: 1 6 11 16
Anti-diagonal: 4 7 10 13
Top row: 1 2 3 4
Bottom row: 13 14 15 16
Left column: 1 5 9 13
Right column: 4 8 12 16Las pruebas llaman a print_patterns() por su cuenta. No la llames ni devuelvas nada.
Pruébalo tú mismo
func print_patterns(grid: Array):
# Escribe el código aquí
pass
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 de texto en profundidad
Métodos de cadenasBúsqueda en cadenasReemplazar y eliminar espaciosDividir y unirRepaso - Comprobación del nombre de usuario4Diccionarios, parte 2
Diccionarios anidadosArrays de diccionariosCombinar diccionariosCopiar diccionariosRepaso: contador de frecuencias7Enumeraciones
¿Qué es una enumeración?Definir una enumeraciónValores de una enumeraciónEnumeraciones en matchRepaso: semáforo10Funciones avanzadas
Devolver múltiples valoresFunciones lambda, parte 1Funciones lambda, parte 2Repaso: ordenar con lambdaFunciones recursivas, parte 1Funciones recursivas, parte 2Repaso: sumar un array anidado13Sistema de gestión de inventario
Descripción general del proyectoAñadir artículo2Toma de decisiones avanzada
Coincidencia con variablesGuardas de coincidenciaPatrones de arraysPatrones de diccionariosComprobaciones de pertenenciaRepaso: analizador de comandos5Aplicación de agenda de contactos
Mostrar menúAñadir contacto8Gestor de expedientes estudiantiles
Descripción del proyectoAgregar estudiante3Arrays multidimensionales
Conceptos básicos de arrays 2DAcceso a elementos de arrays 2DBucles anidados con arrays 2DRepaso: arrays 2DArrays irregularesPatrones comunes de arrays 2DRepaso: tablero de juego6Conjuntos con diccionarios
¿Qué es un conjunto?El diccionario como conjuntoAñadir y eliminarUnión e intersecciónDiferencia de conjuntosRepaso: eliminar duplicados9Agregación avanzada de datos
Suma de valoresCómo encontrar el mínimo y el máximoOrdenación personalizadaRepaso: organizador de diccionariosPractica por tu cuenta: Compilador de GDScript online