莱文施泰因距离和OEIS(抢劫犯)


11

这是强盗帖子。该警察职位是在这里


您的任务是采用整数输入N并按顺序OEIS A002942输出第N个数字。

该序列由向后写的平方数组成:

1, 4, 9, 61, 52, 63, 94, 46, 18, 1, 121, 441, ...

请注意,前导零被修剪掉了(100变为1,而不是001)。将其连接成一个字符串(或一个长数字给出):

1496152639446181121441

您应在此字符串/数字中输出第N个数字。您可以选择将N设为0索引或1索引(请说明您选择了哪一个)。

测试用例(1索引):

N = 5,      ==> 1
N = 17,     ==> 1   <- Important test case! It's not zero.
N = 20,     ==> 4
N = 78,     ==> 0
N = 100,    ==> 4
N = 274164, ==> 1

您的代码应适用于最大N = 2 ^ 15的数字(除非您的语言默认不能处理32位整数,在这种情况下N可以更低)。


强盗:

您应该尝试破解警察的帖子。

您的代码必须与警察使用的语言相同,并且Levenshtein距离与警察给出的距离完全相等。您的代码不能超过原始解决方案的长度(但可以是相同大小)。

您可以在这里查看Levenshtein距离!

获胜者将是破解最多职位的强盗。


请稍等...如果强盗的结果不必与原定程序相同...警察是否不能只编写一个程序并弥补一段距离...?
Magic Octopus Urn'Nov

好吧,警察必须提供替代代码,以将提交的内容标记为安全并有资格获得胜利。我已经在警察岗位上澄清了。:)
Stewie Griffin's

我从未尝试过警察和强盗的挑战。这一切让我非常困惑哈!
魔术章鱼缸

Answers:



3

JavaScript,Arnauld

/*ZZ*/m=>[...Array(m+1).keys()].map(eval(atob("eD0+K1suLi4iIit4KnhdLnJldmVyc2VgYC5qb2luYGA="))).join``[m]

1
@Arnauld好的,我认为已Array(m+1)解决。
林恩

是的 FWIW,我已经在帖子中添加了预期的解决方案。
Arnauld



2

Felix Palmen 6502机器代码(C64)

我用所有问题测试用例和相当多的额外功能(例如花了2 ^ 15 ...花费了一段时间)对它进行了测试,它的工作原理与原始的LD = 1相同。

00 C0 20 FD AE A0 00 99 5B 00 C8 20 73 00 90 F7 99 5B 00 A2 0B CA 88 30 09 B9
5B 00 29 0F 95 5B 10 F3 A9 00 95 5B CA 10 F9 A9 01 A0 03 99 69 00 88 10 FA A0
20 A2 76 18 B5 E6 90 02 09 10 4A 95 E6 E8 10 F4 A2 03 76 69 CA 10 FB 88 F0 11
A2 09 B5 5C C9 08 30 04 E9 03 95 5C CA 10 F3 30 D6 A2 03 B5 69 95 57 CA 10 F9
A9 01 85 FB A2 03 A9 00 95 FB CA D0 FB A2 03 B5 FB 95 22 95 26 CA 10 F7 A9 00
A2 03 95 69 CA 10 FB A0 20 A2 02 46 25 76 22 CA 10 FB 90 0C A2 7C 18 B5 AA 75
ED 95 ED E8 10 F7 A2 7D 06 26 36 AA E8 10 FB 88 10 DD A0 0B A9 00 99 5A 00 88
D0 FA A0 20 A2 09 B5 5C C9 05 30 04 69 02 95 5C CA 10 F3 06 69 A2 FD 36 6D E8
D0 FB A2 09 B5 5C 2A C9 10 29 0F 95 5C CA 10 F4 88 D0 D7 E0 0A F0 05 E8 B5 5B
F0 F7 09 30 99 5B 00 C8 E8 E0 0B F0 04 B5 5B 90 F1 88 B9 5B 00 C9 30 F0 F8 A2
7C 18 B5 DB E9 00 95 DB E8 10 F7 90 14 88 30 05 B9 5B 00 D0 EA A2 7C F6 7F D0
03 E8 10 F9 4C 73 C0 B9 5B 00 4C D2 FF

在线演示,用法:sys49152,n,其中n是0索引的输入。


这是正确的,因为您发现了一些我不知道的完全没用的代码,并且代码中发生了更改:o
Felix Palmen

1

卢卡Katenkyo)

