打高尔夫球的数字大于装载机的数字


18

作为输出量超过Graham数Golf数大于TREE(3)的最短终止程序的后续程序,我提出了一个新的挑战。

装入程序的数量非常大,很难解释(因为它本身是具有灵活目标的代码高尔夫练习的结果)。有一个定义和解释在这里,但自我封闭的目的,我将试图在这个帖子后面解释它。

Ralph Loader所使用的算法可产生有史以来最多的(可计算的)算法之一!实际上,Loader的号码是Googology Wiki上最大的“可计算”号码。(“可计算”数字是指根据计算定义的数字。)这意味着,如果答案以有趣的方式生成的数字大于Loader的数字(即不只是Loader的数字+1),您可以在谷歌历史!话虽如此,产生类似Loader的number + 1之类的程序绝对是这个问题的有效答案和竞争者。只是不要期望任何名气。

您的工作是创建一个终止程序,该程序产生的数字大于 Loader的数字。这是,所以最短的程序会获胜!

  • 您不允许输入。
  • 您的程序最终必须确定性终止,但是您可以假定计算机具有无限的内存。
  • 您可能会假设您的语言的数字类型可以包含任何有限值,但是需要解释一下它在您的语言中的确切工作方式(例如:浮点数具有无限精度吗?)
    • 不允许将无穷大作为输出。
    • 数字类型的下溢引发异常。它不会环绕。
  • 您需要提供一个解释,说明为什么您的电话号码如此之大以及代码的版本不正确,以检查您的解决方案是否有效(因为没有计算机具有足够的内存来存储Loader的电话号码)。

因此,这里是装载机编号的说明。有关更精确的详细信息,请参见http://googology.wikia.com/wiki/Loader%27s_number及其链接。特别是,它包含一个程序,该程序可以准确地生成Loader的编号(根据定义)。

结构的微积分本质上是一种编程语言,它的特殊性质。

首先,每个句法有效的程序都会终止。没有无限循环。这将非常有用,因为这意味着如果我们运行任意的构造程序演算,我们的程序将不会卡住。问题在于,这意味着构造的演算尚未完成图灵的计算。

其次,在非图灵完整语言中,它是最强大的语言之一。本质上,如果您可以证明图灵机在每个输入上都将停止,则可以在构造演算中模拟该功能的函数。(这并不能完成巡视,因为您无法证明正在停止的巡回机器已经停止。)

装入程序的编号本质上是用于构造演算的忙碌的海狸编号,由于所有coc程序均终止,因此可以计算该编号。

特别是,loader.c定义了一个名为的函数D。大约D(x)在所有小于的位串上进行迭代x,将它们解释为coc程序,运行语法上有效的程序,并将结果(也将是位串)连接起来。它返回此串联。

加载程序的编号为D(D(D(D(D(99)))))

来自Googolology Wiki的更具可读性的代码副本

int r, a;

P(y,x){return y- ~y<<x;}

Z(x){return r = x % 2 ? 0 : 1 + Z (x / 2 );}

L(x){return x/2 >> Z(x);}

S(v,y,c,t){
   int f = L(t);         
   int x = r;
   return f-2 ? f>2 ? f-v ? t-(f>v)*c : y : P(f,P(S(v,y,c,L(x)), S(v+2,t=S(4,13,-4,y),c,Z(x)))) : A(S(v,y,c,L(x)),S(v,y,c,Z(x)));
}

A(y,x){return L(y)-1 ? 5<<P(y,x) : S(4,x,4,Z(r));}

D(x) 
{
   int f;
   int d;
   int c=0;
   int t=7;
   int u=14;
   while(x&&D(x-1),(x/=2)%2&&(1)){
      d = L(L(D(x))),
      f = L(r),
      x = L(r),
      c - r||(L(u)||L(r)-f||(x/=2)%2&&(u=S(4,d,4, r),t=A(t,d)),f/2&(x/=2)%2&&(c=P(d,c),t=S(4,13,-4,t),u=S(4,13,-4,u))),
      c&&(x/=2)%2&&(t=P(~u&2|(x/=2)%2&&(u=1<<P(L(c),u)),P(L(c),t)),c=r)
      u/2&(x/=2)%2&&(c=P(t,c),u=S(4,13,-4,t),t=9);
    }
    return a = P( P( t, P( u, P( x, c)) ),a);
}

