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