출력 크기가 Graham의 수를 초과 하고 골프가 TREE (3)보다 큰 수를 초과하는 최단 종료 프로그램에 대한 후속 조치로 새로운 도전을 제시합니다.
로더의 숫자는 매우 큰 숫자이며 설명하기가 어렵습니다 (유연한 목표를 가진 코드 골프 연습의 결과이기 때문에). 이 정의와 설명은 여기에 있지만, 자기 억제의 목적을 위해, 나뿐만 아니라이 게시물에 나중에 그것을 설명하려고합니다.
사용 된 Ralph Loader 알고리즘은 지금까지 기록 된 (계산 가능한) 알고리즘 중 가장 많은 수의 알고리즘 중 하나를 생성합니다! 실제로 로더의 숫자는 Googology Wiki에서 가장 큰 "계산 가능한"숫자입니다. ( "계산 가능한"숫자함으로써, 그들은 계산의 관점에서 정의 된 숫자를 의미한다.) 대답은 흥미로운 방법으로 로더의 수보다 큰 숫자를 생성하는 경우 수단 (즉, 그냥 로더의 수 + 1이 아닌) 것을 그건 당신이 아래로 갈 수있다 역사학! Loader 's number + 1 과 같은 것을 생산하는 프로그램 은 확실히이 질문에 대한 답이되고 경쟁자입니다. 명성을 기대하지 마십시오.
당신의 임무는 로더의 수보다 큰 수를 생성하는 종료 프로그램을 만드는 것입니다. 이것은 code-golf 이므로 가장 짧은 프로그램이 승리합니다!
- 입력을 할 수 없습니다.
- 프로그램은 결국 결정 론적으로 종료해야하지만 머신에 무한 메모리가 있다고 가정 할 수 있습니다.
- 언어의 숫자 유형이 유한 값을 가질 수 있다고 가정 할 수 있지만 이것이 언어에서 정확히 어떻게 작동하는지 설명해야합니다 (예 : 부동 소수점의 정밀도는 정확합니까?)
- 무한대는 출력으로 허용되지 않습니다.
- 숫자 유형의 언더 플로에서 예외가 발생합니다. 감싸지 않습니다.
- 로더 번호를 저장할 메모리가 충분한 컴퓨터가 없기 때문에 솔루션이 유효한지 확인하기 위해 숫자가 너무 큰 이유와 코드가없는 코드 버전에 대한 설명을 제공해야합니다.
다음은 로더 번호에 대한 설명입니다. 자세한 내용은 http://googology.wikia.com/wiki/Loader%27s_number 및 해당 링크를 참조하십시오. 특히, 로더 번호를 정확히 (정의 적으로) 생성하는 프로그램이 포함되어 있습니다.
구성의 미적분학 은 본질적으로 매우 특정한 속성을 가진 프로그래밍 언어입니다.
우선, 구문 상 유효한 모든 프로그램이 종료됩니다. 무한 루프가 없습니다. 이는 임의의 미적분학 구성 프로그램을 실행하면 프로그램이 중단되지 않기 때문에 매우 유용합니다. 문제는 이것이 건축 미적분이 튜링 완료가 아니라는 것을 의미합니다.
둘째로, 튜링 언어가 아닌 언어 중에서 가장 강력한 언어 중 하나입니다. 기본적으로 튜링 머신이 모든 입력에서 정지한다는 것을 증명할 수 있다면 시뮬레이션을 구성하는 미적분학에서 함수를 프로그래밍 할 수 있습니다. (이로 인해 멈춤을 확인할 수없는 정지 튜링 머신이 있기 때문에 튜링이 완료되지는 않습니다.)
로더 번호는 기본적으로 계산 미적분에 대한 바쁜 비버 번호이며 모든 coc 프로그램이 종료되므로 계산할 수 있습니다.
특히, loader.c는라는 함수를 정의합니다 D
. 대략, D(x)
미만의 모든 비트 열을 반복하고 x
이를 coc 프로그램으로 해석하고 구문 상 유효한 것을 실행하며 결과 (비트 스트링도 됨)를 연결합니다. 이 연결을 반환합니다.
로더 번호는 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)))));}