Dans le cadre de son algorithme de compression, le standard JPEG déroule une matrice en un vecteur le long d'antidiagonales de direction alternée:
Votre tâche consiste à prendre le vecteur déroulé avec les dimensions de la matrice et à reconstruire la matrice correspondante. Par exemple:
[1, 2, 5, 9, 6, 3, 4, 7, 1, 2, 8, 3], 4, 3
devrait céder
[1 2 3 4
5 6 7 8
9 1 2 3]
alors que les dimensions 6, 2
donneraient
[1 2 6 3 1 2
5 9 4 7 8 3]
Règles
Vous pouvez choisir de ne prendre qu'une seule des dimensions en entrée. Les entrées individuelles peuvent être prises dans n'importe quel ordre. Vous pouvez supposer que la largeur et la hauteur sont positives et valables pour la longueur de vecteur donnée.
Vous pouvez supposer que les éléments vectoriels sont des entiers positifs inférieurs à 10
.
Vous pouvez écrire un programme ou une fonction, en prenant une entrée via STDIN (ou l'alternative la plus proche), un argument de ligne de commande ou un argument de fonction et en sortant le résultat via STDOUT (ou l'alternative la plus proche), la valeur de retour de la fonction ou le paramètre de la fonction (out).
Le vecteur d'entrée peut être donné dans n'importe quel format de liste plate ou de chaîne pratique et sans ambiguïté.
La matrice de sortie peut être dans n'importe quel format de liste ou de chaîne imbriquée, sans ambiguïté, ou sous forme de liste plate avec les deux dimensions de la matrice. (Ou, bien sûr, comme type de matrice si votre langue en possède.)
Les règles de code-golf standard s'appliquent.
Cas de test
Chaque cas de test est de la forme 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]]
Défis liés
- Zigzagifiez une matrice (la transformation inverse un peu plus simple)
- Faites pivoter les anti-diagonales