Иногда в моем коде есть списки постоянных матриц:
[ [[1, 0],
[0, 1]],
[[1, 0],
[0,-1]],
[[0, 1],
[1, 0]],
[[0,-1],
[1, 0]] ]
Это ужасное использование экрана недвижимости. Я бы предпочел написать их рядом друг с другом:
[ [[1, 0], [[1, 0], [[0, 1], [[0,-1],
[0, 1]], [0,-1]], [1, 0]], [1, 0]] ]
Вы обнаружите, что это все еще синтаксически верный вложенный список, он просто больше не прямоугольный и имеет совершенно иную структуру (в частности, он становится глубже каждый раз, когда я добавляю матрицу больше 1x1). Тем не менее, все еще возможно восстановить исходный список матриц из этого нового списка.
Чтобы я мог использовать этот синтаксис в будущем, мне нужно, чтобы вы написали некоторый код, который преобразует массивы, которые были написаны в горизонтальном расположении, в список матриц, которые они представляют.
Чтобы убедиться, что ответы не выполняют сопоставление двумерного шаблона с макетом в исходном коде, входные данные будут заданы либо просто как объект массива, либо, если вы возьмете строковое представление, то оно не будет содержать пробелов, указывающих, как литерал был написан в коде. Таким образом, вы получите некоторый вклад, как это:
[[[1, 0], [[1, 0], [[0, 1], [[0,-1], [0, 1]], [0,-1]], [1, 0]], [1, 0]]]
И на выходе должен быть следующий массив или его строковое представление (опять же, никакой дальнейшей разметки не требуется):
[[[1, 0], [0, 1]], [[1, 0], [0,-1]], [[0, 1], [1, 0]], [[0,-1], [1, 0]]]
Это первая и более простая часть задачи, состоящей из двух частей. В этом вы можете предположить, что все матрицы квадратные и имеют одинаковые размеры, и что они правильно выровнены рядом друг с другом. Во второй части мы ослабим эти предположения.
правила
Входными данными будет вложенный список или его каноническое строковое представление (на выбранном вами языке), и вы должны вывести результат в том же формате. Результат всегда будет содержать хотя бы одну матрицу, и матрицы могут быть размером 1x1. Матрицы будут содержать только (подписанные) целые числа с абсолютным значением меньше 128.
Вы можете написать программу или функцию и использовать любой из стандартных методов получения ввода и предоставления вывода.
Вы можете использовать любой язык программирования , но учтите, что эти лазейки по умолчанию запрещены.
Это код-гольф , поэтому самый короткий действительный ответ - измеренный в байтах - выигрывает.
Тестовые случаи
Каждый тестовый пример имеет: а) матрицы списков, удобно расположенные рядом друг с другом в том виде, в каком они были бы в коде (это не ваш ввод), б) неформатированный список без лишних пробелов ( это ваш ввод), в) ожидаемый результат.
Pretty: [ [[0]] ]
Input: [[[0]]]
Output: [[[0]]]
Pretty: [ [[-1]], [[0]], [[1]] ]
Input: [[[-1]],[[0]],[[1]]]
Output: [[[-1]],[[0]],[[1]]]
Pretty: [ [[1, 0], [[1, 0], [[0, 1], [[0,-1],
[0, 1]], [0,-1]], [1, 0]], [1, 0]] ]
Input: [[[1,0],[[1,0],[[0,1],[[0,-1],[0,1]],[0,-1]],[1,0]],[1,0]]]
Output: [[[1,0],[0,1]],[[1,0],[0,-1]],[[0,1],[1,0]],[[0,-1],[1,0]]]
Pretty: [ [[1, 0, 0], [[ 127, 63, 31], [[1, 0, 0], [[0, 0, 0],
[0, 1, 0], [ 15, 0, -15], [0, 0, 1], [0, 0, 0],
[0, 0, 1]], [ -31, -63, -127]], [0, 1, 0]], [0, 0, 0]] ]
Input: [[[1,0,0],[[127,63,31],[[1,0,0],[[0,0,0],[0,1,0],[15,0,-15],[0,0,1],[0,0,0],[0,0,1]],[-31,-63,-127]],[0,1,0]],[0,0,0]]]
Output: [[[1,0,0],[0,1,0],[0,0,1]],[[127,63,31],[15,0,-15],[-31,-63,-127]],[[1,0,0],[0,0,1],[0,1,0]],[[0,0,0],[0,0,0],[0,0,0]]]
источник
[([1, 0], [0, 1]), ([1, 0], [0, -1]), ([0, 1], [1, 0]), ([0, -1], [1, 0])]
Допустим вывод для третьего теста? Это смешанный список и кортеж.[([1,0], ([1, 0}, ...
и это даст вам дополнительную информацию.Ответы:
Желе ,
20151311 байтПопробуйте онлайн!
Задний план
Как и большинство вещей, эта задача довольно проста, если вы уже поняли, что вам нужно делать. И я в конце концов сделал, после трех удалений и одного отката ...
Во-первых, мы должны выяснить размеры матриц. Это легче сделать, чем сказать: первый элемент первого элемента - это первая строка первой выходной матрицы, поэтому его длина равна числу столбцов квадратных выходных матриц.
Например, если вход
первый элемент первого элемента имеет
[1, 0, 0]
длину ℓ = 3 .Если мы сгладим входные данные и разделим их на куски этой длины, мы получим все строки выходных матриц, хотя и в неправильном порядке. Для нашего примера ввода это дает
Чтобы получить окончательный результат, мы должны сначала разбить массив строк на ℓ порций одинаковой длины. Для нашего примера ввода это дает
Каждый столбец теперь является одной из выходных матриц, поэтому все, что осталось сделать, - это перенести полученную матрицу массивов. Для нашего примера ввода, который дает
по желанию.
Как это устроено
источник
Pyth , 12 байт
Это порт моего желе ответа.
Попробуйте онлайн!
Как это устроено
Pyth анализирует программу следующим образом (псевдокод).
Q является переменной, которая содержит входные данные. J - неопределенная переменная.
Сначала
J = l(h(h(Q)))
хранится длина головы (первый элемент) головы Q в J .Затем,
.n(Q)
сглаживает Q иc(..., J)
делит результат на куски длиной J .После этого
c(J, ...)
разбивает результат на J частей.Наконец,
C(...)
переносит результат.источник
Pyth , 29 байт
Тестирование.
Как это устроено
Алгоритм
Давайте работать на входе
[[[1,0],[[1,0],[[0,1],[[0,-1],[0,1]],[0,-1]],[1,0]],[1,0]]]
.Мы будем использовать чистые строковые операции здесь.
Во-первых, мы разбиваем ввод по запятым, которые не являются частью самого глубокого списка (это делается путем разделения по регулярному выражению
\B,
):Затем мы находим индекс первой подстроки , которая не начинается с
[[
(это делается путем проверки , является ли символ в индексе1
есть[
). В этом случае это так4
, потому что подстрока в индексе 4[0,1]]
не начинается с[[
.Затем мы группируем подстроки в группы по 4, а затем транспонируем:
И затем мы присоединяем их к запятым:
источник
JavaScript (ES6),
132130 байтЕсть четыре случая:
n
в то же время.n
элемент.источник
05AB1E , 11 байт
Порт Денниса ответ . Код:
Использует кодировку CP-1252 . Попробуйте онлайн!
источник
Mathematica, 104 байта
вход
выход
вход
выход
{{{0}}} и {{{-1}}, {{0}}, {{1}}} тоже работают
-11 байт благодаря Мартину Эндеру
источник