多亏了用户Step Hen,Wheat-Wizard和Dennis,他们在发布之前帮助我巩固了这一挑战的规格!
这是警察的话题。有关强盗的线索,请转到此处
在这个挑战中,您需要运行一些代码来使您的语言不再满足我们成为编程语言的条件。在这一挑战中,这意味着要做到这一点,以便不再能使用该语言...
进行数字输入和输出
将两个数字相加
测试某个数字是否为质数。
这是警察和强盗的挑战,其中有两个不同的挑战,目标是两个不同:警察将尝试编写一些使该语言几乎不可用的代码,而强盗将尝试找到允许警察使用的隐藏变通方法恢复他们的语言。
作为警察,您必须编写两个代码段:
一种使您的语言几乎不可用的方法,例如,通过删除用于进行输入/输出和数字运算的内置函数。您删除的功能越多越好。此代码是不是允许崩溃或退出。应该可以在此代码段的末尾添加代码,并且该代码将得到评估。和...
...将两个非负整数作为输入,将它们加在一起并输出其和的代码段。即使运行第一个代码段后,该代码段也必须仍然能够正常运行。当两个代码片段组合在一起时,它们必须形成一个将两个数字相加的完整程序,或者定义一个将两个数字相加的函数。理想情况下,此代码段应依赖于非常晦涩的行为,以便更难找到。
您可以选择任何标准的输入和输出方法。但是,您必须准确显示所使用的格式(输入和输出)。除非他们使用与您相同的格式,否则强盗无法破解您的答案。
编写完这两个片段后,您必须发布第一个片段作为答案,而不必透露第二个片段。您的答案应包含以下所有信息:
第一个摘要(显然不是第二个)。
语言(包括次要版本,因为大多数提交可能都依赖于奇怪的情况)
IO格式,包括功能或完整程序。强盗必须使用相同的格式来使破解生效。
任何奇怪的情况下,您的答案才能起作用。例如,仅在linux上运行,或者需要Internet连接。显然,这是有点主观的,但是如果警察具有某种极端的边缘情况以防止其破裂,然后仅在安全后才显示出来,我认为这是差劲的运动精神。潜在的抢劫犯应该掌握所有必要的信息,以便在破解之前将其破解。
除非您的答案是安全的,否则您无需透露字节数。
这是一个例子。对于第一个代码段,您可以提交以下Python 3程序:
Python 3
print=None
从STDIN接收输入并输出到STDOUT
然后作为第二个片段,您可以编写:
import sys
a,b=int(input()),int(input())
sys.stdout.write(a+b)
这是有效的,因为它将两个数字作为输入,并且即使您将两个摘要合并在一起也可以输出它们的总和,例如
print=None
import sys
a,b=int(input()),int(input())
sys.stdout.write(a+b)
但是,这对于抢劫犯来说非常容易找到解决方案。由于这很容易破解,因此您可以尝试修补这种特定方法,如下所示:
import sys
sys.stdout=None
print=None
但是,即使这样也有非常简单的解决方法:
del print
a,b=int(input()),int(input())
print(a+b)
作为警察,您的目标是使隐藏的变通办法尽可能模糊,以防止强盗找到它。
该劫匪会看你的答案之一,并试图破解它。他们可以编写任何可以用作代码片段2的有效代码片段(在使该语言几乎不可用之后将两个数字加在一起)来破解它。但这不是必须是相同的片断,你原本打算。如果强盗破解了您的答案,他们将在您的答案上留下评论,然后您应对其进行编辑以表明它已被破解。如果您的帖子被破解,则应编辑答案以显示您最初打算的解决方案(代码段2)。这本身不是规则,只是为了保持游戏趣味性的友好建议。你不必。
如果一个星期都没有弄清答案,则可以在第二个片段中进行编辑,并指出您的答案现在是安全的。如果您在一周结束后仍未对其进行编辑,则其他用户仍可以对其进行破解,直到您这样做为止。如果您不显示第二个摘要,则无法为您的答案要求分数,也可以称之为安全。
警察线程的胜者是最短的安全答案,包括两个摘要(以字节为单位),并且经过足够的时间后,才会接受此答案。你不是要透露你的字节数,直到你的答案是安全的,因为字节数无关,你的分数,直到你的答案是安全的。如果有足够的时间过去,并且没有答案,那么赢家将是在最长时间内保持不变的答案。
玩得开心!
规则澄清
第一个代码段必须正确运行而不需要任何输入。它可能会输出您喜欢的任何内容,并且该输出将被忽略-只要在代码段完成后,第二个代码段即可正确运行。
为了使您的答案有效,实际上必须执行第二个代码段。这意味着答案像
import sys sys.exit()
无效,因为它不会破坏语言。它只是退出。同样,进入无限循环也是无效的,因为第二个代码段将永远不会执行。
安全后,您的得分就是两个代码段的字节数。
这可以回溯到“ 请揭示工作答案所需的任何奇怪的情况 ……”。您提交的内容必须包含足够的信息,然后才能显示出来,以便在显示出来之后可以重现。这意味着,如果您的答案变得安全,然后您输入:这是我的答案。哦,是的,BTW仅在您在Solaris上运行时有效,笑话就在您身上!您的答案无效,将被删除,不符合获奖资格。
在输出总和后,第二个代码段将允许崩溃-只要输出仍然正确(例如,如果您选择输出到STDERR,然后获得一堆崩溃信息,则此无效)。
提交答案后,您可能无法编辑代码。
您可能不依赖加密,散列函数,CSPRNG等加密功能。
int main(){ do_evil_stuff(); }
用户代码应该放在哪里?在功能上?在所有陈述之后main
?