Impressão de uma matriz espiral

Escreva uma função que aceite um número inteiro n e retorne uma matriz espiral de n * n.

Exemplos

matrix(2) ➞ [
  [1, 2],
  [4, 3]
]

matrix(3) ➞ [
  [1, 2, 3],
  [8, 9, 4],
  [7, 6, 5]
]

matrix(4) ➞ [
  [1,  2,  3,  4],
  [12, 13, 14, 5],
  [11, 16, 15, 6],
  [10,  9,  8, 7]
]

Observações

Nos exemplos, percorra a matriz no sentido horário para observar o padrão espiral.