Menu
CoddyTech

Padrões comuns de arrays 2D

Parte da seção Lógica e fluxo do Journey de GDScript da Coddy. Lição 17 de 78.

Algumas formas de percorrer uma grade aparecem repetidamente. Estes exemplos usam uma grade quadrada de tamanho n:

var grid := [
	[1, 2, 3],
	[4, 5, 6],
	[7, 8, 9]
]
var n := grid.size()

Diagonais. Na diagonal principal, o índice da linha é igual ao índice da coluna: grid[i][i]. Na diagonal secundária, do canto superior direito ao canto inferior esquerdo, a coluna é n - 1 - i. Um loop é suficiente:

for i in range(n):
	print(grid[i][i], " ", grid[i][n - 1 - i])
1 3
5 5
9 7

Linhas, colunas e bordas. Fixe um índice e percorra o outro. A linha superior é grid[0] e a linha inferior é grid[n - 1]. Uma coluna mantém c fixo enquanto a linha muda:

var left_total := 0
for r in range(n):
	left_total += grid[r][0] # coluna da esquerda: 1 + 4 + 7
print(left_total) # 12

Vizinhos. Em jogos de grade, muitas vezes você observa as células ao redor de uma posição: acima, abaixo, à esquerda e à direita. Armazene os quatro passos como um array de pares [row, column] e ignore os passos que saem da grade:

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])

A célula grid[0][1] está na borda superior, então tem 3 vizinhos: 5, 1 e 3.

challenge icon

Desafio

Fácil

Escreva uma função chamada print_patterns com um parâmetro, grid: uma matriz 2D quadrada de inteiros (declare-a como grid: Array). Ela imprime seis linhas, com os valores separados por espaços simples:

  1. Main diagonal: e as células em que o índice da linha é igual ao índice da coluna
  2. Anti-diagonal: e as células do canto superior direito ao canto inferior esquerdo
  3. Top row: e a primeira linha
  4. Bottom row: e a última linha
  5. Left column: e a primeira coluna, de cima para baixo
  6. Right column: e a última coluna, de cima para baixo

Para a matriz [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]], a saída é:

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 16

Os testes chamam print_patterns() por conta própria. Não a chame e não retorne nada.

Experimente você mesmo

func print_patterns(grid: Array):
	# Escreva o código aqui
	pass
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Lógica e fluxo

Pratique por conta própria: Compilador de GDScript online