J 54 байта
[:|:|.@i.@#(>@],~' '#~[)"_1[:(,' '&,)/&.>>:@i.@#<@#"0]
Попробуйте онлайн!(обратите внимание, что вывод на TIO имеет новую строку и три пробела, но это не из вызова функции - это, вероятно, то, что интерпретатор J делает автоматически).
Я думаю, что общая идея для решения этой проблемы верна, но есть небольшие вещи, которые я, вероятно, делаю неоптимально, которые добавляют к счету байтов.
Предыдущие варианты
55 байт
<:@+:@#{.[:|:|.@i.@#(],~' '#~[)"_1>:@i.@#(,' '&,)/@#"0]
56 байт
<:@+:@#{.[:|:|.@i.@#(],~' '#~[)"_1#{.[:(,' '&,)//.[:]\.]
объяснение
Это будет разделено на несколько функций. Кроме того, я не был настолько внимателен с последними частями объяснения, поэтому дайте мне знать, если вы хотите более подробное объяснение определенной части, и я могу отредактировать это в.
dup =. >:@i.@# <@#"0 ]
space =. (,' '&,)/&.>
pad =. |.@i.@# (>@],~' '#~[)"_1 ]
trans =. |:
dup
дублирует каждый символ столько раз, сколько его индекс (плюс один) в строке
space
вставляет пробелы между каждым символом
pad
дополняет символы нужным количеством пробелов
trans
транспонирует полученную матрицу
Образец звонка:
trans pad space dup 'abc'
c
b
a c
b
c
дубликат
>:@i.@# <@#"0 ]
>:@i.@# Indices of each character plus one
# Length of the string
i. Range [0,length)
>: Add one
<@#"0 ] Duplicate each character as many times as it index (plus one)
"0 For each
# ] Copy the character
>:@i.@# as many times as it index
< Box the result
Результаты помещены в рамку, чтобы предотвратить заполнение J пробелами (поскольку они имеют неравную длину).
Образец звонка:
dup 'abc'
┌─┬──┬───┐
│a│bb│ccc│
└─┴──┴───┘
Космос
(,' '&,)/&.>
&.> For each boxed element
(,' '&,)/ Insert spaces between each
Образец звонка:
space dup 'abc'
┌─┬───┬─────┐
│a│b b│c c c│
└─┴───┴─────┘
подушечка
|.@i.@# (>@],~' '#~[)"_1 ]
(>@],~' '#~[) Pad the right arg with spaces given by the left arg
|.@i.@# Indices in reverse order
i. # Range [0,length)
|. Reverse
В основном, отступ первого элемента с длиной - 1 пробел, второго с длиной - 2 и т. Д. Также удаляется бокс.
Образец звонка:
pad space dup 'abc'
a
b b
c c c
Транспонирование
Это просто встроенная функция, |:
которая выполняет транспонирование матрицы.