स्टेग्नोग्राफ़िक वर्ग
आपका काम एक स्ट्रिंग में लेना है, और एक NxN
छवि उत्पन्न करना है जो इस स्ट्रिंग का प्रतिनिधित्व करता है। आपको उस एल्गोरिथ्म को भी लिखना होगा जो छवि में लेता है और इसे वापस स्ट्रिंग में भी बदल देता है। स्कोरिंग में दोनों एल्गोरिदम की बाइट गिनती शामिल होगी:
"एन्क्रिप्शन" एल्गोरिथ्म + "डिक्रिप्शन" एल्गोरिथम ।
आपको अलग-अलग पोस्ट करना चाहिए, व्यक्तिगत रूप से प्रदर्शित एन्क्रिप्शन और डिक्रिप्शन एल्गोरिदम दोनों के लिए बाइट-काउंट के साथ।
उदाहरण एल्गोरिथम
उदाहरण के लिए, यहाँ ब्लू चैनल में एक सरल ASCII आधारित स्टेग्नोग्राफ़िक एल्गोरिथ्म का उपयोग करके "प्रोग्रामिंग पहेलियाँ और कोड गोल्फ" दिया गया है:
#2e7250,#6ea972,#04eb6f,#0fc767,#74ab72,#ee6161
#b73b6d,#1aae6d,#f37169,#bda56e,#1fe367,#e99620
#706450,#0d3575,#146b7a,#4ea47a,#2a856c,#95d065
#3f2d73,#cef720,#bab661,#d1b86e,#f22564,#12b820
#0f3d43,#c86e6f,#1ee864,#a66565,#247c20,#c3bb47
#0e296f,#89d46c,#585b66,#c08f20,#455c20,#136f20
आप देख सकते हैं कि नीले चैनल में इस छवि के लिए केवल अस्सी के मान हैं:
50 = 80(P) 72 = 114(r) 6f = 111(o) 67 = 103(g) 72 = 114(r) 61 = 97(a)
6d = 109(m) 6d = 109(m) 69 = 105(i) 6e = 110(n) 67 = 103(g) 20 = 32( )
50 = 80(P) 75 = 117(u) 7a = 122(z) 7a = 122(z) 6c = 108(l) 65 = 101(e)
73 = 115(s) 20 = 32( ) 61 = 97(a) 6e = 110(n) 64 = 100(d) 20 = 32( )
43 = 67(C) 6f = 111(o) 64 = 100(d) 65 = 101(e) 20 = 32( ) 47 = 71(G)
6f = 111(o) 6c = 108(l) 66 = 102(f) 20 = 32( ) 20 = 32( ) 20 = 32( )
जबकि बाकी चैनल छवि में रंगों की विविधता को "मसाला" करने के लिए यादृच्छिक रूप से उत्पन्न मान रखते हैं। संदेश को छवि से बाहर खींचते समय, हम बस अन्य चैनल मानों को अनदेखा कर सकते हैं, और ब्लू चैनल में हेक्स बिट को खींच सकते हैं, स्ट्रिंग को फिर से संगठित कर सकते हैं:
"Programming Puzzles and Code Golf"
ध्यान दें कि वर्ग में स्ट्रिंग को पैड करने के लिए उपयोग किए जाने वाले रिक्त स्थान अंतिम डिक्रिप्टेड आउटपुट में शामिल नहीं हैं। जब आपको छवि में स्ट्रिंग को पैड करना होगा, तो आप मान सकते हैं कि इनपुट स्ट्रिंग रिक्त स्थान के साथ समाप्त नहीं होगी।
नियम
- आपको प्रति पिक्सेल 1 वर्ण सांकेतिक शब्दों में बदलना चाहिए, चार को सांकेतिक शब्दों में बदलना करने के लिए चुना गया चैनल मनमाना है।
- अन्य आरजीबी रंगों के चैनलों को बेतरतीब ढंग से तैयार किया जाना चाहिए, इसके अलावा आप जिस स्ट्रिंग को एन्कोड करना चाहते हैं, उसके अलावा; इसका अर्थ है कि आपके अंतिम गैर-एन्कोडेड चैनलों को
0x0000-0xFFFF
(बेतरतीब ढंग से चुने गए) के बीच होना चाहिए । - अंतिम परिणाम को आरजीबी रंग मानों के 2 डी सरणी के रूप में व्यक्त करना ठीक है
0x000000-0xFFFFFF
, छवि निर्माण का उपयोग करने की आवश्यकता नहीं है जब तक कि आप इसके साथ मज़े नहीं करना चाहते हैं या यदि यह कम बाइट्स है। यदि आप हेक्स स्ट्रिंग्स के रूप में आउटपुट चुनते हैं, तो#
ईजी के साथ हेक्स स्ट्रिंग को उपसर्ग करें#FFFFFF
या#05AB1E
। आप टैब, अल्पविराम, या कुछ और के साथ अलग हो सकते हैं जो क्षैतिज रूप से समझदार होगा, लेकिन इसे वर्ग पैटर्न को बनाए रखना होगा; दूसरे शब्दों में, आपको उपयुक्त न्यूलाइन पृथक्करण का उपयोग करना चाहिए। - आउटपुट एक वर्ग में होना चाहिए, और स्ट्रिंग को इसे बंद करने के लिए अंत में रिक्त स्थान के साथ गद्देदार होना चाहिए। इसका मतलब है कि
N≈SQRT(Input#Length())
। यदि इनपुट लंबाई एक पूर्ण वर्ग नहीं है, तो आपकोN
रिक्त स्थान के साथ और पैड पर गोल होना चाहिए । - जैसा कि पहले कहा गया है, यदि आप छवि में रिक्त स्थान के साथ पैडिंग कर रहे हैं, तो आपको अंतिम "डिक्रिप्टेड" आउटपुट में गद्देदार वर्णों को शामिल नहीं करना चाहिए।
- आप मान सकते हैं कि:
- इनपुट स्ट्रिंग रिक्त स्थान के साथ समाप्त नहीं होगी।
- इनपुट स्ट्रिंग केवल मुद्रण योग्य ASCII वर्णों का उपयोग करेगी।
- यह कोड-गोल्फ है , सबसे कम बाइट काउंट जीतता है।