i=1s=""while(#s<...+0)do s=s..((i*i)..""):reverse():gsub("(0+)(%d+)$","%2")i=i+1 end
print(s:sub(...,...))

在线尝试!

我不知道Lua,但是这很简单,只是用换行符代替了一个空格。


哼,没想到这件事,原来是有关替换(0+)(%d+)$(0+)(%d+),所以这是对正则表达式^^”
Katenkyo


1

python 2迪南

d=lambda y:y if y%10>0 else d(y/10)
lambda n:''.join([str(d(x*x))[::-1]for x in range(1,n+1)])[n-1]#fix

在线尝试!

注意:此警察提交的文档有错误,并且对于低于5的输入不起作用。


1

Perl 5,(-p)Xcali

评论后更新,Levenshtein之间的距离

a$j.=int reverse$_**2for 1..$_;$_--;say$j=~s/.{$_}(.).*/$1/r

p$_=substr w.(join"",map{whyddwzz;0|reverse$_**2}1..$_),$_,1

是55

在线尝试


鉴于M5.010是“免费的”,因此我认为这不应该计入。我不太确定如何计算-avs -p标志。我想出的两个解决方案都使用相同的标志。我认为旗帜只会在没有空格的情况下被钉在前面,但是我愿意被其他人所左右。
Xcali's

更新了我的答案
Nahuel Fouilleul

1

Java 8,凯文·克鲁伊森

/*!FooBarFooBarFoo!*/N->{String R="",T=R;for(int I=1,J;N+2>R.length();I++){for(T="",J=(I*I+"").length();0<J;T+=(I*I+"").charAt(--J));R+=new Long(T)+"";}return R.charAt(N);}

在线尝试!

变更记录

  • 替换.replaceAll()new Long()
  • 删除了完美正方形的测试。现在直接使用完美正方形。
  • 将所有变量名称更新为大写。
  • 改写不平等。
  • 最后添加了一个21字节的前导注释以到达正确的LD。

1
不错哦。这与我的想法完全不同,但是很高兴您还是获得了92 LD。我想到的解决办法是:n->{String r="";for(int i=1;r.length()<=n+1;r+=new Long(new StringBuffer(i*i+++"").reverse()+""));return r.charAt(n);}118个字节,92 LD相比,我的其他答案。)
凯文Cruijssen

1

八度Stewie新

@(n)regexprep(fliplr(num2str((1:n)'.^2))'(:)',' +0*','')(n)%abcdefghijk

在线尝试!

我实际上是在尝试自己的八度音阶答案,并发现了现有的八度音阶答案。我的已经大大缩短了,因此在末尾添加注释足以达到要求的距离63。


做得好:-)我经历了一个循环,input()所有相关的事情……
Stewie Griffin

1

PHP,Jo。

<?for($j++;strlen($p)<$argv[1];$j++)$p.=(int)strrev($j**2);echo($p[$argv[1]+2-3]);

在线尝试!

(我正计划切换不等式以获得更大的LD ...)


0

Felix Palmen 6502机器代码(C64)

也可能是“简单的”裂缝,但看起来像原始裂缝一样。
LD = 1只是想尝试破解它(很抱歉,Felix)。:)

00 C0 20 FD AE A0 00 99 5B 00 C8 20 73 00 90 F7 99 5B 00 A2 0B CA 98 88 30 09
B9 5B 00 29 0F 95 5B 10 F2 95 5B CA 10 FB A0 20 A2 76 18 B5 E6 90 02 09 10 4A
95 E6 E8 10 F4 A2 03 76 69 CA 10 FB 88 F0 11 A2 09 B5 5C C9 08 30 04 EB 03 95
5C CA 10 F3 30 D6 A2 03 B5 69 95 57 CA 10 F9 A9 01 85 FB A2 03 A9 00 95 FB CA
D0 FB A2 03 B5 FB 95 22 95 26 CA 10 F7 A9 00 A2 03 95 69 CA 10 FB A0 20 A2 02
46 25 76 22 CA 10 FB 90 0C A2 7C 18 B5 AA 75 ED 95 ED E8 10 F7 A2 7D 06 26 36
AA E8 10 FB 88 10 DD A2 0B A9 00 95 5A CA D0 FB A0 20 A2 09 B5 5C C9 05 30 04
69 02 95 5C CA 10 F3 06 69 A2 FD 36 6D E8 D0 FB A2 09 B5 5C 2A C9 10 29 0F 95
5C CA 10 F4 88 D0 D7 E8 B5 5B F0 FB 09 30 99 5B 00 C8 E8 E0 0B F0 04 B5 5B 90
F1 88 B9 5B 00 C9 30 F0 F8 A2 7C 18 B5 DB E9 00 95 DB E8 10 F7 90 14 88 30 05
B9 5B 00 D0 EA A2 7C F6 7F D0 03 E8 10 F9 4C 68 C0 B9 5B 00 4C D2 FF

在线演示,用法:sys49152,n,其中n是0索引的输入。


我不确定是否必须接受这一点。它取代E9(减法命令)由EB未定义在6502机器代码,但发生这样做对NMOS 6502和6510个芯片。例如,该程序将在C64 DTV1上崩溃。但是,不太可能找到无法正确执行的真正 C64,因此可以认为它是有效的破解工具?我可能会要求对元评论....
费利克斯Palmen


@FelixPalmen我很快就会把这个答案记下来。

保留它,另请参阅我对meta的评论。社区明确表示它是有效的。我的缺点是不需要仅记录在案的6502代码,将来我会牢记这一点。
菲利克斯·帕尔曼
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.