J, 54 byte
[:|:|.@i.@#(>@],~' '#~[)"_1[:(,' '&,)/&.>>:@i.@#<@#"0]
Cobalah online!(perhatikan bahwa output pada TIO memiliki baris baru dan tiga spasi, tapi itu bukan dari pemanggilan fungsi - itu mungkin hanya apa yang dilakukan penerjemah J secara otomatis).
Saya pikir ide umum untuk menyelesaikan ini benar, tetapi ada hal-hal kecil yang mungkin saya lakukan secara kurang optimal yang menambah bytecount.
Varian sebelumnya
55 byte
<:@+:@#{.[:|:|.@i.@#(],~' '#~[)"_1>:@i.@#(,' '&,)/@#"0]
56 byte
<:@+:@#{.[:|:|.@i.@#(],~' '#~[)"_1#{.[:(,' '&,)//.[:]\.]
Penjelasan
Ini akan dibagi menjadi beberapa fungsi. Juga, saya tidak teliti dengan bagian terakhir dari penjelasan, jadi beri tahu saya jika Anda ingin penjelasan yang lebih baik untuk bagian tertentu dan saya dapat mengeditnya.
dup =. >:@i.@# <@#"0 ]
space =. (,' '&,)/&.>
pad =. |.@i.@# (>@],~' '#~[)"_1 ]
trans =. |:
dup
menduplikasi setiap karakter sebanyak indeksnya (ditambah satu) dalam string
space
menyisipkan spasi antara masing-masing karakter
pad
mengisi karakter dengan jumlah ruang yang tepat
trans
transposes matriks yang dihasilkan
Contoh panggilan:
trans pad space dup 'abc'
c
b
a c
b
c
Dup
>:@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
Hasilnya dikotak untuk mencegah J dari mengisi ujungnya dengan spasi (karena panjangnya tidak merata).
Contoh panggilan:
dup 'abc'
┌─┬──┬───┐
│a│bb│ccc│
└─┴──┴───┘
Ruang
(,' '&,)/&.>
&.> For each boxed element
(,' '&,)/ Insert spaces between each
Contoh panggilan:
space dup 'abc'
┌─┬───┬─────┐
│a│b b│c c c│
└─┴───┴─────┘
Bantalan
|.@i.@# (>@],~' '#~[)"_1 ]
(>@],~' '#~[) Pad the right arg with spaces given by the left arg
|.@i.@# Indices in reverse order
i. # Range [0,length)
|. Reverse
Pada dasarnya, pad elemen pertama dengan panjang - 1 spasi, yang kedua dengan panjang - 2, dll. Ini juga menghilangkan tinju.
Contoh panggilan:
pad space dup 'abc'
a
b b
c c c
Mengubah urutan
Ini hanya fungsi built-in |:
yang mengambil transpose dari sebuah matriks.