如何检查字符串是否在 APL 中重塑?

How to check if the string is reshaped in APL?

如何检查字符串是否重塑?示例:“aab”returns 0 因为“a”不能重塑为该字符串或任何其他较短的字符串。

另一个例子是“aabbaab”returns 1 因为“aabb”可以重新整形为这个字符串。

很多例子都可以找到这个:

Returns 1

101
abba
abcab
abacedabarab
abcdefedabc
!@#~€!

Returns 0

aA
~
[][][][]][-
abcac
aecec

是否有执行此任务的 lambda 函数?

注意:如果您不熟悉 APL,请阅读 this

任务本质上归结为检查我们是否可以循环给定字符串的某个子字符串,以便我们得到上述字符串。一个简单的解决方案如下:

{(⊂⍵)∊(≢⍵)⍴¨¯1↓,\⍵}

或者,默认:

(⊂∊≢⍴¨¯1↓,\)

让我们解压 dfn:

{(⊂⍵)∊(≢⍵)⍴¨¯1↓,\⍵}
               ,\⍵       prefixes of the input
            ¯1↓          ignore the last one
      (≢⍵)⍴¨             reshape each of the prefixes so
                         that it has the same length as input

 (⊂⍵)∊                   check if input appears anywhere in the list.

Prefixes是如下操作:

      ,\ 'Hello!'
┌─┬──┬───┬────┬─────┬──────┐
│H│He│Hel│Hell│Hello│Hello!│
└─┴──┴───┴────┴─────┴──────┘