Theo chương trình chấm dứt ngắn nhất có kích thước đầu ra vượt quá số của Graham và Golf lớn hơn TREE (3) , tôi đưa ra một thách thức mới.
Số lượng của Loader là một con số rất lớn, rất khó để giải thích (vì chính nó là kết quả của một bài tập golf mã với mục tiêu linh hoạt). Có một định nghĩa và giải thích ở đây , nhưng với mục đích tự ngăn chặn, tôi cũng sẽ cố gắng giải thích nó sau trong bài viết này.
Thuật toán Ralph Loader được sử dụng tạo ra một trong những số lớn nhất của bất kỳ thuật toán (tính toán) nào từng được viết! Thật vậy, số của Loader là số "tính toán" lớn nhất trên Wiki của Googology. (Theo số "có thể tính toán", chúng có nghĩa là một số được xác định theo thuật toán.) Điều đó có nghĩa là nếu câu trả lời tạo ra một số lớn hơn số của Trình tải theo cách thú vị (không chỉ là số của Trình tải + 1), bạn có thể truy cập vào Lịch sử địa lý! Điều đó đang được nói, các chương trình tạo ra thứ gì đó như số 1 của Loader chắc chắn là câu trả lời hợp lệ và là ứng cử viên cho câu hỏi này; chỉ không mong đợi bất kỳ danh tiếng.
Công việc của bạn là tạo một chương trình kết thúc tạo ra một số lớn hơn số của Loader. Đây là môn đánh gôn , vì vậy chương trình ngắn nhất sẽ thắng!
- Bạn không được phép lấy đầu vào.
- Chương trình của bạn cuối cùng phải chấm dứt một cách xác định nhưng bạn có thể giả sử máy có bộ nhớ vô hạn.
- Bạn có thể cho rằng loại số ngôn ngữ của bạn có thể giữ bất kỳ giá trị hữu hạn nào nhưng cần giải thích chính xác cách thức hoạt động của ngôn ngữ này (ví dụ: một số float có độ chính xác vô hạn?)
- Infinities không được phép là đầu ra.
- Dòng dưới của một loại số ném một ngoại lệ. Nó không quấn quanh.
- Bạn cần đưa ra lời giải thích về lý do tại sao số của bạn quá lớn và phiên bản mã không được mã hóa để kiểm tra xem giải pháp của bạn có hợp lệ không (vì không có máy tính nào có đủ bộ nhớ để lưu số của Loader).
Vì vậy, đây là một lời giải thích về số của Loader. Xem http://googology.wikia.com/wiki/Loader%27s_number và các liên kết trong đó để biết thêm chi tiết chính xác. Cụ thể, nó chứa một chương trình tạo ra chính xác số của Loader (theo định nghĩa).
Tính toán của các công trình xây dựng về cơ bản là một ngôn ngữ lập trình với các thuộc tính rất đặc biệt.
Trước hết, mọi chương trình có giá trị cú pháp đều chấm dứt. Không có vòng lặp vô hạn. Điều này sẽ rất hữu ích, bởi vì điều đó có nghĩa là nếu chúng ta chạy một phép tính tùy ý của chương trình xây dựng, chương trình của chúng ta sẽ không bị kẹt. Vấn đề là điều này hàm ý việc tính toán các công trình chưa hoàn thành.
Thứ hai, trong số các ngôn ngữ hoàn chỉnh không Turing, nó là một trong những ngôn ngữ mạnh nhất. Về cơ bản, nếu bạn có thể chứng minh rằng máy Turing sẽ dừng trên mọi đầu vào, bạn có thể lập trình một hàm trong phép tính của các công trình sẽ mô phỏng nó. (Điều này không làm cho nó hoàn chỉnh, bởi vì có những máy xử lý tạm dừng mà bạn không thể chứng minh được đang tạm dừng.)
Số của Loader về cơ bản là một số hải ly bận rộn để tính toán các công trình, có thể tính toán vì tất cả các chương trình coc chấm dứt.
Cụ thể, loader.c định nghĩa một hàm gọi là D
. Xấp xỉ, D(x)
lặp đi lặp lại trên tất cả các chuỗi bit ít hơn x
, diễn giải chúng như một chương trình coc, chạy các chuỗi có hiệu lực về mặt cú pháp và nối các kết quả (cũng sẽ là bitstrings). Nó trả lại kết nối này.
Số của Loader là D(D(D(D(D(99)))))
.
Một bản sao dễ đọc hơn của mã từ wiki 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)))));}