main(){return D(D(D(D(D(99)))));}

6
对于与TREE(3)问题的相似之处,我建议不要对此予以否决:装载程序的数量比TREE(3)大得多,因此需要新的有趣的方法。
lirtosiast

2
@ fəˈnɛtɪk好吧,从代码高尔夫球的角度来看,打印Loader的数字+1仍然很有趣(例如,您能打败原始的512个字节吗?)还有一些自然的对loader的数字的概括,可能更容易实现(例如,使用ZFC而不是CoC)。同样,可以使用贪心集团序列或有限承诺游戏。
PyRulez '18

2
不幸的是,由于我不了解Loader编号的构造,并且在快速增长的层次结构方面似乎没有已知的上限,因此在这里我无法给出任何好的答案。我相信大多数答案将是Loader数量的扩展,或者是贪心集团序列和有限承诺游戏之类的东西
Simply Beautiful Art

1
@SimplyBeautifulArt哦,男孩,如果您不理解它,那么对于这个挑战来说并不是一个好兆头。:PI可以尝试在聊天中向您更详细地解释它,但我也不知道任何层次结构的上限。
PyRulez

1
@SimplyBeautifulArt特别是,由于特别选择了Loader的常数以尝试使其成为由一定数量的代码生成的最大数字(其中Graham的数字和TREE(3)只是在数学上很有趣的数字上碰巧很大),因此认为大多数的答案也只是Loader的数量+ 1
PyRulez

Answers:


9

的JavaScript,d ^ 6(9)(508 501 495 492 487个 485个 481字节)

_='r=a=0,PN,yEx-~x<<y,ZNEr=x%2?0:1+ZC>>1@LNEx/2>>ZC@S=Bt,f=Ht@x=rEf-2?f>2?f-v?t-(f>v)*c:y:Ff,FSO(v+2,t8y@c,ZCMM:A(AOBZC)GAN,yELC)-1?5<<PC,y):Iy,4,Z(rGDN,f,dQ=0,t=7,u=14Eeval("whileC&&DC-1@61Md=HHDC)Gf=Hr@x=Hr@c-r||(Hu)||Hr)-f||6u=Id,4,r@t=A(t,dGfJdQ@t8t@u8u)Gc&&6t=F~u&2|6u=1<<FHc@uGFHc@tGc=r@uJtQ@u8t@t=9);a=FFt,Fu,PCQ)Ga)"@KKK9MMM6C>>=1)%2&&(8=I13,-4,G)@@),B(v,yQ,N=COBLCGSC(xE)=>J/2&6c=FFP(HL(IS(4,KD(D(M))Q,c';for(Y of $='QMKIHFJECONB@G86')with(_.split(Y))_=join(pop());eval(_)

这是一个编码的代码。

_='r=a=0,PN,yEx-~x<<y,ZNEr=x%2?0:1+ZC>>1@LNEx/2>>ZC@S=Bt,f=Ht@x=rEf-2?f>2?f-v?t-(f>v)*c:y:Ff,FSO(v+2,t8y@c,ZCMM:A(AOBZC)GAN,yELC)-1?5<<PC,y):Iy,4,Z(rGDN,f,dQ=0,t=7,u=14Eeval("whileC&&DC-1@61Md=HHDC)Gf=Hr@x=Hr@c-r||(Hu)||Hr)-f||6u=Id,4,r@t=A(t,dGfJdQ@t8t@u8u)Gc&&6t=F~u&2|6u=1<<FHc@uGFHc@tGc=r@uJtQ@u8t@t=9);a=FFt,Fu,PCQ)Ga)"@KKK9MMM6C>>=1)%2&&(8=I13,-4,G)@@),B(v,yQ,N=COBLCGSC(xE)=>J/2&6c=FFP(HL(IS(4,KD(D(M))Q,c'; //encoded code
for(Y of $='QMKIHFJECONB@G86')with(_.split(Y))_=join(pop()); //decoding algorithm
eval(_) //Evaluation of the string

