首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >强盗:隐藏的OEIS子串

强盗:隐藏的OEIS子串
EN

Code Golf用户
提问于 2019-07-10 13:59:34
回答 21查看 3K关注 0票数 27

这是警察和强盗的挑战。这是强盗的线索。警察的线索在这里

cops将从OEIS中选择任何序列,并编写程序p从该序列中打印出第一个整数。他们也会找到一些字符串s,如果你在p中插入S,这个程序必须从序列中打印出第二个整数。如果您在p中的相同位置插入S+S,则此程序必须从序列中打印第三个整数。S+S+勾勒在同一个位置上会印第四,以此类推。下面是一个例子:

Python3,序列A000027打印(1)隐藏的字符串是两个字节。

字符串是+1,因为程序print(1+1)将在A000027中打印第二个整数,程序print(1+1+1)将打印第三个整数,等等。

警察必须公开序列、原程序p和隐藏字符串s的长度。盗贼通过找到任何长度的字符串以及插入该序列的位置来破解提交。字符串不需要与预期的解决方案匹配才能成为有效的漏洞,也不需要将其插入的位置匹配。

如果你破解其中一个警察的答案,发你的解决方案(隐藏的字符串和位置显示)和一个答案的链接。然后评论警察的回答,链接到你的裂缝在这里。

规则

  • 您的解决方案必须适用于序列中的任何数字,或者至少在由于内存限制、整数/堆栈溢出等原因而失败的合理限制之前。
  • 获胜的抢劫犯是破解最多投稿的用户,打成平局的人是先达到这个数目的人。
  • 获胜的警察是字符串最短的没有破解的警察S。打破平局是最短的p。如果没有未提交的投稿,有一个解决方案的警察谁得到了最长的胜利。
  • 要被宣布为安全,您的解决方案必须保持一个星期未打开,然后有隐藏的字符串(以及插入它的位置)。
  • S不一定是嵌套的,它必须端到端连接。例如,如果S是10,那么每一次迭代都会变成10, 1010, 101010, 10101010...而不是10, 1100, 111000, 11110000...
  • 所有密码解决方案(例如,检查子字符串的哈希)都被禁止。
  • 如果S包含任何非ASCII字符,则还必须指定正在使用的编码。
EN

回答 21

Code Golf用户

发布于 2019-07-11 21:03:54

脑FlakA000984硝化细菌

代码语言:javascript
复制
({({}<>({}))<>}<>){({}<>)<>}<>

这仅仅是30个字节,不知道Nitrodon有什么想法。

在网上试试!

解释

我尝试了很多事情,但这才是有效的。A000984项是Pascal三角的中心元素。

现在我想,我可以通过把上面的对角线加起来来得到它们:

例如:

1+3+6+10 = 20

既然尼特尔顿计划的最终行动是总结每件事,这些似乎是一个很好的候选人(更像是我尝试了一堆东西,但这一项最终成功了)。

所以我们需要一个程序,它需要一个部分和,然后产生下一个和。幸运的是,有一个很好的方法从一个得到这些到下一个。每一行都是下一行的增量。也就是说,一行中的n第四项是下一行中的n第四项和n-1第四项之间的区别。

一个问题是,我们没有足够的最后一行来计算我们想要的行。因为每一行都比最后一行长一行,如果我们有一行,那么就不能使用此方法获得下一行的最后一个成员。然而,这里我们有另一个技巧,每一行的最后一个成员等于该行的所有以前的成员!

1+3+6=10

如果你熟悉大脑-Flak,你就会发现这是一件很容易做的事情。

下面是代码:

首先,我们进行下一行计算,其中每个新成员是两个相邻旧成员的之和。这可以通过以下方式来完成:

代码语言:javascript
复制
{({}<>({}))<>}<>

它基本上将一个元素移到上面,并添加(不删除)已经在其顶部的元素。然而,这将逆转一切,所以下次我们得到一行时,需要将其放回原处。

代码语言:javascript
复制
{({}<>({}))<>}<>{({}<>)<>}<>

现在我们需要计算行的最后一个成员。就像我之前说过的,这太容易了。因为我们对行中的所有元素都有一个循环,所以我们只需取这个和并推它。我们把它推到第二个循环之前,这样它就会在底部结束。

代码语言:javascript
复制
({({}<>({}))<>}<>){({}<>)<>}<>

就是这样。

票数 10
EN

Code Golf用户

发布于 2019-07-10 15:04:04

Brain-Flak,A000290奥扎伊克

原件:

代码语言:javascript
复制
((()))({}<>)

破裂:

代码语言:javascript
复制
((()))({}([])[]<>)
         ^^^^^^

在网上试试!

另一种选择是:

代码语言:javascript
复制
((())([])[])({}<>)
     ^^^^^^

在网上试试!

票数 6
EN

Code Golf用户

发布于 2019-07-15 17:03:21

马蒂尔路易斯·门多

的序列A005206

原件:

代码语言:javascript
复制
voOdoO

在网上试试!

破裂:

代码语言:javascript
复制
voOdoOdNq17L/k
      ^^^^^^^^

我不是MATL专家,但据我所知,原始voOdoO在堆栈上创建了两个空数组和一个数组[0]。这个[0]是作为序列的第一个元素被打印出来的,没有括号。然后,裂纹/解决方案执行以下操作:

  • d从堆栈中取出一个元素,并将其转换为一个空数组(假设它是一个数字或大小为1的数组)。这些空数组不会被打印出来,但会增加堆栈大小。
  • Nq计算堆栈的大小并减去一个。这是计算函数时的n+1术语(因为它从2开始,每次迭代增加一次,因为d将不可见的内容添加到堆栈中)
  • 17L,这是常数Phi = (1+sqrt(5))/2
  • /k执行floor((n+1)/Phi),这是计算序列元素的公式之一。该公式在OEIS上作为a(n) = floor(sigma*(n+1)) where sigma = (sqrt(5)-1)/2列出,但我们使用的是标识(sqrt(5)-1)/2 = 1/Phi
票数 6
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

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

复制
相关文章

相似问题

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