1{?)=}&~".>")!@(</=+={"/>}*
펼쳐진 :
1 { ? )
= } & ~ "
. > " ) ! @
( < / = + = {
" / > } * .
. . . . .
. . . .
온라인으로 사용해보십시오!
설명
순서를 고려하고 b(a) = a(n) - 1
약간의 정리를 해 봅시다 .
b(a) = a(n) - 1
= a(n-1)*(a(n-1)-1) + 1 - 1
= (b(n-1) + 1)*(b(n-1) + 1 - 1)
= (b(n-1) + 1)*b(n-1)
= b(n-1)^2 + b(n-1)
이 순서는 매우 비슷하지만,이 프로그램에서 바이트를 저장하기 위해 증분을 끝까지 연기 할 수 있습니다.
주석이 달린 소스 코드는 다음과 같습니다.
Timwi의 HexagonyColorer로 작성되었습니다 .
다음은 메모리 다이어그램입니다 (빨간색 삼각형은 메모리 포인터의 초기 위치 및 방향을 나타냅니다).
Timwi의 EsotericIDE로 작성되었습니다 .
코드는 왼쪽 모서리를 감싸는 회색 경로에서 시작하므로 초기 선형 비트는 다음과 같습니다.
1{?)(
1 Set edge b(1) to 1.
{ Move MP to edge N.
? Read input into edge N.
)( Increment, decrement (no-op).
그런 다음 코드 <
는 분기 인 분기를 누르고 주 루프의 시작 (및 끝)을 나타냅니다. 만큼로서 N의 에지는 양의 값을 갖고, 녹색 경로가 실행된다. 이 경로는 그리드를 몇 번 감쌀 수 있지만 실제로는 완전히 선형입니다.
""~&}=.*}=+={....(
는 .
실제 코드가 있으므로, 어떤 작전 없습니다 :
""~&}=*}=+={(
"" Move the MP to edge "copy".
~ Negate. This is to ensure that the value is negative so that &...
& ...copies the left-hand neighbour, i.e. b(i).
}= Move the MP to edge b(i)^2 and turn it around.
* Multiply the two copies of b(i) to compute b(i)^2.
}= Move the MP back to edge b(i) and turn it around.
+ Add the values in edges "copy" and b(i)^2 to compute
b(i) + b(i)^2 = b(i+1).
={ Turn the memory pointer around and move to edge N.
( Decrement.
이 감소하는이 감소하면 N
에 0
빨간색 경로가 실행됩니다 :
")!@
" Move MP back to edge b(i) (which now holds b(N)).
) Increment to get a(N).
! Print as integer.
@ Terminate the program.