В рамках алгоритма сжатия стандарт 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]]
Связанные проблемы
- Зигзагообразная матрица (несколько более простое обратное преобразование)
- Поверните анти-диагонали