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, 2
dariam
[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
fonte