Учитывая прямоугольную сетку текста, выровняйте диагонали, которые идут от верхнего левого до нижнего правого в столбцы так, чтобы самые нижние правые символы всех диагоналей были на уровне. Используйте пробелы для отступа.
Например, если сетка ввода текста
abcd
1234
WXYZ
то вы бы выстраиваться диагоналей W
, 1X
, a2Y
, b3z
, c4
, и d
в колонках , давая этот выход:
ab
123c
WXYZ4d
Обратите внимание, что самые нижние правые символы всех диагоналей WXYZ4d
находятся на одном уровне.
Детали
Размер входной сетки текста будет не менее 1 × 1, а длина всех строк будет одинаковой.
Вы можете принять входную сетку как многострочную строку или как список однострочных строк.
Сетка ввода будет содержать только печатные символы ASCII (включая пробел).
Выходные данные могут дополнительно иметь один завершающий символ новой строки, но не должно быть других пустых строк.
Строки вывода могут иметь пробелы, но не должны иметь лишних начальных пробелов.
Другие примеры
Пустые строки отдельные примеры. За каждым входом непосредственно следует выход.
123
456
789
1
452
78963
123.?!
456??!
789!!!
123.
456???
789!!!!!
**@
@
**
@ @
/\/\
\/ /
/ /\
\/\/
/
\/\
/ / /
\/\/\/\
12
34
56
78
90
7531
908642
Code
Code
G
O
L
F
FLOG
~
~
счет
Самый короткий код в байтах побеждает.
Ответы:
J , 12 байт
Определяет анонимный глагол. Попробуйте онлайн!
объяснение
В J
u &. v
(читай:u
подv
) означает «v, затем u, затем обратное к v». Реверс и транспонирование являются самообращениями, поэтому программа действительно означает «реверсировать, транспонировать, извлекать обратные антидиагональные, транспонировать, реверсировать».С примером ввода:
Задний ход:
Транспонирование:
Извлечение обратной анти-диагонали (и прокладка с пробелами):
Транспонирование:
Задний ход:
источник
Желе , 11 или 10 байт
Попробуйте онлайн!
Довольно отличный алгоритм от моего другого решения; этот использует встроенную функцию, чтобы добраться до диагоналей, а не делать вещи вручную.
Объяснение:
Диагонали выходят, возможно, в наихудшей возможной ориентации (требующей повторных транспозиций, разворотов и поворотов) и в неправильном порядке (сначала Желе выводит главную диагональ, поэтому нам нужно переместить некоторые диагонали от конца к началу, чтобы получить их чтобы). Тем не менее, это все еще выходит короче, чем мой другой раствор желе.
источник
CJam , 29 байт
Попробуйте онлайн!
объяснение
Вместо того, чтобы извлечь диагонали, мы снимаем слои с конца, чередуя левый и правый. Рассмотрим следующий вход:
Если мы выпишем диагонали в соответствии с требованиями задачи, мы получим:
Обратите внимание, что это просто (снизу вверх) самая нижняя строка, соединенная с крайним правым столбцом. Это определение также работает, если вход является прямоугольным.
источник
]
обернет весь стек! Я думаю, что функции должны работать независимо от содержимого стека под вводом, и вы, кажется, согласны ^^]
когда я изменил его на функцию.[{)\z}h]
и сохранить его функцию, для 27 байтов.JavaScript,
116101 байтЯ просто хотел использовать эту
/.$|\n?(?!.*\n)..+/gm
идею регулярных выражений . ( https://regex101.com/r/mjMz9i/2 )Вкус регулярных выражений в JavaScript разочаровывает, мне пришлось использовать,
(?!.*\n)
потому что он не\Z
реализован, и почему-то я не смог его использовать\0
.источник
.
вместо,[^]
так как вам нужно всего лишь пропустить символы без новой строки, чтобы найти новую строку, которая экономит 2 байта.^
это необходимо в последнем регулярном выражении, потому что any в любом случае\n
уже находится в начале строки, так что это сохраняет еще один байт.'$&'+' '.repeat(n)
. По сути, это выражение просто,$&
но с пробелом, добавляемым к каждому вызову, что тривиально реализовать рекурсивно - заменитьn=0
наr='$&'
иf(z,n+1)
с,f(z,r+' ')
а затемr
- желаемая строка замены. Если я посчитал правильно, это экономит 12 байтов.Желе , 15 или 14 байт
Попробуйте онлайн!
Это алгоритм, который не использует встроенный Jelly для диагоналей. Это может сделать его короче; Я мог бы попробовать это дальше.
Вот как работает алгоритм. Давайте начнем с этого ввода:
Мы начинаем с
L’⁶x;\
.L’
дает нам длину ввода минус 1 (в данном случае 2). Затем⁶x
дает нам строку пространств этой длины (" "
в данном случае); и;\
дает нам совокупные результаты при конкатенации (треугольник пространств). Затем мы переворачиваем треугольник и соединяем его с левой стороной оригинала (;"
объединяем соответствующие элементы списков,µ
принудительно приводим к разрыву при разборе и, таким образом, используем исходный ввод как второй список по умолчанию), давая нам следующее:Это почти то решение, которое нам нужно, но нам нужно переместить элементы вниз, чтобы они были на одном уровне с последней строкой. Это вопрос транспонирования (
Z
), обращения внутри каждой строки (U
), транспонирования снова (Z
) и обращения строк (Ṛ
):транспонирования
перевернуть в строках
транспонирования
поменять местами
Наконец,
Y
присоединяется к новым строкам. Для меня неясно, требуется ли это для соответствия спецификации (которая допускает ввод в виде списка строк, но не говорит то же самое о выводе), поэтому точное число байтов зависит от того, включен он или нет.источник
Pyth, 16 байт
Большой Пит :
Поскольку люди говорят, что языки игры в гольф трудно читать, я разработал Big Pyth, который легко читается и легко переносится на Pyth. Связанный файл переводит входной поток Big Pyth в Pyth. Каждый токен Big Pyth, разделенный пробелами, соответствует токену Pyth, либо персонажу, либо
.
сопровождаемому символом. Исключением являютсяimplicit
токены, которые неявно присутствуют в коде Pyth.Я хочу посмотреть, насколько хорош объяснительный формат Big Pyth, поэтому я не буду давать никаких других объяснений. Спросите меня, если вы хотите что-то объяснить, однако.
источник
JavaScript (ES6), 140 байт
Принимает ввод и вывод как массивы строк. Также принимает ввод двумерного массива символов и сохраняет 7 байтов, если вывод двумерного массива символов допустим. Объяснение: Высота результата
m
- это минимум высотыh
и шириныw
исходного массива, а ширина просто на единицу меньше суммы высоты и ширины исходного массива. Исходная строка для символов в основной части результата поступает непосредственно из соответствующей строки исходного массива, считая снизу вверх, тогда как в дополнительной части результата исходная строка перемещается вверх на одну строку для каждого дополнительного столбца. Исходный столбец для обеих половин результата оказывается равным целевому столбцу, перемещенному на один столбец влево для каждой исходной строки над основанием.источник
Октава, 57 байт
источник
Python 3, 247 байт
источник
join(i) for
.Python 2, 150 байт
Принимает ввод как список строк.
источник
Clojure, 194 байта
Реализовал сложный путь, группируя символы,
G
а затем генерируя строки.Принимает входной сигнал в виде
vec
изvec
S , как[[\a \b \c \d] [\1 \2 \3 \4] [\W \X \Y \Z]]
. Пример:источник