解码代码:

r=a=0,P=(x,y)=>x-~x<<y,Z=(x)=>r=x%2?0:1+Z(x>>1),L=(x)=>x/2>>Z(x),S=(v,y,c,t,f=L(t),x=r)=>f-2?f>2?f-v?t-(f>v)*c:y:P(f,P(S(v,y,c,L(x)),S(v+2,t=S(4,13,-4,y),c,Z(x)))):A(A(v,y,c,L(x)),S(v,y,c,Z(x))),A=(x,y)=>L(x)-1?5<<P(x,y):S(4,y,4,Z(r)),D=(x,f,d,c=0,t=7,u=14)=>eval("while(x&&D(x-1),(x>>=1)%2&&(1))d=L(L(D(x))),f=L(r),x=L(r),c-r||(L(u)||L(r)-f||(x>>=1)%2&&(u=S(4,d,4,r),t=A(t,d)),f/2&(x>>=1)%2&&(c=P(d,c),t=S(4,13,-4,t),u=S(4,13,-4,u))),c&&(x>>=1)%2&&(t=P(~u&2|(x>>=1)%2&&(u=1<<P(L(c),u)),P(L(c),t)),c=r),u/2&(x>>=1)%2&&(c=P(t,c),u=S(4,13,-4,t),t=9);a=P(P(t,P(u,P(x,c))),a)"),D(D(D(D(D(D(9))))))

解码后的代码(条件和内容从loader.c中保留):

var r=a=0;
function P(y,x){
  return y-~y<<x;
}
function Z(x){
  return r=x%2?0:1+Z(x>>1);
}
function L(x){
  return x/2>>Z(x);
}
function S(v,y,c,t){
  var f=L(t),x=r;
  return f-2?
           f>2?
             f-v?
               t-(f>v)*c
               :y
             :P(f,P(S(v,y,c,L(x)),S(v+2,t=S(4,13,-4,y),c,Z(x))))
           :A(S(v,y,c,L(x)),S(v,y,c,Z(x)))
}
function A(y,x){
  return L(y)-1?
         5<<P(y,x):
         S(4,x,4,Z(r));
}
function D(x){
  var f,
      d,
      c=0,
      t=7,
      u=14;
  while(x&&D(x-1),(x>>=1)%2&&(1))
    d=L(L(D(x))),
    f=L(r),
    x=L(r),
    c-r||(
      L(u)||L(r)-f||
      (x>>=1)%2&&(
        u=S(4,d,4,r),t=A(t,d)
      ),
      f/2&(x>>=1)%2&&(
        c=P(d,c),
        t=S(4,13,-4,t),
        u=S(4,13,-4,u)
      )
    ),
    c&&(x>>=1)%2&&(
      t=P(
        ~u&2|(x>>=1)%2&&(
          u=1<<P(L(c),u)
        ),
        P(L(c),t)
      ),
      c=r
    ),
    u/2&(x>>=1)%2&&(
      c=P(t,c),
      u=S(4,13,-4,t),
      t=9
    );
  return a=P(P(t,P(u,P(x,c))),a)
};
D(D(D(D(D(D(9))))))

在这种情况下,假定为:

  • 无限调用栈
  • 无限记忆
  • 无限精度 Number
  • 无限量级 Number
  • 位移位和按位运算符适用于无限位整数,而不是53位。按位取反仍会取反符号位。

编码/解码算法:

