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)
यह क्रम बहुत समान है लेकिन हम वेतन वृद्धि को समाप्त कर सकते हैं, जो इस कार्यक्रम में एक बाइट को बचाने के लिए होता है।
तो यहाँ एनोटेट स्रोत कोड है:
टिमवी के हेक्सागोनीकॉलर के साथ बनाया गया ।
और यहाँ एक स्मृति आरेख है (लाल त्रिकोण स्मृति सूचक की प्रारंभिक स्थिति और अभिविन्यास दिखाता है):
टिमवी के एसोटेरिकाइड के साथ बनाया गया ।
कोड ग्रे पथ पर शुरू होता है जो बाएं कोने को लपेटता है, इसलिए प्रारंभिक रैखिक बिट निम्न है:
1{?)(
1 Set edge b(1) to 1.
{ Move MP to edge N.
? Read input into edge N.
)( Increment, decrement (no-op).
फिर कोड हिट होता है <
जो एक शाखा है और मुख्य लूप की शुरुआत (और अंत) को इंगित करता है। जब तक एन एज का एक सकारात्मक मूल्य है, तब तक हरे रंग का पथ निष्पादित किया जाएगा। वह रास्ता ग्रिड के चारों ओर कुछ बार घूमता है, लेकिन यह वास्तव में पूरी तरह से रैखिक है:
""~&}=.*}=+={....(
.
इसलिए वास्तविक कोड है, कोई-ऑप्स हैं:
""~&}=*}=+={(
"" 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.
एक बार जब यह decrementing कम कर देता है 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.