JFD€`ị⁸Ṃ€
RJP€中号€
ṙJṖ«/参数:1D数组(z)
J [1,2,3,...,len(z)]
ṙ将z旋转上述每个量(当前数组为2D)
Ṗ删除最后一个数组
«/减少[隐式向量化]最小值
在线尝试!
一次验证所有这些!(稍作修改)
我很确定丹尼斯可以做到这一点。
这个怎么运作
该算法相当复杂。让我们观察一下这样做的结果[4,2,2,5]
。
首先,我们使用J
获得[1,2,3,4]
。请注意,Jelly使用1索引。
然后,我们看到ṙ
。它有两个参数:一个数组和一个整数。它将数组向左旋转整数指定的数量。在这里,ṙ
将[4,2,2,5]
在其左侧和[1,2,3,4]
右侧看到(有关如何工作的更多信息,请参见本教程)。在Jelly中,命令隐式矢量化。因此,将在右侧的每个单独元素上执行此命令,这就是我们创建2D数组的原因:
因此,[4,2,2,5]ṙ[1,2,3,4]
变为[[4,2,2,5]ṙ1,[4,2,2,5]ṙ2,[4,2,2,5]ṙ3,[4,2,2,5]ṙ4]
,它变为:
[[2,2,5,4],
[2,5,4,2],
[5,4,2,2],
[4,2,2,5]
请注意,原始元素位于最后一行,因为在该行中,我们向左旋转了一个等于数组长度的量,这就是为什么我们使用Ṗ
next删除该行,以便这些列是不在当前索引处的数组元素:
[[2,2,5,4],
[2,5,4,2],
[5,4,2,2]
下面的操作,«/
也很复杂。首先,«
返回在左侧和右侧看到的两个数字中的最小值。例如,5«3
return 3
。现在,如果两个参数是数组,那么它将如上所述向量化。该拿什么那[1,5,2,3]«[4,1,5,2]
将成为[1«4,5«1,2«5,3«2]
是[1,1,2,2]
。现在,/
is reduce
,这意味着我们将对每一行进行操作直到结束。例如,[1,2,3,4]+/
成为((1+2)+3)+4
,它是array的总和[1,2,3,4]
。
因此,如果将其应用于«/
刚刚获得的2D数组,则会得到:
([2,2,5,4]«[2,5,4,2])«[5,4,2,2]
由于矢量化,其等效于:
[2«2«5,2«5«4,5«4«2,4«2«2]
它计算每个数组的最小值,而元素不位于索引处。
[4 3 2 2 5]
输出什么?