Як подальша робота із найкоротшою програмою, що закінчується, розмір виходу якої перевищує кількість Грема, а Golf - на номер, більший за TREE (3) , я представляю нове завдання.
Номер навантажувача - дуже велика кількість, що важко пояснити (оскільки саме він був результатом вправи з кодового гольфу з гнучкою метою). Існує визначення і пояснення тут , але для цілей замкнутості, я спробую пояснити це пізніше на цій посаді , а також.
Використовуваний алгоритм Ralph Loader виробляє одне з найбільших чисел будь-якого (обчислюваного) алгоритму, коли-небудь написаного! Дійсно, номер навантажувача є найбільшим "обчислювальним" числом у Googology Wiki. (Під "обчислювальним" числом вони означають число, визначене за допомогою обчислення.) Це означає, що якщо відповідь цікавим чином створює число, що перевищує число навантажувача (тобто не лише номер навантажувача + 1), ви можете спуститися в Історія гогології! Незважаючи на це, програми, що створюють щось на зразок числа завантажувача + 1 , безумовно, є правильними відповідями та претендентами на це питання; просто не сподівайся на славу.
Ваше завдання полягає в створенні програми , яка виробляє завершальне число більше ніж число заряджає. Це код-гольф , тому найкоротша програма виграє!
- Вам не дозволяється приймати дані.
- Зрештою, ваша програма повинна припинити детерміновано, але ви можете припустити, що машина має нескінченну пам'ять.
- Ви можете припустити, що тип вашої мови може містити будь-яке кінцеве значення, але потрібно пояснити, як саме це працює у вашій мові (напр .: чи має float нескінченну точність?)
- Нескінченності не допускаються як вихід.
- Під переповненням чисельного типу є виняток. Він не загортається.
- Потрібно надати пояснення, чому ваш номер настільки великий, і неперероблену версію коду, щоб перевірити, чи ваше рішення є дійсним (оскільки немає комп’ютера з достатньою пам’яттю, щоб зберігати номер навантажувача).
Отож ось пояснення номера навантажувача. Детальнішу інформацію див. У розділі http://googology.wikia.com/wiki/Loader%27s_number та посилання на них. Зокрема, вона містить програму, яка точно виробляє номер завантажувача (за визначенням).
Обчислення конструкцій по суті є мовою програмування з дуже особливими властивостями.
Перш за все, кожна синтаксично дійсна програма припиняється. Немає нескінченних петель. Це буде дуже корисно, адже це означає, що якщо ми запустимо довільну програму обчислення конструкцій, наша програма не зациклюється. Проблема полягає в тому, що це означає, що обчислення конструкцій не є Тюрінгом завершеним.
По-друге, серед нетурюрських повних мов вона є однією з найпотужніших. По суті, якщо ви зможете довести, що машина Тьюрінга зупинятиметься на кожному вході, ви можете запрограмувати функцію в обчисленні конструкцій, яка буде імітувати її. (Це не робить його завершенням повним, оскільки існують машини, що припиняють тривання, які ви не можете довести, припиняються.)
Номер навантажувача - це фактично зайнятий номер бобра для обчислення конструкцій, який можна обчислити, оскільки всі програми коків закінчуються.
Зокрема, loader.c визначає функцію, яку називають D
. Приблизно, вона D(x)
повторює всі бітові рядки менше x
, інтерпретує їх як програми коків, запускає синтаксично дійсні та об'єднує результати (які також будуть біт-рядками). Це повертає це з'єднання.
Номер навантажувача - 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)))));}