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«3return 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]输出什么?