J, 54 byte
[:|:|.@i.@#(>@],~' '#~[)"_1[:(,' '&,)/&.>>:@i.@#<@#"0]
Hãy thử trực tuyến! (lưu ý rằng đầu ra trên TIO có một dòng mới và ba khoảng trắng, nhưng đó không phải là từ lệnh gọi hàm - có lẽ đó chỉ là những gì trình thông dịch J thực hiện tự động).
Tôi nghĩ rằng ý tưởng chung để giải quyết điều này là đúng, nhưng có những điều nhỏ mà có lẽ tôi đang thực hiện một cách tối ưu là thêm vào bytecount.
Các biến thể trước
55 byte
<:@+:@#{.[:|:|.@i.@#(],~' '#~[)"_1>:@i.@#(,' '&,)/@#"0]
56 byte
<:@+:@#{.[:|:|.@i.@#(],~' '#~[)"_1#{.[:(,' '&,)//.[:]\.]
Giải trình
Điều này sẽ được chia thành một vài chức năng. Ngoài ra, tôi không thấu đáo với các phần giải thích sau, vì vậy hãy cho tôi biết nếu bạn muốn giải thích rõ hơn cho một phần nhất định và tôi có thể chỉnh sửa phần đó trong.
dup =. >:@i.@# <@#"0 ]
space =. (,' '&,)/&.>
pad =. |.@i.@# (>@],~' '#~[)"_1 ]
trans =. |:
dup
nhân đôi mỗi ký tự nhiều lần như chỉ mục của nó (cộng một) trong chuỗi
space
chèn khoảng trắng giữa mỗi ký tự
pad
đệm các nhân vật với số lượng không gian phù hợp
trans
hoán vị ma trận kết quả
Cuộc gọi mẫu:
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
Các kết quả được đóng hộp để ngăn J đệm các đầu bằng khoảng trắng (vì chúng có chiều dài không đồng đều).
Cuộc gọi mẫu:
dup 'abc'
┌─┬──┬───┐
│a│bb│ccc│
└─┴──┴───┘
Không gian
(,' '&,)/&.>
&.> For each boxed element
(,' '&,)/ Insert spaces between each
Cuộc gọi mẫu:
space dup 'abc'
┌─┬───┬─────┐
│a│b b│c c c│
└─┴───┴─────┘
Tập giấy
|.@i.@# (>@],~' '#~[)"_1 ]
(>@],~' '#~[) Pad the right arg with spaces given by the left arg
|.@i.@# Indices in reverse order
i. # Range [0,length)
|. Reverse
Về cơ bản, đệm phần tử đầu tiên với chiều dài - 1 khoảng trắng, phần thứ hai có chiều dài - 2, v.v ... Nó cũng loại bỏ quyền anh.
Cuộc gọi mẫu:
pad space dup 'abc'
a
b b
c c c
Chuyển
Đây chỉ là hàm dựng sẵn |:
có chuyển vị của ma trận.