更改代码,更改顺序:强盗


15

这是挑战。有关警察的信息,请转到此处

这个挑战涉及警察选择的两个OEIS序列-S 1 S 2-以及对这些序列进行打高尔夫球和模糊处理的程度。

警察正在构建产生S 1的代码A,并给出一个数字X,他们声称这是创建产生S的B的最佳Levenshtein距离(以字符为单位) 2

强盗的挑战

要破解特定警察的提交内容,强盗必须提供与该答案产生S 2(n)且Y字符从A变为(带有)的相同语言(和版本)的程序C。强盗不一定需要找到完全相同的东西Y <= X与警察(秘密地)产生 B代码。强盗的陈述必须遵循与警察的陈述相同的0索引或1索引。

如果您能解决此问题,请在解决方案中发布答案,并链接到警察的答案,然后在警察的答案上留下评论(链接回您的答案)。

每个警察的答案只能破解一次,当然,您也不能破解自己的答案。如果警察的答案在被破解之前或之后被证明是无效的,则不计入强盗的分数。

获胜和得分

抢劫犯会(X - Y)*5 + 5根据他们的每个得分进行得分,总分最高的抢劫犯会获胜。

进一步规则

  • 您不得使用任何内置函数进行散列,加密或随机数生成(即使您将随机数生成器植入固定值)。
  • 允许使用任何程序或函数,但代码不得为摘要,并且不得假定为REPL环境。
  • 您可以采用任何方便的格式输入并提供输出。两个序列的输入/输出方法必须相同。
  • Levenshtein距离这一挑战的权威计算器就是这个 Planet Calc上的计算器。
  • 除了作为一个CNR的挑战,这是因此所有往常一样打高尔夫球规则。

Answers:


7

Pyke,Levenshtein距离1,A036487A135628-得分5

崩裂的条目由muddyfish

wX*e

在这里尝试!

原始代码X*e平方输入X乘以输入*,然后将结果减半e

诀窍是,'X'在的基数96表示中为56 w,因此wX得出56,将其乘以输入,然后取下并减半,然后根据需要获得28倍的输入。


正是我所拥有的。持续时间略长于我的预期
蓝色

一看到它,我就知道这是预期的解决方案。
乔纳森·艾伦

4

Brain-Flak,28字节,距离4,A002817A090809

(({(({})[()])}{}){{({}[()])}{}})

这个答案是在蛮力工具的帮助下发现的,该工具生成了35,000个可能的程序(其中很多程序失衡,因此无效的大脑代码,但无论如何我还是找到了答案)。这大约是经过测试的2万个程序,大约花了一个小时才能找到(尽管我不知道它离开后距离我有多长时间了)。

我有点不想发布此答案,因为我尚未完全了解此程序的工作原理。但是,答案将是安全的,因此我不希望它过期。我希望在我完全理解它后再更新此答案,以及发布用于查找此答案的代码。但是现在,我只发布部分解释。

#Push the sum of:
(

    #The (n-1)th triangular number, and the range [1, n] (The range doesn't count towards the sum I believe)
    ({(({})[()])}{})

    #Triangulate every number on the stack
    {{({}[()])}{}}

)

这是有道理的,因为OEIS声明:

对于n> 0,此序列的项与a000124的关系为a(n)= sum(i * A000124(i),i = 0..n-1)。[Bruno Berselli,2013年12月20日]

A000124是三角形数字+1。但是,我不完全知道论坛是什么,因此我无法完全解释其工作原理。


3

Perl 6,19字节,X = 1,A000045→A000035

{(0,1,*+<*...*)[$_]}

+>代替+<也会起作用。

在线尝试!

怎么运行的

infix ...对于简单的递归序列非常有用。(0,1,*+*...*)原始代码的一部分,是以下代码的简写

(0, 1, -> $x, $y { $x + $y } ... *)

指定以01开头的序列,然后通过计算序列中前两项的总和来添加项。

相反,(0,1,*+<*...*)使用左移(+>,也可以右移)来构造奇偶校验序列。由于向左移动1个零单位为1,向左移动0个零单位为0,我们得到了所需的1和0交替模式。


