果冻,14 12字节
J’ƲœṗZ⁻¦µU⁼
在线尝试!
背景
我们首先查看输入字符串的从0开始的索引。
H H e H H e l e H H e l l l e H H e l l o l l e H
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
要获得的三角形的各行中,我们可以在索引前分割字符串1,1 + 3 = 4,1 + 3 + 5 = 9,和1 + 3 + 5 + 7 = 16。由于(n + 1)²=n²+(2n +1),所以这些和恰好是索引列表中的正完美平方。如果我们也将字符串拆分为0之前的字符串,这就像在所有基于0的完美平方索引之前进行拆分一样简单。
分割后,我们得到以下字符串。
""
"H"
"HeH"
"HeleH"
"HellleH"
"HellolleH"
接下来,我们用第一列中的所有字符替换开头的空字符串。
"HHHHH"
"H"
"HeH"
"HeleH"
"HellleH"
"HellolleH"
现在,该任务简化为检查是否反转所有字符串会产生相同的字符串数组。
怎么运行的
首先J
生成输入字符串的所有基于1的索引J
,然后将其递减’
以产生所有基于0的索引。Ʋ
测试所有基于0的索引的方形度。对于上面的示例,这将产生以下布尔数组。
1 1 0 0 1 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
接下来,我们调用œṗ
分区输入字符串,例如,
H H e H H e l e H H e l l l e H H e l l o l l e H
在所有1之前(实际上是所有真实元素)。对于我们的示例,这将产生以下字符串数组。
['',
'H',
'HeH',
'HeleH',
'HellleH',
'HellolleH'
]
Z⁻¦
可以说是这个答案中最有趣的部分。让我们先分析更简单的方法Z1¦
。
¦
是疏快。它消耗从堆栈两个环节,特别是1
与Z
在这种情况下。首先Z
应用于其参数:之前的字符串数组。Z
是zip原子,并按列读取字符串数组/ 2D字符数组,得出
['HHHHH',
'eeee',
'Hlll',
'ell',
'Hlo',
'el',
'Hl',
'e',
'H'
]
输入字符串左侧和字符串数组第一列的内容现在变为第一个字符串。
现在¦
查看1
并找到一个索引:1。因此,原始字符串数组中的第一个字符串将替换为返回值Z
;中的第一个字符串。其他索引处的字符串不受影响。
['HHHHH',
'H',
'HeH',
'HeleH',
'HellleH',
'HellolleH'
]
让我们把这个数组一个。
我们使用Z⁻¦
代替Z1¦
,但这没有什么区别:⁻
比较字符串数组和输入字符串的不相等性,因为它们不相等,所以产生1。两者之间的区别Z⁻¦
是二进式的,因为⁻
是,允许我们写œṗZ⁻¦
而不是œṗ¹Z1¦
。这是因为一个dyad(œṗ
)后跟一个monad(œṗ¹Z1¦
)是一个分叉(将monad应用于链的参数/输入字符串,并将返回值作为正确的参数传递给œṗ
),而一个dyad之后是另一个dyad (或在链的末尾)是一个hook,即它的正确参数是链的参数。
剩下要做的就是检查回文症。µ
开始一个新的(一元)链谁的说法是一个。在倒放原子U
反转的所有字符串在甲(但不甲本身),然后⁼
将结果与比较阿是否相等。返回的布尔值1表示完全回文的三角形;其他字符串将返回0。