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
转置
这只是内置函数|:
,需要对矩阵进行转置。