编码如下:

  • 重复一个字符串,将其称为S。
  • 将代码中的所有S替换为密钥K。
  • 将K和S放在最后。
  • 列出密钥,并放入解码算法,以便代码实际运行。

解码算法:

  • 取得钥匙清单。
  • 取最早的钥匙K。
  • 为每个K拆分字符串。
  • 由于数组的最后一个是替换KS的内容,因此将其弹出,然后通过将数组与弹出的值S连接起来来替换所有K。

压缩是使用此代码完成的,仅选中最后一个框。因为这将首先编码最大的保存,所以它不是最有效的压缩,但是我也不知道如何缩小它。

JavaScript,(339个字符

eval("_㴧爽愽〬偍ⱹ䕸⵾砼㱹ⱚ䵅爽砥㈿〺ㄫ婃㸾ㅀ䱍䕸⼲㸾婃䁓㵂琬昽䡴䁸㵲䕦ⴲ㽦㸲㽦⵶㽴⴨显瘩⩣㩹㩆昬䙓丨瘫㈬琸祀挬婃䭋㩁⡁乂婃⥇䅍ⱹ䕌䌩ⴱ㼵㰼偃ⱹ⤺匨㐬礬㐬娨片䑍ⱦⱤⱣ㴰ⱴ㴷Ⱶ㴱㑅敶慬⠢睨楬敃☦䑃ⴱ䀶ㅋ搽䡈䑃⥇昽䡲䁸㵈牀挭牼簨䡵⥼籈爩ⵦ籼㙵㵓⠴ⱤⰴⱲ䁴㵁⡴Ɽ䝦䥤Ᵽ䁴㡴䁵㡵⥇挦☶琽䙾甦㉼㙵㴱㰼䙈捀畇䙈捀瑇挽牀畉琬捀甸瑀琽㤩㭡㵆䙴ⱆ甬偃Ᵽ⥇愩≀䩊䨹䭋䬶䌾㸽ㄩ┲☦⠸㵓⠴ⰱ㌬ⴴⱇ⥀䀩ⱂ⡶ⱹⱣⱍ㵃乂䱃䝓䌨硅⤽㹉⼲☶挽䙆倨䡌⡊䐨䐨䬩⤧㭦潲⡙映␽❋䩈䙉䕃乍䉀䜸㘧⥷楴栨弮獰汩琨天⥟㵪潩渨灯瀨⤩㭥癡氨弩".split``.map(a=>(d=String.fromCharCode)((c=a.charCodeAt())>>8)+d(c&255)).join``.slice(1))

此代码将16位字符串作为a,将其转换为具有相同二进制(BE)的8位字符串,然后将其转换为8位字符串eval

解码的代码是上面的编码的代码。

证明D ^ 6(9)> D ^ 5(99)

为此,我们将比较D(9)和99。

通过手动运行代码,发现D(9)等于(15*2^14849+1)*2^((15*2^14849+1)*2^((15*2^59+1)*2^((15*2^59+1)*2^((15*2^59+1)*2^((15*2^59+1)*2^((15*2^59+1)*2^((15*2^59+1)*2^((15*2^59+1)*2^((15*2^59+1)*2^((15*2^59+1)*2^((15*2^59+1)*2^((15*2^59+1)*2^((15*2^59+1)*2^((15*2^59+1)*2^((15*2^59+1)*2^((15*2^59+1)*2^((15*2^59+1)*2^((15*2^59+1)*2^((15*2^59+1)*2^((15*2^929+1)*2^((15*2^929+1)*2^((15*2^59+1)*2^((15*2^59+1)*2^((15*2^59+1)*2^((15*2^59+1)*2^((15*2^59+1)*2^((15*2^59+1)*2^((15*2^59+1)*2^((15*2^59+1)*2^((15*2^59+1)*2^((15*2^59+1)*2^(15*2^59+1)))))))))))))))))))))))))))))))),甚至D(0)等于8646911284551352321

因此,D(9)>>> 99,并且由于D严格增加,所以D ^ 6(9)> D ^ 5(99)。

  • 508B-> 501B,-7B
    • -1B for ...我不知道为什么。我确实更改D(D(D(D(D(99)))))D(D(D(D(D(D(9))))))。这也使字母混乱。
    • -6B用于重新添加&&(1)D(x)的循环条件。
  • 501B-> 495B,-6B
    • /2>>1s 固定为,因为Number
    • 从某处保存6字节
    • 您可以在这里查看我在此更新中的尝试
  • 495-> 492B,-3B
    • 通过将解码器从更改for...infor...of
  • 492-> 487B,-5B
    • 删除不必要的任务
    • 更改参数名称
  • 487-> 485B,-2B
    • evalfor D中删除1个字节return
    • 1字节压缩,将右括号合并为逗号。
  • 485-> 481B,-4B
    • 通过压缩不同的子字符串。

或者通过用M9替换99来轻松地以相等的长度传递它,这将使值D ^ 6(9)。
Naruyoko

0

Python 3中,d ^ 6(9)(608个 600 599字节)

_='r=a=0?CM:#y-~y<<x?H6@r=0.EB1+HI)#r?Fx):#xI>>H)?8t6@TtNr#A(U8HG).f==2BCf,CUS(v+2,/yNc,HGG.f<2Bt-(f>v)*c.f-vBy?A(M:#5<<CM.Fy)-1BOx,4,Z(rG?Jx6,a@f=d=c=0@VW7,14@while 1:@.x:Jx-1)X~E:breakKd,TFJxGNFrNFr)@.c-r:K.not(Fu)or(Fr)-fGQ.E:WOd,4,rRA(Vd)K.fIQ.Yd,cR/t);W/u)@.c:@!.EQ q=~u&2|EK .q:W1<<CFuNu)K  Vc=Cq and u,CFcNtG,rXuI&YVc);W/tR9@a=CCVCu,Cx,cGNa)#a\nprint(JJJJJJ9GGG)X\n!if !  x=xIK#@return . if /O13,-4,6):@global r8S(v,y,c,?\ndef Q:K! K@ @\n B else CP(YE:c=CEx%2Tf,x=FFL(U8FxG,G))HZ(xI>>1JD(My,x)N),OS(4,R);t=Vt,Wu='
for Y in 'WVRONMJIHGUFTEYCB@KQ?86/.#!X':_=_.split(Y);_=_.pop().join(_)
exec(_)

这是一个编码的代码。提取:

r=a=0
def P(y,x):
 return y-~y<<x
def Z(x):
 global r
 r=0 if x%2 else 1+Z(x>>1)
 return r
def L(x):
 return x>>1>>Z(x)
def S(v,y,c,t):
 global r
 f,x=L(t),r
 return A(S(v,y,c,L(x)),S(v,y,c,Z(x))) if f==2 else P(f,P(S(v,y,c,L(x)),S(v+2,S(4,13,-4,y),c,Z(x)))) if f<2 else t-(f>v)*c if f-v else y
def A(y,x):
 return 5<<P(y,x) if L(y)-1 else S(4,x,4,Z(r))
def D(x):
 global r,a
 f=d=c=0
 t,u=7,14
 while 1:
  if x:D(x-1)
  x=x>>1
  if ~x%2:break
  d,f,x=L(L(D(x))),L(r),L(r)
  if c-r:
   if not(L(u)or(L(r)-f)):
    x=x>>1
    if x%2:u=S(4,d,4,r);t=A(t,d)
   if f>>1:
    x=x>>1
    if x%2:c=P(d,c);t=S(4,13,-4,t);u=S(4,13,-4,u)
  if c:
   x=x>>1
   if x%2:
    x=x>>1
    q=~u&2|x%2
    if q:u=1<<P(L(u),u)
    t,c=P(q and u,P(L(c),t)),r
  x=x>>1
  if u>>1&x%2:c=P(t,c);u=S(4,13,-4,t);t=9
 a=P(P(t,P(u,P(x,c))),a)
 return a
print(D(D(D(D(D(D(9)))))))

在这种情况下,假定为:

  • 无限调用栈
  • 无限记忆

这基本上是我的JavaScript回答的一部分。有关更多详细信息,请检查该内容。

压缩就是以此完成的。

我对Python不太了解,因此肯定有保存字节的地方。我认为600以下是可能的。sub-600已被证明。

  • 608-> 600B,-8B
    • 分组了一些作业
    • S减少括号的反转条件
  • 600-> 599B,-1B
    • 改变u/2中的定义的倒数第三行Du>>1,从压缩到与其它字符节省一个字节>>1秒。

0

Ruby,D ^ 6(9)(553字节)

_='F=$a=0TEK#y-~yUx.Z@#F=x%2G1?0R1+Z(x/2).L@#x/2>>Z@.8t)VHt);x=F#fG2?A(8L@C8Z@IRf>2?fGv ?yRt-(f>v ?1R0)*cREf,E8L@CS(v+2,t6yCc,Z@I).A(K#Hy)G1?Mx,4,Z(FIR5UEK.D@;$>UxVd=c=0;t=7;u=14;while[xNOx-1CB>0][1];d=HHD@IVW;x=W;cGF&&[Hu)G0&&WGf&&![u=Md,4,FCt=A(t,d)],fJd,cCt6tCu6u)]];cNB&&[t=E~u&2|!(u=1UEHcCu)CEHcCt)Cc=F];uJt,cCu6tCt=9]Q#$a=EEt,Eu,Ex,cIC$a)Q;$>UOOOOOO9III!BN#;return .QT6=M13,-4,8S(v,y,c,@(x)B(x/=2)%2C),J/2&![c=EEP(F$rNG0||G==WHF)HL(I))Ky,x)MS(4,OD(Q;endR: T;def U<<V;f=VUTRQOMKIHWGNFEJCB@86.#!'.each_char{|Y|_=_.split(Y);_=_.join(_.pop())};eval(_)

这是一个编码的代码。提取:

$r=$a=0;def P(y,x);return y-~y<<x;end;def Z(x);return $r=x%2==1?0: 1+Z(x/2);end;def L(x);return x/2>>Z(x);end;def S(v,y,c,t);f=L(t);x=$r;return f==2?A(S(v,y,c,L(x)),S(v,y,c,Z(x))): f>2?f==v ?y: t-(f>v ?1: 0)*c: P(f,P(S(v,y,c,L(x)),S(v+2,t=S(4,13,-4,y),c,Z(x))));end;def A(y,x);return L(y)==1?S(4,x,4,Z($r)): 5<<P(y,x);end;def D(x);$><<x;f=d=c=0;t=7;u=14;while[x==0||D(x-1),(x/=2)%2>0][1];d=L(L(D(x)));f=L($r);x=L($r);c==$r&&[L(u)==0&&L($r)==f&&(x/=2)%2==0||[u=S(4,d,4,$r),t=A(t,d)],f/2&(x/=2)%2==0||[c=P(d,c),t=S(4,13,-4,t),u=S(4,13,-4,u)]];c==0||(x/=2)%2&&[t=P(~u&2|(x/=2)%2==0||(u=1<<P(L(c),u)),P(L(c),t)),c=$r];u/2&(x/=2)%2==0||[c=P(t,c),u=S(4,13,-4,t),t=9];end;return $a=P(P(t,P(u,P(x,c))),$a);end;$><<D(D(D(D(D(D(9))))))

该代码是带有D 6的装载机编号(9)的。

在这种情况下,假定为:

  • 无限调用栈
  • 无限记忆

这基本上是我的JavaScript答案Python 3答案的端口。有关更多详细信息,请检查那些。

压缩与做这个(可能会出现,因为它不存在)。

我是Ruby的初学者,所以也许512以下是可能的,但我对此表示怀疑。

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.