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│
└─┴───┴─────┘
Pad
|.@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
Перенести
Це лише вбудована функція, |:
яка займає транспонування матриці.