2

Perl 6个字节,距离1-得分5

smls 的条目破解

*[0]o 1***

成为:

*[0]o 1*+*

在线试用!


做得好!我没想到这个解决方案,我的解决方案有些棘手,实际上需要将*[0]o 其存在。我想这意味着我可以根据我的“技巧”提出另一个挑战... :)
smls

我真的不了解Perl,只是看到了***并认为它可以展开二进乘法运算*,并且使用前面的参数,我真的不知道代码实际上在做什么。随时编辑一些解释!
乔纳森·艾伦

2
1***被解析为 1 ** *,即做“ 1的x的幂”的lambda。1*+*被解析为1 * (+*),即执行“ 1乘以(x转换为数字)”的lambda。
smls





1

JavaScript(ES6),距离1,高级

原版的:

as=function(){ return 2*2**((11)*-1*~arguments[0]/11-(4-(as+[]).length%89))-(as+[]).length%7}

裂纹:

as=function(){ return 0*2**((11)*-1*~arguments[0]/11-(4-(as+[]).length%89))-(as+[]).length%7}

在线尝试!

要么

as=function(){ return 2*1**((11)*-1*~arguments[0]/11-(4-(as+[]).length%89))-(as+[]).length%7}

在线尝试!

我以某种方式能够使它在TIO和repl.it之间表现出不同(绝对不知道为什么2 * 1 ^ ...等于repl.it等于0)


我太笨了,我没想过将2更改为0。这是B函数:as=function(){ return 2*2**((1^1)*-1*~arguments[0]/11-(4-(as+[]).length%89))-(as+[]).length%7}


1

Java,距离4,PeechA094683 A000290

原版的:

int x{double r=1;for(int i=0;i<42;i++)r=r/2+n/r/2;int k=(int)((int)n*(float)n/Math.pow(n,(Math.sin(n)*Math.sin(n)+Math.cos(n)*Math.cos(n))/2));return n%4%2==(int)Math.log10(Math.E)/Math.log((double)'H'-'@')?(int)r:k;}

裂纹:

int x{double r=1;for(int i=0;i<42;i++)r=r/2+n/r/2;int k=(int)((int)n*(float)n/Math.pow(n,(Math.sin(n)*Math.sin(n)+Math.cos(n)*Math.cos(n))/2));return n%4%1==(int)Math.log10(Math.E)/Math.log((double)'H'-'@')?(int)n*n:k;}
                                                                                                                                                          ^                                                         ^^^

返回n * n


1

Javascript,Advancid,距离为2,A059841 A000004的

仅将代码留在TIO链接之后,因为它似乎破坏了站点。

感谢@nderscore,他的代码我曾使用解密初始代码

有一些多余的代码,例如使用!! [] + [] + []代替!! [] + []。

!+ []-(!+ [])(+ 1-1)的添加最初阻止了解密。

在线尝试


1

Pyke,Levenshtein的距离为2,A008788,A007526

'SS^

在这里尝试!

怎么运行的

这确实混合了基础转换。

'S获取输入n并应用,将[1,...,n]推入堆栈。下一个S获取输入n并再次推送相同的数组。 '似乎导致下一个命令被应用到堆栈的前一个顶部;我对细节有些模糊。

最后,^适用混合基的转换,所以[1,...,N] [1,...,n]的 f单位计算
第(n):= [1] N + N +(N)(N-1).. 。+ [n!] 1,其中括号表示位置值,数字在其右边表示数字。

现在,a(n)=(1 +(1)(n-1)+(n-1)(n-2)(n-3)+ ... +(n-1)!)n = n( a(n)+ 1),这与在[A007526] 中定义a(n)的递归公式相同。由于空总和为零,因此a(0)= 0,并且基本情况也匹配。


这么少的尝试是如何得到的?我对您的思考过程感兴趣
Blue

混合基础转换是相当普遍的高尔夫技巧。这不是我第一次使用它。
丹尼斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.