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
문자열에서 각 문자를 색인 (더하기 1)만큼 여러 번 복제
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
바꾸어 놓다
이것은 |:
매트릭스의 전치를 취하는 내장 함수일뿐 입니다.