py_spiral_matrix

Código comentado línea a línea y paso a paso:

Entregas: py_spiral_matrix.py con generate_spiral(n). Rank 05 · nivel 1.

Qué pide (en palabras normales)

Subject (enunciado original)
Write a function that generates an `n x n` 2D matrix filled with numbers from 1 to `n^2` in clockwise spiral order.

The spiral starts at the top-left cell (0, 0) moving right, then down, then left, then up, continuing inwards.

Expected file: py_spiral_matrix.py
Function signature:
def generate_spiral(n: int) -> list[list[int]]:

Examples:
generate_spiral(3)
=> [[1, 2, 3], [8, 9, 4], [7, 6, 5]]
generate_spiral(1)
=> [[1]]

2 piezas

1. Cuatro bordes que se encogen

top, bottom, left, right = 0, n - 1, 0, n - 1
while top <= bottom and left <= right:
    ...
    top += 1      # tras la fila de arriba
    right -= 1    # tras la columna derecha
    bottom -= 1   # tras la fila de abajo
    left += 1     # tras la columna izquierda

Cada vuelta pinta el marco de la capa actual y mueve los cuatro bordes hacia dentro. El bucle para cuando se cruzan.

2. Los dos guards

if top <= bottom:        # ¿queda fila de abajo?
    ...
if left <= right:        # ¿queda columna izquierda?
    ...

Con n impar la última capa es una sola celda (o una sola fila/columna). Sin los guards la pintas dos veces y el centro sale mal. Pruébalo con n = 3: el 9 se escribiría dos veces.

Trampas