ब्रेनफक, 39 33 32 31 बाइट्स
-[-[>]<--<--],[[>.<+]>+.--.+<,]
टेप पर 45 स्थान पर आने वाला एल्गोरिथ्म Esolang के Brainfuck स्थिरांक से लिया गया है ।
यह उत्तर मानता है कि आउटपुट प्रोग्राम के दुभाषिया में रैपिंग, बाउंडेड सेल हैं; और जो ,
वर्तमान सेल को शून्य करता है (इसका मतलब है कि आउटपुट प्रोग्राम बिना इनपुट के चलाया जाता है)। इसे ऑनलाइन आज़माएं!
लंबे समय तक (लंबे समय तक) समाधान के लिए जो बिना शर्त काम करता है, मेरा दूसरा जवाब देखें ।
परीक्षण चालन
इनपुट के लिए Code Golf
, निम्न आउटपुट उत्पन्न होता है।
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------.,-------------------------------------------------------------------------------------------------------------------------------------------------.,------------------------------------------------------------------------------------------------------------------------------------------------------------.,-----------------------------------------------------------------------------------------------------------------------------------------------------------.,--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------.,-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------.,-------------------------------------------------------------------------------------------------------------------------------------------------.,----------------------------------------------------------------------------------------------------------------------------------------------------.,----------------------------------------------------------------------------------------------------------------------------------------------------------.,
इसे ऑनलाइन आज़माएं!
यह काम किस प्रकार करता है
हम पूर्णांक 45 (वर्ण कोड -
) को टेप के सेल में डालकर शुरू करते हैं । निम्न कोड इसे प्राप्त करता है।
- Decrement cell 0, setting it to 255.
[ While the cell under the head in non-zero:
[>] Advance to the next zero cell.
<-- Decrement the cell to its left.
<-- Decrement the next cell to the left.
]
इससे पहले कि हम लूप में प्रवेश करें, टेप इस तरह दिखता है।
v
000 000 255
ये तीन कोशिकाएं - -2 , -1 और 0 - केवल वही हैं जो हम इस कार्यक्रम में उपयोग करेंगे।
लूप के पहले प्रत्येक पुनरावृत्ति में, सबसे दाहिनी कोशिका होती है, फिर उस कोशिका और मध्य कोशिका का दो बार क्षरण होता है, जो निम्न अवस्था को छोड़ देती है।
v
000 254 252
अगले 126 पुनरावृत्तियों में, प्रारंभिक -
सेल मध्य सेल [>]<
को घटाता है, --<--
सबसे सही सेल को कूदता है, और मध्य और सही सेल को घटाता है। परिणामस्वरूप, 3 को मध्य सेल (मॉडुलो 256 ) से घटाया जाता है और 2 को सबसे दाहिने सेल से घटाया जाता है।
चूंकि 254 25 3 (मॉड 256) = (254 + 256) 510 3 = 510 = 3 = 170 और 252 25 3 = 84 , मध्य प्रदेश से पहले सबसे दाहिने सेल को शून्य किया जाता है, जिससे निम्न स्थिति होती है।
v
000 132 000
लूप के पहले पुनरावृत्ति के समान, अगला पुनरावृत्ति अब मध्य सेल से 3 और बाईं सेल से 2 को घटाता है , सिर को बाईं ओर सेल पर रखता है।
v
254 129 000
बाद में पुनरावृत्तियों, उनके रूप में 126 पुनरावृत्ति में, बाएं सेल से 3 और सबसे दाएं सेल से 2 घटाना ।
चूंकि 254 25 3 (मॉड 256) = 170 और 129 mod 2 (मॉड 256) अपरिभाषित है, यह 170 बार किया जाता है, जो निम्न स्थिति को छोड़ देता है।
v
000 045 000
सिर के नीचे की कोशिका शून्य है; लूप समाप्त होता है।
अब हम आउटपुट तैयार करने के लिए तैयार हैं।
, Read a character from STDIN and put it the leftmost cell.
[ While the leftmost cell is non-zero:
[ While the leftmost cell is non-zero:
>. Print the content of the middle cell ('-').
<- Increment the leftmost cell.
] If the leftmost cell held n, the above will print 256 - n minus signs
which, when executed, will put n in cell 0 of the output program.
> Increment the middle cell, setting it to 46 ('.').
. Print its content ('.').
-- Decrement the middle cell twice, setting it to 44 (',').
. Print its content (',').
When executed, since the output program receives no input, the above
will zero cell 0 of the output program.
+ Increment the second cell, setting it back to 45 ('-').
<, Go back to the leftmost cell and read another character from STDIN.
] Once EOF is reached, this will put 0 in the leftmost cell, ending the loop.