परिचय
ब्रेनकॉप्टर एक गूढ़ ब्रेनफ *** व्युत्पन्न है जो छवि के रूप में एक ब्रेनफ *** कार्यक्रम को एन्कोड करता है। 2 डी भाषा के रूप में, यह दो अतिरिक्त आदेशों का उपयोग करता है; वे निर्देश सूचक (प्रारंभ में दाईं ओर इंगित करते हुए) को दक्षिणावर्त और वामावर्त घुमाते हैं। Braincopter बहुत के समान है Brainloller विभिन्न आदेश के रूप में विशिष्ट रंग का उपयोग करने के बजाय, यह बजाय प्रत्येक पिक्सेल के आरजीबी मूल्य के आधार पर आदेश की गणना करता है, सिवाय इसके कि।
ब्रेनकॉप्टर सूत्र के आधार पर प्रत्येक पिक्सेल के लिए कमांड की गणना करता है
N = (65536 * R + 256 * G + B) % 11
, जहां N
कमांड संख्या है। कमांड संख्या से ब्रेनफ *** कमांड की मैपिंग इस प्रकार है:
0 >
1 <
2 +
3 -
4 .
5 ,
6 [
7 ]
8 rotate instruction pointer to the right (clockwise)
9 rotate instruction pointer to the left (counterclockwise)
10 NOP
ब्रेनकॉप्टर स्टेग्नोग्राफ़ी या किसी अन्य चीज़ में गुप्त संदेशों को छिपाने के लिए उपयोगी है, क्योंकि किसी भी तस्वीर में प्रत्येक पिक्सेल का रंग वांछित ऑपरेशन देने के लिए बस थोड़ा सा बदला जा सकता है। इस तरह के बदले हुए चित्र अक्सर मूल से अप्रभेद्य होते हैं।
चुनौती
एक प्रोग्राम या फ़ंक्शन लिखें जो इनपुट के रूप में एक छवि और ब्रेनफ़ *** कोड की एक स्ट्रिंग लेता है और इसमें संलग्न ब्रेनफ़ *** कोड के साथ मूल छवि तैयार करता है।
ऐसा करने के लिए, मूल छवि में प्रत्येक पिक्सेल लें और इसे मूल पिक्सेल के रंग के निकटतम RGB मान से बदलें जो सही ब्रेनक्रॉप्टर निर्देश का मूल्यांकन करता है। इस चुनौती के उद्देश्यों के लिए रंग अंतर को परिभाषित किया गया है abs(R1 - R2) + abs(G1 - G2) + abs(B1 - B2)
। एक टाई के मामले में जिसमें एक ही ब्रेनकॉप्टर कमांड को हल करने वाले दो रंग मूल रंग के समान होते हैं, या तो चुना जा सकता है।
उदाहरण के लिए, यदि मूल रंग है #FF8040
और ब्रेनकॉप्टर में '1' निर्देश का उत्पादन करने के लिए संशोधित करने की आवश्यकता है, तो #FF7F40
चुना जाना चाहिए।
निर्देश सूचक छवि के किनारे से बाहर निकलने पर ब्रेनकॉप्टर बाहर निकल जाएगा, इसलिए हम इसे 8 और 9 कमांड का उपयोग करके छवि पर रखेंगे (अनुदेश सूचक को दक्षिणावर्त और क्रमशः वामावर्त घुमाएँ)। उदाहरण के साथ एन्कोडिंग के प्रारूप की व्याख्या करना सबसे आसान है।
इनपुट +[[->]-[-<]>-]>.>>>>.<<<<-.>>-.>.<<.>>>>-.<<<<<++.>>++.
और एक 8x9 छवि के लिए, इस तरह से निर्देश दिए जाएंगे (ब्रेनकॉप्टर समकक्षों के बजाय ब्रेनफ *** कमांड का उपयोग करते हुए, और घुमाव के यूनिकोड निरूपण):
+ [ [ - > ] - ↲
↳ - > ] < - [ ↲
↳ ] > . > > > ↲
↳ < < < < . > ↲
↳ - . > > - . ↲
↳ > . < < . > ↲
↳ > > > - . < ↲
↳ + + < < < < ↲
↳ . > > + + . N
(जहां एन एक एनओपी है।) जैसा कि आप देख सकते हैं, नियंत्रण प्रवाह बाएं से दाएं तक यात्रा करता है जब तक कि यह दक्षिणावर्त के पहले सेट को हिट नहीं करता है, फिर दूसरी पंक्ति, एट वगैरह में दाएं से बाएं की यात्रा करता है। आपके प्रोग्राम को इस नियंत्रण प्रवाह का उपयोग करना चाहिए । ब्रेनफ *** इनपुट हमेशा छवि में फिट होने में सक्षम होगा; हालाँकि, आप यह नहीं मान सकते हैं कि यह हमेशा छवि को बिल्कुल फिट करेगा। यदि यह बहुत छोटा है, तो इसे NOP के साथ पैड करें; हालांकि, ब्रेनकॉप्टर कोड को अभी भी दक्षिणावर्त / वामावर्त चालू होना चाहिए।
आप मान सकते हैं कि ब्रेनफ *** इनपुट में केवल आठ अक्षर होंगे
><+-,.[]
।
अपने कार्यक्रम या फ़ंक्शन के आउटपुट का परीक्षण करने के लिए आधिकारिक ब्रेनकॉप्टर दुभाषिया का उपयोग करें ।
परीक्षण के मामलों
इनपुट:
++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.
उदाहरण आउटपुट:
ब्रेनकॉप्टर आउटपुट:
Hello World!
इनपुट:
>++++++++++[<++++++++++>-]>>>>>>>>>>>>>>>>++++[>++++<-]>[<<<<<<<++>+++>++++>++++++>+++++++>+++++++>++++>-]<++<+++++<++++++++++<+++++++++<++++++<<<<<<<<<<<<<[>+>+>[-]>>>>[-]>[-]<<<<<<<[>>>>>>+>+<<<<<<<-]>>>>>>[<<<<<<+>>>>>>-]+>---[<->[-]]<[>>>>>>.>.>..<<<<<<<<<<<<+<<[-]>>>>>>-]<<<<<[>>>>>+>+<<<<<<-]>>>>>[<<<<<+>>>>>-]+>-----[<->[-]]<[>>>>>>>>>>.<.<..<<<<<<<<<<<<+<[-]>>>>>-]<+>[-]>[-]>[-]<<<[>+>+>+<<<-]>[<+>-]+>----------[<->[-]]<[<<+>[-]>-]>[-]>[-]<<<<[>>+>+>+<<<<-]>>[<<+>>-]+>----------[<->[-]]<[<<<+>[-]>>-][-]>[-]<<<<<[>>>>+>+<<<<<-]>>>>[<<<<+>>>>-]+>[<->[-]]<[[-]>[-]<<<<[>>>+>+<<<<-]>>>>[<<<<+>>>>-]<[>++++++++[<++++++>-]<.-.[-]][-]>[-]<<<[>>+>+<<<-]>>>[<<<+>>>-]<[>++++++++[<++++++>-]<.[-]][-]>[-]<<[>+>+<<-]>>[<<+>>-]++++++++[<++++++>-]<.[-]]>>>>.<<<<<<<<<<<-]
आउटपुट:
ब्रेनकॉप्टर आउटपुट:
1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz 16 17...
इनपुट:
>>+[>>[>]>+>,[>>++++[>++++++++<-]>[<<<[>+>+<<-]>[<+>-]>[<<->>[-]]>-]<<<<->[<+>-[<->-[-[-[-[-[-[-[-[-[<+>-[-[-[-[<->-[-[-[-[-[-[-[-[-[-[-[-[-[<+>-[<->-[<+>-[<->>>+++[>+++++++++<-]>+[<<<[>+>+<<-]>[<+>-]>[<<->>[-]]>-]<<<[<+>-[<->-[<+>-[<->[-]]<[-<++>]>]]<[-<+>]>]]<[-<++++++>]>]]]]]]]]]]]]]]]<[-<+++++>]>]<[-<++++++++>]>]<[-<++++>]>]<[-<+++++++>]>]]]]]]]]]]<[-<+++>]>]]<[-<<[<]<->>[>]>]>]<[-<<[<]<->>[>]>]<<[<]<]>>[>]>>>>>>+<<<<<<<[<]>[[<<[<]<<+>+>>[>]>-]<<[<]<[>>[>]>+<<[<]<-]+<-[-[-[-[-[-[-[->->>[>]>[>]>>>>>[>[>>]>>>]>>[<<<<+>>+>>-]<<[>>+<<-]>>>[<<<<+>+>>>-]<<<[>>>+<<<-]<[->>>>>[<<<<<+>+>>>>-]<<<<[>>>>+<<<<-]<[<++++++++++>-]]>>>>>>[<<<<<<+>+>>>>>-]<<<<<[>>>>>+<<<<<-]<[->>>>>>>[<<<<<<<+>+>>>>>>-]<<<<<<[>>>>>>+<<<<<<-]<[<<++++++++++[>++++++++++<-]>>-]]<.[-]<<<[<<]>[<<<<<[<<]>]<<[<]>[<+>-]<[<]<<]>[->>[>]>[>]>>>>>[>[>>]>>>]>[>>]<<[->[-]>>>>[<<+>>->[<<+>>->[<<+>>-]>]>>>]<<<<<<<[<<]>[<<<<<[<<]>]>[>>]<<]>>>>>[>[>>]>>>]<<<<<[<<]>[>[>>]<<[->>+<[>>+<<-]<<<]>->>+<<<<<<<[<<]>]>+>>>>>[>[>>]>>>]>,[>+>+<<-]>[<+>-]>[[>+>+<<-]>>[<<+>>-]<[-<->[-<->[-<->[-<->[-<->[-<->[-<->[-<->[-<->[[-]<-><<<---------->+>>]]]]]]]]]]<]<[>+>+<<-]>[<+>-]>[-[-[-[-[-[-[-[-[-[-<<---------->+>[-[-[-[-[-[-[-[-[-[[-]<<---------->+>]]]]]]]]]]]]]]]]]]]]<<[>>+>+<<<-]>>[<<+>>-]+>[<<<+>>->[-]]<[-<[>+>+<<-]>[<+>-]>[<<<+>>>[-]]<]<[>+>+<<-]>[<+>-]>[<<+>>[-]]<<<<+[-[<<<<<<[<<]>[<<<<<[<<]>]>[>>]<+>>>>[>[>>]>>>]>-]>[>]<[[>+<-]<]<<<<<<[<<]>[>[>>]<<[>[>>+<<-]>+<<-<<]>->>+<<<<<<<[<<]>]>[>>]+>>>>>[>[>>]>>>]>]<<<<<<[<<]>[<<<<<[<<]>]>[>>]<<->>>>>[<<+>>->[<<+>>->[<<+>>-]>]>>>]<<<<<<<[<<]>[<<<<<[<<]>]<<<<<[<<]>[<<<<<[<<]>]<<[<]>[<+>-]<[<]<]<]>[->>[>]>[>]>>>>>[>[>>]>>>]+>[>>]>>>[-]>[-]+<<<<<<[<<]>[<<<<<[<<]>]<<[<]>[<+>-]<[<]<]<]>[->>[>]>[>]>>>>>[>[>>]>>>]+<<<<<[<<]>-<<<<<[<<]>[<<<<<[<<]>]<<[<]>[<+>-]<[<]<]<]>[->>[>]>[>]>>>>>[>[>>]>>>]>[->[<<<[<<]<<+>+>>>[>>]>-]<<<[<<]<[>>>[>>]>+<<<[<<]<-]+<[[-]>->>>[>>]>-<+[<<]<<]>[->>>[>>]>+++++++++<<<[<<]<]>>>[>>]+>>]<<-<<<<[>>>>+>+<<<<<-]>>>>[<<<<+>>>>-]>[-<<[>+>+<<-]>[<+>-]>>+<[[-]>-<]>[-<<<<->[-]>>>>[<<+>>->[<<+>>->[<<+>>-]>]>>>]<<<<<<<[<<]>[<<<<<[<<]>]>[>>]>>]<]<<<[<<]<<<<[<<]>[<<<<<[<<]>]<<[<]>[<+>-]<[<]<]<]>[->>[>]>[>]>>>>>[>[>>]>>>]>>+<[->[<<<[<<]<<+>+>>>[>>]>-]<<<[<<]<[>>>[>>]>+<<<[<<]<-]<[-[-[-[-[-[-[-[-[-[->>>>[>>]>[-]>[-]+>+<<<<<[<<]<<]]]]]]]]]]>>>>[>>]+>>]>[-<<<[<<]<<+>+>>>[>>]>]<<<[<<]<[>>>[>>]>+<<<[<<]<-]<[->>>>[>>]>[>[>>]<<[>[>>+<<-]>+<<-<<]>->>+>[>>]>]<<<[<<]>[<<<<<[<<]>]<<<]<<[<<]>[<<<<<[<<]>]<<[<]>[<+>-]<[<]<]<]>[->>[>]>[>]>>>>>[>[>>]>>>]>[>>]>>>[>[>>]>>>]>+[<<<<<<[<<]>[<<<<<[<<]>]<<<<<[<<]>[<<<<<[<<]>]<<[<]<[>+<-]>[<<[<]<<+>+>>[>]>-]<<[<]<[>>[>]>+<<[<]<-]+<-[-[>-<[-]]>[->>[>]>[>]>>>>>[>[>>]>>>]>[>>]>>>[>[>>]>>>]>[>]+[<]<<<<<[<<]>[<<<<<[<<]>]<<<<<[<<]>[<<<<<[<<]>]<<[<]<[<]<]<]>[->>[>]>[>]>>>>>[>[>>]>>>]>[>>]>>>[>[>>]>>>]>[>]<-<[<]<<<<<[<<]>[<<<<<[<<]>]<<<<<[<<]>[<<<<<[<<]>]<<[<]<[<]<]>>[>]>[>]>>>>>[>[>>]>>>]>[>>]>>>[>[>>]>>>]>]<<<<<<[<<]>[<<<<<[<<]>]<<<<<[<<]>[<<<<<[<<]>]<<[<]<[<]<]<]>[->>[>]>[>]>>>>>[>[>>]>>>]>>[<<<+>+>>-]<<[>>+<<-]>>>[<<<<+>+>>>-]<<<[>>>+<<<-]<<+>[[-]<-<<<[<<]>[<<<<<[<<]>]<<[<]>[<+>-]>[>]>>>>>[>[>>]>>>]<]<[->>>[>>]>>>[>[>>]>>>]>+[<<<<<<[<<]>[<<<<<[<<]>]<<<<<[<<]>[<<<<<[<<]>]<<[<]>[<+>-]>[<<[<]<<+>+>>[>]>-]<<[<]<[>>[>]>+<<[<]<-]+<-[-[>-<[-]]>[->>[>]>[>]>>>>>[>[>>]>>>]>[>>]>>>[>[>>]>>>]>[>]<-<[<]<<<<<[<<]>[<<<<<[<<]>]<<<<<[<<]>[<<<<<[<<]>]<<[<]<[<]<]<]>[->>[>]>[>]>>>>>[>[>>]>>>]>[>>]>>>[>[>>]>>>]>[>]+[<]<<<<<[<<]>[<<<<<[<<]>]<<<<<[<<]>[<<<<<[<<]>]<<[<]<[<]<]>>[>]>[>]>>>>>[>[>>]>>>]>[>>]>>>[>[>>]>>>]>]<<<<<<[<<]>[<<<<<[<<]>]<<<<<[<<]>[<<<<<[<<]>]<<[<]>[<+>-]>[>]>>>>>[>[>>]>>>]<<]<<<[<<]>[<<<<<[<<]>]<<[<]<[<]<]>>[>]>]
आउटपुट:
ब्रेनकॉप्टर आउटपुट:
यह एक Brainf *** स्व-इंटरप्रेटर है । यह इनपुट से कोड को अलग करता है !
; उदाहरण के लिए, इनपुट ,[.,]!Hello, World!\0
आउटपुट देगा Hello, World!
, यह मानते हुए कि \0
एक अशक्त बाइट द्वारा प्रतिस्थापित किया गया था।
स्कोरिंग
यह कोड-गोल्फ है , इसलिए सबसे छोटा उत्तर जीतता है। हैप्पी गोल्फिंग!