mbomb007要求我们编写一个自毁程序。这是一个有趣的挑战,但是我个人不喜欢鼓励自己的程序自残。我喜欢认为,每个程序的核心都是一只等待爆发的美丽蝴蝶。
因此,对于我的第一个Code Golf挑战,我挑战Stack Exchange将蝴蝶变身。您的程序应接受自己的代码作为输入和输出,I am a caterpillar!
然后接受相同语言的另一个程序的代码(您可以在输出之间添加一个分隔符,但是我们说的是蝴蝶,所以漂亮才算重要!)。第二个程序应该输出I am a beautiful butterfly!
变形:该程序应自行修改,这就是为什么将其本身作为输入传递的原因。我不想一个无聊的嵌套程序,只不过是一个打印语句,I am a caterpillar!
然后打印源代码。您必须使代码本身变形,因此,最无聊的可接受答案是将其打印出来I am a caterpillar
,然后从输入中截取一个字符串(恰好是代码)并将其打印出来。当然,这是一个非常棘手的小要求,因此应将其视为“挑战的精神”。正式的要求将设置为“如果给您的程序一个与程序长度相同的随机字符串,则在I am a butterfly
运行第二个程序时,打印的机会应该少于5%。”
摘要:
- 编写一个程序,当提供自己的代码作为输入时,先打印程序,
I am a caterpillar!
然后打印源代码块(在它们之间是否有定界符)。 - 编译/解释为相同语言时,第二部分源代码将输出
I am a beautiful butterfly!
- 如果您的程序没有以其自身的源代码作为输入,而是被赋予一个随机字符串,该字符串与自身的代码不匹配,则结果必须无法编译/解释,或者必须
I am a butterfly!
至少打印95%的随机字符字符串(精神:您应该从输入中读取您自己的源代码,并将其拼接成蝴蝶状)。- 只要您坚持变形概念的精神,修改自己的代码,我对您不感到满意,但是如果您尝试玩漏洞游戏来解决输入问题,证明这一点。
- 适用标准漏洞
我希望通过它们的美观来判断它们,但这是绝对非量化的方法,因此可以使用通常的“字节数”路由来判断
奖励:-20%-选择与程序的前3个字母不匹配的任何3个字母字符串。如果运行卡特彼勒程序,但修改输入,以便将前3个字符更改为指定的字符,请打印I am Batman!
。永远是蝙蝠侠。(相同的随机字符串规则也适用于此……变态!)
简单示例(python):
"""
print "I am a beautiful butterfly!"
#print "I am Batman!"
"""
import sys
code = sys.stdin.read()
if code.startswith("YYZ"):
# swap the comments between the print statements
code = code.replace("#print", "_a").replace("print", "#print").replace("_a", "print")
code = [3:] # remove """ or XYZ
code = code.split('"""')[0]
print "I am a caterpillar!"
print code