首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >双向回力闭合发生器

双向回力闭合发生器
EN

Code Golf用户
提问于 2015-03-16 17:48:10
回答 4查看 2.2K关注 0票数 25

Introduction

输入字符串的回文闭包是从输入字符串中构造的最短回文,最后回文从输入字符串开始。

对于这一挑战,我们将考虑双向回文关闭,以便

  • 输入字符串的左回文闭包是以输入字符串开头的最短回文。
  • 输入字符串的右回文闭包是以输入字符串结尾的最短回文。
  • 输入字符串的双向回文闭包是输入字符串的左或右回文闭包的较短部分。

任务

你的任务很简单。给定一个字符串(仅由可打印的ASCII、新行和空格组成),输出该字符串的双向回文闭包。对于tie,左或右回文闭包都是有效的输出。

您可以编写程序或函数,通过STDIN (或最近的替代)、命令行参数或函数参数获取输入,或者将结果打印到STDOUT (或最近的选项),或者将其作为字符串返回。

您可以假设输入永远不会是空字符串。

很少有例子:

代码语言:javascript
复制
<Input>   -> <Output>
"abcdef"  -> "abcdefedcba"  (or "fedcbabcdef")
"abcba"   -> "abcba"
"abcb"    -> "abcba"
"cbca"    -> "acbca"

最初的创意信用归于VisualMelon,最后的创意得到马丁和兹加布的帮助。

本论文首次使用和定义了回文闭合、左苍白闭合和右回文闭合.

EN

回答 4

Code Golf用户

发布于 2015-03-16 18:23:05

,40

代码语言:javascript
复制
(sl`f[a=ava}+m[i+v+ixx}Rlxm[i+xvu0ix}Rlx

示例

代码语言:javascript
复制
Documents>java -jar Clip4.jar palindrome.clip
abcb
abcba

解释

代码语言:javascript
复制
(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.-.
票数 6
EN

Code Golf用户

发布于 2015-03-16 22:15:32

Mathematica,96字节

一定有比这更优雅的方法..。

代码语言:javascript
复制
""<>#&@@SortBy[r=Reverse;#/.{b___,a__/;r@{a}=={a}}:>{b,r@{b,a}}&/@{r@#,#}&@Characters@#,Length]&

这定义了一个未命名的函数,它接受一个字符串并返回结果。

基本思想是

  • 将字符串拆分为Characters
  • 使用此列表及其反向组成数组。
  • 使用模式匹配来查找其中每一个的正确回文:{b___,a_/;r@a}=={a}:>{b,r@{b,a}注意到这实际上并不返回平面列表。例如,对于{a,b,c},可以得到{a,b,{c,b,a}
  • 根据长度对这两个结果进行排序。
  • 选择较短的,并将其与""<>#&@@连接回字符串中。
票数 4
EN

Code Golf用户

发布于 2017-02-20 02:31:33

布氏对数 (2),6个字节,语言后期挑战

代码语言:javascript
复制
~{↔?a}

在网上试试!

这是一个函数,而不是一个完整的程序。

解释

代码语言:javascript
复制
~{↔?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)的求值顺序会受到它评估的第一件事的严重影响。在本例中,这是一个“反向”命令,并且(与大多数列表操作一样)它设置了一个求值顺序,其目的是最小化结果列表的大小。因为这与输出的大小相同,所以程序很高兴地最终偶然地最小化了完全正确的东西,这意味着我不需要添加任何明确的提示。

票数 2
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/47850

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档