众所周知,quine是一个输出自己的源代码的程序。然而,也有可能编写一个程序,输出另一个不同的程序,再次输出第一个程序。例如,Python 2程序
x = '''x = {}
print 'print '+'"'*3+x.format("'"*3+x+"'"*3)+'"'*3'''
print 'print '+'"'*3+x.format("'"*3+x+"'"*3)+'"'*3将在运行时输出以下文本:
print """x = '''x = {}
print 'print '+'"'*3+x.format("'"*3+x+"'"*3)+'"'*3'''
print 'print '+'"'*3+x.format("'"*3+x+"'"*3)+'"'*3"""当作为Python程序运行时,这将再次输出原始代码。这叫做迭代奎因。因为你必须运行两次才能得到原来的代码,我们说它有句点2,但是当然,更高的周期是可能的。
您的挑战是用您所选择的语言,以100字节或更少的长度,用尽可能长的时间来编写一个迭代quine。(请注意,上面的示例不符合这个规范,因为它是119个字节,包括后面的换行符。)
请注意以下规则和澄清:
请注意:存在一个名为停止发牢骚;开始抱怨的现有挑战,它还涉及迭代quine。然而,除了基于相同的概念之外,这些都是完全不同类型的挑战。另一个是直接代码高尔夫,而这个是(故意!)真是个伪装的忙碌的海狸问题。为这个问题提供一个好答案所需的技术很可能与回答另一个问题所需的技术有很大的不同,这在很大程度上取决于设计。
发布于 2016-09-02 12:08:19
的随机周期
f=function(){
options(scipen=50)
body(f)[[4]]<<-sum(runif(623))
0
cat("f=")
print(f)
}R的默认随机数发生器的周期为2^19937-1,并在623个连续维数中等量分布。因此,在它的周期中某个地方(但只有一次)将是一个623长的零向量.当我们到达那里(并与序列开始对齐),下一个623个随机U0,1数的和将为零,我们返回到我们原来的程序。
请注意,在返回到零之前,程序将以非常高的概率通过相同的非零状态几次。例如,sum 311.5是最有可能发生的,有很多方法可以发生,但是RNG允许0的时间比311.5的时间长。
发布于 2020-01-28 16:42:40
期间:9\uparrow((99\uparrow\uparrow(9\uparrow((99\uparrow\uparrow(9\uparrow((99\uparrow\uparrow(9\uparrow\uparrow5-1))\uparrow9)-1))\uparrow9)-1))\uparrow9)+1
感谢@Bubbler从9\uparrow9\uparrow(99\uparrow\uparrow12)+1到现在的增长周期
b=0;s="print'b=%d;s=%r;exec s'%(-~b%eval('9**9'*eval('9**9'*eval('9**9'*9**9**9**9**9))),s)";exec s在代码中,b=0更改为b=1,然后是b=2,等等,直到它到达b=decimal expansion of the period,然后重新设置为b=0
发布于 2016-09-07 01:26:25
不会赢,但在这个挑战上与JavaScript合作是很有趣的:
a="a=%s;console.log(a,uneval(a),%.0f-1||90071992547e5)";console.log(a,uneval(a),1-1||90071992547e5)遵循以下周期:
a="a=%s;console.log(a,uneval(a),%.0f-1||90071992547e5)";console.log(a,uneval(a),1-1||90071992547e5)
a="a=%s;console.log(a,uneval(a),%.0f-1||90071992547e5)";console.log(a,uneval(a),9007199254700000-1||90071992547e5)
a="a=%s;console.log(a,uneval(a),%.0f-1||90071992547e5)";console.log(a,uneval(a),9007199254699999-1||90071992547e5)
a="a=%s;console.log(a,uneval(a),%.0f-1||90071992547e5)";console.log(a,uneval(a),9007199254699998-1||90071992547e5)
// etc...
a="a=%s;console.log(a,uneval(a),%.0f-1||90071992547e5)";console.log(a,uneval(a),3-1||90071992547e5)
a="a=%s;console.log(a,uneval(a),%.0f-1||90071992547e5)";console.log(a,uneval(a),2-1||90071992547e5)
a="a=%s;console.log(a,uneval(a),%.0f-1||90071992547e5)";console.log(a,uneval(a),1-1||90071992547e5)
a="a=%s;console.log(a,uneval(a),%.0f-1||90071992547e5)";console.log(a,uneval(a),9007199254700000-1||90071992547e5)
// and so on注意:您可以使它缩短18个字节,而只删除分数的0.08%,如下所示:
a="a=%s;console.log(a,uneval(a),%.0f-1||9e15)";console.log(a,uneval(a),1-1||9e15)https://codegolf.stackexchange.com/questions/91332
复制相似问题