ตามโปรแกรมการยุติที่สั้นที่สุดซึ่งมีขนาดเอาต์พุตเกินจำนวนของเกรแฮมและกอล์ฟที่มีขนาดใหญ่กว่า TREE (3)ฉันขอเสนอความท้าทายใหม่
หมายเลขของ Loader นั้นมีจำนวนมากซึ่งเป็นการยากที่จะอธิบาย (เนื่องจากตัวมันเองเป็นผลมาจากการฝึกเล่นกอล์ฟโดยมีเป้าหมายที่ยืดหยุ่น) มีคำจำกัดความและคำอธิบายที่นี่แต่สำหรับจุดประสงค์ของการกักกันตัวเองฉันจะพยายามอธิบายในโพสต์นี้ด้วย
อัลกอริทึม Ralph Loader ที่ใช้สร้างหนึ่งในจำนวนที่ใหญ่ที่สุดของอัลกอริทึม (คำนวณ) ใด ๆ ที่เคยเขียน! ที่จริงแล้วจำนวนของ Loader นั้นเป็นจำนวนที่ "คำนวณได้" มากที่สุดใน Googology Wiki (โดยตัวเลข "คำนวณได้" หมายถึงตัวเลขที่กำหนดในแง่ของการคำนวณ) นั่นหมายความว่าหากคำตอบสร้างจำนวนที่มากกว่าจำนวนตัวโหลดในวิธีที่น่าสนใจ (เช่นไม่ใช่แค่หมายเลขของตัวโหลด + 1) คุณสามารถลงไปได้ ประวัติ Googology! ที่ถูกกล่าวว่าโปรแกรมที่ผลิตบางอย่างเช่นหมายเลขของ Loader +1เป็นคำตอบที่ถูกต้องและ contenders คำถามนี้อย่างแน่นอน; อย่าคาดหวังว่าจะมีชื่อเสียง
งานของคุณคือการสร้างโปรแกรมยุติที่ผลิตจำนวนขนาดใหญ่กว่าจำนวน Loader ของ นี่คือรหัสกอล์ฟดังนั้นโปรแกรมที่สั้นที่สุดชนะ!
- คุณไม่ได้รับอนุญาตให้ป้อนข้อมูล
- โปรแกรมของคุณจะต้องยุติอย่างถาวรในที่สุด แต่คุณสามารถสันนิษฐานได้ว่าเครื่องมีหน่วยความจำไม่สิ้นสุด
- คุณอาจสมมติว่าประเภทหมายเลขภาษาของคุณสามารถเก็บค่าที่แน่นอนใด ๆแต่จำเป็นต้องอธิบายวิธีการทำงานในภาษาของคุณ (เช่น: ลอยมีความแม่นยำไม่สิ้นสุด?)
- ไม่อนุญาตให้ใช้อินฟินิตี้เป็นเอาต์พุต
- อันเดอร์โฟลว์ของชนิดตัวเลขโยนข้อยกเว้น มันไม่ได้พันรอบ
- คุณต้องให้คำอธิบายว่าเพราะเหตุใดหมายเลขของคุณจึงใหญ่และเป็นโค้ดที่ไม่ดีนักเพื่อตรวจสอบว่าโซลูชันของคุณถูกต้องหรือไม่ (เนื่องจากไม่มีคอมพิวเตอร์ที่มีหน่วยความจำเพียงพอที่จะเก็บหมายเลขของ Loader)
นี่คือคำอธิบายของจำนวนตัวโหลด ดูhttp://googology.wikia.com/wiki/Loader%27s_numberและลิงก์ในรายละเอียดที่แม่นยำยิ่งขึ้น โดยเฉพาะอย่างยิ่งมันมีโปรแกรมที่สร้างหมายเลขของ Loader อย่างแน่นอน (ตามคำจำกัดความ)
แคลคูลัสของการก่อสร้างเป็นหลักภาษาการเขียนโปรแกรมที่มีคุณสมบัติมากโดยเฉพาะอย่างยิ่ง
ก่อนอื่นโปรแกรมทุกตัวที่ใช้งานได้จริงจะถูกยกเลิก ไม่มีลูปไม่มีที่สิ้นสุด สิ่งนี้จะมีประโยชน์มากเพราะมันหมายความว่าถ้าเรารันแคลคูลัสของโปรแกรมสร้างโดยพลการโปรแกรมของเราจะไม่ติดขัด ปัญหาคือว่านี่หมายถึงแคลคูลัสของการก่อสร้างไม่ทัวริงสมบูรณ์
ประการที่สองในบรรดาภาษาที่ไม่ใช่ทัวริงเป็นหนึ่งในภาษาที่ทรงพลังที่สุด ถ้าคุณสามารถพิสูจน์ได้ว่าเครื่องจักรทัวริงจะหยุดทุกอินพุตคุณสามารถตั้งโปรแกรมฟังก์ชั่นในแคลคูลัสของสิ่งก่อสร้างที่จะจำลองมัน (สิ่งนี้ไม่ได้ทำให้เสร็จสมบูรณ์เนื่องจากมีการหยุดเครื่องจักรทัวริงที่คุณไม่สามารถพิสูจน์ได้ว่ากำลังหยุดนิ่ง)
หมายเลขของ Loader คือจำนวนช่องคลอดที่ว่างสำหรับแคลคูลัสของสิ่งปลูกสร้างซึ่งเป็นไปได้ที่จะคำนวณเนื่องจากโปรแกรม coc ทั้งหมดสิ้นสุดลง
โดยเฉพาะอย่างยิ่ง loader.c D
กำหนดฟังก์ชั่นที่เรียกว่า โดยประมาณD(x)
จะวนซ้ำบิตบิตทั้งหมดที่น้อยกว่าx
ตีความเป็นโปรแกรม coc เรียกใช้ syntactically ที่ถูกต้องและเชื่อมผลลัพธ์ (ซึ่งก็จะเป็นบิต) มันคืนค่าการต่อข้อมูลนี้
จำนวน Loader D(D(D(D(D(99)))))
เป็น
สำเนาของโค้ดที่อ่านได้มากขึ้นจากวิกิ googolology
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)))));}