Como parte de seu algoritmo de compactação, o padrão JPEG desenrola uma matriz em um vetor ao longo de antidiagonais de direção alternada:
Sua tarefa é pegar o vetor desenrolado junto com as dimensões da matriz e reconstruir a matriz correspondente. Como um exemplo:
[1, 2, 5, 9, 6, 3, 4, 7, 1, 2, 8, 3], 4, 3
deve render
[1 2 3 4
5 6 7 8
9 1 2 3]
considerando que as dimensões 6, 2dariam
[1 2 6 3 1 2
5 9 4 7 8 3]
Regras
Você pode optar por usar apenas uma das dimensões como entrada. As entradas individuais podem ser obtidas em qualquer ordem. Você pode assumir que a largura e a altura são positivas e válidas para o comprimento do vetor especificado.
Você pode assumir que os elementos do vetor são inteiros positivos menores que 10.
Você pode escrever um programa ou função, recebendo entrada via STDIN (ou alternativa mais próxima), argumento da linha de comando ou argumento da função e emitindo o resultado via STDOUT (ou alternativa mais próxima), valor de retorno da função ou parâmetro da função (saída).
O vetor de entrada pode ser fornecido em qualquer formato conveniente, inequívoco, de lista ou cadeia simples.
A matriz de saída pode estar em qualquer formato conveniente de lista ou seqüência aninhada, inequívoca, ou como uma lista simples junto com as duas dimensões da matriz. (Ou, é claro, como um tipo de matriz, se o seu idioma tiver esse.)
Aplicam-se as regras de código-golfe padrão .
Casos de teste
Cada caso de teste é do formato vector width height => matrix.
[1] 1 1 => [[1]]
[1 2 3 1] 2 2 => [[1 2] [3 1]]
[1 2 3 1] 4 1 => [[1 2 3 1]]
[1 2 5 9 6 3 4 7 1 2 8 3] 3 4 => [[1 2 3] [5 6 4] [9 7 8] [1 2 3]]
[1 2 5 9 6 3 4 7 1 2 8 3] 4 3 => [[1 2 3 4] [5 6 7 8] [9 1 2 3]]
[1 2 5 9 6 3 4 7 1 2 8 3] 6 2 => [[1 2 6 3 1 2] [5 9 4 7 8 3]]
[1 2 5 9 6 3 4 7 1 2 8 3] 12 1 => [[1 2 5 9 6 3 4 7 1 2 8 3]]
[1 2 5 9 6 3 4 7 1 2 8 3] 1 12 => [[1] [2] [5] [9] [6] [3] [4] [7] [1] [2] [8] [3]]
Desafios relacionados
- Ziguezague uma matriz (a transformação inversa um pouco mais simples)
- Gire as antiagonais
