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.