Python,0(限制为(68 + 3 n)/(16 n)的限制)
如果两个抽象语法树的常量不同,那么它们也不同,
r='r=%r;n=(0x%XL+1)%%0x10...0L;print r%%(r,n)';n=(0xF...FL+1)%0x10...0L;print r%(r,n)
有16最多 n个程序,长度最多为68 + 3n,渐近得分为0。
如果您想要具有可变结构的程序,我们可以在n位上实现二进制加法器。在这里,有2 个长度为O(n 2)的程序。由于进位丢失而进入一个周期。
s="""
print 's='+'"'+'"'+'"'+s+'"'+'"'+'"'
n=lambda m:reduce(lambda (s,c),y:(s+(c^y,),c&y),m,((),1))[0]
print s[:112]
t=n(t)
print "t=(%s,)+(0,)*%s"%(t[0],len(t)-1)
for i in range(len(t)-1):
print i*' '+'for i in range(2):'
print ' '+i*' '+['pass','t=n(t)'][t[i+1]]
print s[113:-1]
"""
print 's='+'"'+'"'+'"'+s+'"'+'"'+'"'
n=lambda m:reduce(lambda (s,c),y:(s+(c^y,),c&y),m,((),1))[0]
print s[:112]
t=(0,)+(0,)*10
for i in range(2):
t=n(t)
for i in range(2):
t=n(t)
for i in range(2):
t=n(t)
for i in range(2):
t=n(t)
for i in range(2):
pass
for i in range(2):
t=n(t)
for i in range(2):
pass
for i in range(2):
pass
for i in range(2):
pass
for i in range(2):
t=n(t)
t=n(t)
print "t=(%s,)+(0,)*%s"%(t[0],len(t)-1)
for i in range(len(t)-1):
print i*' '+'for i in range(2):'
print ' '+i*' '+['pass','t=n(t)'][t[i+1]]
print s[113:-1]