输入字符串的回文闭包是从输入字符串中构造的最短回文,最后回文从输入字符串开始。
对于这一挑战,我们将考虑双向回文关闭,以便
你的任务很简单。给定一个字符串(仅由可打印的ASCII、新行和空格组成),输出该字符串的双向回文闭包。对于tie,左或右回文闭包都是有效的输出。
您可以编写程序或函数,通过STDIN (或最近的替代)、命令行参数或函数参数获取输入,或者将结果打印到STDOUT (或最近的选项),或者将其作为字符串返回。
您可以假设输入永远不会是空字符串。
很少有例子:
<Input> -> <Output>
"abcdef" -> "abcdefedcba" (or "fedcbabcdef")
"abcba" -> "abcba"
"abcb" -> "abcba"
"cbca" -> "acbca"最初的创意信用归于VisualMelon,最后的创意得到马丁和兹加布的帮助。
本论文首次使用和定义了回文闭合、左苍白闭合和右回文闭合.
发布于 2015-03-16 18:23:05
(sl`f[a=ava}+m[i+v+ixx}Rlxm[i+xvu0ix}RlxDocuments>java -jar Clip4.jar palindrome.clip
abcb
abcba(sl` .- The shortest -.
f[a=ava} .- palindrome -.
+ .- among the following two sets: -.
m[i }Rlx .- For each number up to length(x) -.
+ .- combine -.
v+ix .- the last i chars of x, reversed -.
x .- and x. -.
m[i }Rlx .- For each number up to length(x) -.
+ .- combine -.
x .- x and -.
vu0ix .- the first i chars of x, reversed.-.发布于 2015-03-16 22:15:32
一定有比这更优雅的方法..。
""<>#&@@SortBy[r=Reverse;#/.{b___,a__/;r@{a}=={a}}:>{b,r@{b,a}}&/@{r@#,#}&@Characters@#,Length]&这定义了一个未命名的函数,它接受一个字符串并返回结果。
基本思想是
Characters。{a,b,c},可以得到{a,b,{c,b,a}""<>#&@@连接回字符串中。发布于 2017-02-20 02:31:33
~{↔?a}这是一个函数,而不是一个完整的程序。
~{↔?a}
~{ } Find a value that produces {the input} upon doing the following:
↔ reversing it;
? asserting that we still have the same value;
a and taking either a prefix, or a suffix.据我所知(它不是我的语言,但它似乎不太可能),a并没有为这个挑战添加到Br那log中,但是它在这里非常有用。我们使用“反向,并断言它没有改变”方法来断言我们找到的值是回文。
至于为什么这会产生最短的回文,Prolog(因此也是Brachylog)的求值顺序会受到它评估的第一件事的严重影响。在本例中,这是一个“反向”命令,并且(与大多数列表操作一样)它设置了一个求值顺序,其目的是最小化结果列表的大小。因为这与输出的大小相同,所以程序很高兴地最终偶然地最小化了完全正确的东西,这意味着我不需要添加任何明确的提示。
https://codegolf.stackexchange.com/questions/47850
复制相似问题