Возьмите не вложенный массив в качестве входных данных. Превратите это в матрицу, используя следующий метод:
Допустим, мой массив [1, 2, 3, 4, 5]
Во-первых, я повторяю этот массив 5 раз: (длина)
[[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5]]
Затем я читаю это по диагонали:
[[1],
[2, 1],
[3, 2, 1],
[4, 3, 2, 1],
[5, 4, 3, 2, 1],
[5, 4, 3, 2],
[5, 4, 3],
[5, 4],
[5]]
Я сплющил этот массив и разделил его на пять частей (длина):
[[1, 2, 1, 3, 2],
[1, 4, 3, 2, 1],
[5, 4, 3, 2, 1],
[5, 4, 3, 2, 5],
[4, 3, 5, 4, 5]]
Это код гольф. Побеждает несколько байтов.
Ответы:
05AB1E, 13 байтов
Попробуйте онлайн!
Объяснение:
источник
Желе , 11 байт
Попробуйте онлайн!
объяснение
источник
L
этим, сделал странные вещи, следовательно, я использовал регистр: / Я просто попробовал это снова, и это работает ... в основном то же самое, поэтому я думаю, я просто удалю свойPython 2,
10596 байт-1 и -4 и -4 байта благодаря Flp.Tkc
Цикл for добавляет элементы, как в описании, настоящая магия происходит в зипе, который отсюда
источник
JavaScript (ES6) 100
101 105Меньше гольфа
Тестовое задание
источник
return
. Вы должны опубликовать совет об этом в ветке советов ES6.eval
лучше даже в этот раз :(MATL , 17 байт
Попробуйте онлайн!
Как это устроено
Следующее объяснение использует ввод
[1 2 3 4 5]
в качестве примера. Чтобы визуализировать промежуточные результаты, вставьте%
(символ комментария) после любого утверждения в коде.Обратите внимание, что
;
это разделитель строк для матриц. Так[1 2]
же и вектор строки, вектор-[1; 2]
столбец и[1 0; 0 1]
тождественная матрица 2 × 2.источник
JavaScript (ES6), 116 байт
Ну, это начало ...
источник
R, 84 байта
Читает ввод из stdin и выводит / возвращает R-матрицу.
Разъяснения
Самый интересный аспект этого ответа - как получаются диагонали. В общем случае объект может быть разделен с помощью
split
функции, если предоставлен объект, содержащий факторы, на которые разделен объект. Для создания этих факторов мы можем использоватьcol
иrow
которые возвращают матрицу, содержащую индексы столбцов и строк соответственно. Принимая различия:row(m)-col(m)
мы получаем матрицу как:в котором каждая диагональ однозначно идентифицируется. Теперь мы можем разделить на основе этой матрицы и превратить ее в рваный список, применив
split
:(Обратите внимание, как названия каждого вектора соответствуют диагональным значениям в матрице выше).
Последний шаг - просто сгладить и превратить его в матрицу вида:
источник
Mathematica 93 байта
Вот как я обычно пишу этот код (109 байт):
Этот матричный график дает хорошее представление о структуре благодаря последовательно увеличивающемуся входному вектору.
Вот матричный график со случайным входным вектором. Очевидно, что некоторая структура все еще существует.
источник
Mathematica, 92 байта
Безымянная функция, принимая список в качестве аргумента. Для такой функции могут быть и другие структуры, но, надеюсь, я неплохо сыграл эту структуру ...
Первая часть
n=NestList[#2,(r=Reverse)@#,(l=Length@#)-1]&
определяет функциюn
двух аргументов: первая - это список длиныl
, а вторая - функция, применяемая к спискам.n
применяет этоl-1
время функции к обращенному списку аргументов, сохраняя все результаты в своем списке вывода. (Определениеr
иl
по пути просто игра в гольф.)n
вызывается дважды в исходном списке, один раз с функциейRest
(удалить первый элемент списка) и один раз с функциейMost
(удалить последний элемент). Это производит все желаемые подсписки, но весь список там дважды (отсюда дополнительныйMost
), а первая половина там в обратном порядке (отсюда иr[...]
). Наконец,~ArrayReshape~{l,l}
забывает текущую структуру списка и заставляет его быть массивомl
xl
.источник
Mathematica, 85 байт
Буквально выполняя предложенные шаги:
Моя интуиция говорит, что должен быть умный способ
Part
сделать это короче, но каждая попытка была длиннее 85 байт.источник
Рубин (110 байт)
sort
Операция может не потребоваться, но док для перечислимых # group_by не гарантирует порядок значений в хэш - значений (которые являются массивами), но современные версии Ruby , обеспечивают упорядоченность можно было бы ожидать и упорядоченность я должен был бы , еслиsort
было удалено из моего кодаШаги следующие.
Наконец,
f.to_a
возвращает массив, показанный ранее.источник