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

Fmb*_*ena 2 apl dyalog reshape

如何检查字符串是否被重塑?示例:“aab”返回 0,因为“a”无法重新整形为该字符串或任何其他更短的字符串。

\n

另一个例子是“aabbaab”返回 1,因为“aabb”可以被重塑为该字符串。

\n

很多例子都可以发现这一点:

\n

返回 1

\n
101\nabba\nabcab\nabacedabarab\nabcdefedabc\n!@#~\xe2\x82\xac!\n
Run Code Online (Sandbox Code Playgroud)\n

返回 0

\n
aA\n~\n[][][][]][-\nabcac\naecec\n
Run Code Online (Sandbox Code Playgroud)\n

是否有 lambda 函数可以完成此任务?

\n

注意:如果您不熟悉 APL,请阅读此内容

\n

Krz*_*zyk 5

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

\n
{(\xe2\x8a\x82\xe2\x8d\xb5)\xe2\x88\x8a(\xe2\x89\xa2\xe2\x8d\xb5)\xe2\x8d\xb4\xc2\xa8\xc2\xaf1\xe2\x86\x93,\\\xe2\x8d\xb5}\n
Run Code Online (Sandbox Code Playgroud)\n

或者,默认:

\n
(\xe2\x8a\x82\xe2\x88\x8a\xe2\x89\xa2\xe2\x8d\xb4\xc2\xa8\xc2\xaf1\xe2\x86\x93,\\)\n
Run Code Online (Sandbox Code Playgroud)\n

让我们解压 dfn:

\n
{(\xe2\x8a\x82\xe2\x8d\xb5)\xe2\x88\x8a(\xe2\x89\xa2\xe2\x8d\xb5)\xe2\x8d\xb4\xc2\xa8\xc2\xaf1\xe2\x86\x93,\\\xe2\x8d\xb5}\n               ,\\\xe2\x8d\xb5       prefixes of the input\n            \xc2\xaf1\xe2\x86\x93          ignore the last one\n      (\xe2\x89\xa2\xe2\x8d\xb5)\xe2\x8d\xb4\xc2\xa8             reshape each of the prefixes so\n                         that it has the same length as input\n\n (\xe2\x8a\x82\xe2\x8d\xb5)\xe2\x88\x8a                   check if input appears anywhere in the list.\n
Run Code Online (Sandbox Code Playgroud)\n

前缀是以下操作:

\n
      ,\\ 'Hello!'\n\xe2\x94\x8c\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82H\xe2\x94\x82He\xe2\x94\x82Hel\xe2\x94\x82Hell\xe2\x94\x82Hello\xe2\x94\x82Hello!\xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\n
Run Code Online (Sandbox Code Playgroud)\n