Як частина алгоритму стиснення, стандарт JPEG розгортає матрицю у вектор уздовж антидіагоналів змінного напрямку:
Ваше завдання - взяти розкручений вектор разом з розмірами матриці та реконструювати відповідну матрицю. Як приклад:
[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]
тоді як розміри 6, 2
дають
[1 2 6 3 1 2
5 9 4 7 8 3]
Правила
Ви можете вибрати лише один з вимірювань як вхідний. Окремі введення можна взяти в будь-якому порядку. Ви можете припустити, що ширина та висота позитивні та дійсні для заданої довжини вектора.
Можна припустити, що векторні елементи мають натуральні цілі, менші ніж 10
.
Ви можете написати програму або функцію, взявши введення через STDIN (або найближчу альтернативу), аргумент командного рядка або аргумент функції та вивівши результат через STDOUT (або найближчу альтернативу), значення повернення функції або параметр функції (out).
Вектор введення може бути наданий у будь-якому зручному, однозначному, плоскому списку чи рядковому форматі.
Вихідна матриця може бути в будь-якому зручному, однозначному, вкладеному списку або форматі рядка, або як плоский список разом з обома розмірами матриці. (Або, звичайно, як тип матриці, якщо у вас є мова.)
Діють стандартні правила гольф-коду .
Випробування
Кожен тестовий випадок має форму 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]]
Супутні виклики
- Зігзагіфікувати матрицю (дещо простіше зворотне перетворення)
- Обертайте антидіагоналі