यह ब्रिटिश खुफिया को हराने के लिए एक खतरनाक खोज पर लगने का समय है। इस चुनौती का उद्देश्य सबसे छोटा कोड लिखना है जो एक नॉनोग्राम को हल करेगा।
नॉनोग्राम क्या है?
नियम सरल हैं। आपके पास चौकों का एक ग्रिड है, जिसे या तो काले या बाएं खाली में भरा जाना चाहिए। ग्रिड की प्रत्येक पंक्ति के बगल में उस पंक्ति पर काले वर्गों के रनों की लंबाई सूचीबद्ध है। प्रत्येक स्तंभ के ऊपर उस स्तंभ में काले वर्गों के रनों की लंबाई सूचीबद्ध है। अपने उद्देश्य के लिए सभी काले वर्गों को खोजने के लिए है। इस पहेली प्रकार में, संख्याएं असतत टोमोग्राफी का एक रूप हैं जो मापती हैं कि भरे हुए वर्गों की कितनी अखंड रेखाएं हैं जो किसी भी पंक्ति या स्तंभ में हैं। उदाहरण के लिए, "4 8 3" के एक क्लू का मतलब होगा कि उस क्रम में चार, आठ और तीन भरे हुए वर्गों के सेट हैं, क्रमिक समूहों के बीच कम से कम एक खाली वर्ग के साथ। [ १ ] [ २ ]
तो उपरोक्त नॉनोग्राम का समाधान होगा:
कार्यान्वयन का विवरण
आप अपनी पसंद के अनुसार जो भी तरीका अपनाते हैं, उसे गैर-प्रतिनिधित्व का प्रतिनिधित्व करने के लिए चुन सकते हैं और इसे एक इनपुट के रूप में ले सकते हैं। वही आउटपुट के लिए जाता है। इस चुनौती का उद्देश्य शाब्दिक रूप से बस काम करना है; यदि आप अपने प्रोग्राम को जो भी आउटपुट देते हैं, उसके साथ नॉनोग्राम को हल कर सकते हैं, जो कि मान्य है। एक चेतावनी है कि आप एक ऑनलाइन सॉल्वर का उपयोग नहीं कर सकते :)
यह समस्या बहुत ही एल्गोरिदमिक रूप से चुनौतीपूर्ण (एनपी-पूर्ण) है जिसमें इसका कोई पूर्ण रूप से कुशल समाधान नहीं है और इस तरह, आपको बड़े लोगों को हल करने में सक्षम नहीं होने के लिए दंडित नहीं किया जाएगा, हालांकि यह होने पर आपके उत्तर को भारी पुरस्कृत किया जाएगा। बड़े मामलों को संभालने में सक्षम (बोनस देखें)। एक बेंचमार्क के रूप में, मेरा समाधान 5-10 सेकंड के भीतर लगभग 25x25 तक काम करता है। विभिन्न भाषाओं में लचीलेपन की अनुमति देने के लिए, 25x25 नॉनोग्राम के लिए 5 मिनट से कम समय में समाधान पर्याप्त हैं।
आप हमेशा एक वर्ग NxN नॉनोग्राम में एक पहेली मान सकते हैं।
आप अपने समाधान का परीक्षण करने के लिए इस ऑनलाइन नॉनोग्राम पहेली निर्माता का उपयोग कर सकते हैं।
स्कोरिंग
आप निश्चित रूप से, अपनी इच्छित भाषा का उपयोग करने के लिए स्वतंत्र हैं और चूंकि यह कोड गोल्फ है, प्रविष्टियों को क्रम में क्रमबद्ध किया जाएगा: accuracy -> length of code -> speed.
हालांकि, कोड गोल्फिंग भाषाओं द्वारा हतोत्साहित नहीं किया जाता है, सभी भाषाओं में जवाब जो गोल्फिंग में प्रयास दिखाते हैं। एक दिलचस्प तरीके से उत्कीर्ण किया जाएगा!
बक्शीश
मैंने वास्तव में यहां ब्रिटिश इंटेलिजेंस द्वारा जारी एक क्रिप्टोग्राफिक क्रिसमस कार्ड से नॉनोग्राम के बारे में सीखा । पहला भाग मूल रूप से 25x25 नॉनग्राम था। यदि आपका समाधान इसे हल करने में सक्षम है, तो आपको कुदोस मिलेगा :)
डेटा प्रविष्टि के संदर्भ में आपके जीवन को आसान बनाने के लिए, मैंने प्रदान किया है कि कैसे मैंने आपके मुफ्त उपयोग के लिए इस विशिष्ट पहेली के डेटा का प्रतिनिधित्व किया। पहले 25 लाइनें पंक्ति के सुराग हैं, उसके बाद एक '-' विभाजक रेखा, उसके बाद कॉल लाइन की 25 पंक्तियाँ, इसके बाद '#' विभाजक रेखा और उसके बाद भरे हुए वर्ग के साथ ग्रिड का प्रतिनिधित्व होता है।
7 3 1 1 7
1 1 2 2 1 1
1 3 1 3 1 1 3 1
1 3 1 1 6 1 3 1
1 3 1 5 2 1 3 1
1 1 2 1 1
7 1 1 1 1 1 7
3 3
1 2 3 1 1 3 1 1 2
1 1 3 2 1 1
4 1 4 2 1 2
1 1 1 1 1 4 1 3
2 1 1 1 2 5
3 2 2 6 3 1
1 9 1 1 2 1
2 1 2 2 3 1
3 1 1 1 1 5 1
1 2 2 5
7 1 2 1 1 1 3
1 1 2 1 2 2 1
1 3 1 4 5 1
1 3 1 3 10 2
1 3 1 1 6 6
1 1 2 1 1 2
7 2 1 2 5
-
7 2 1 1 7
1 1 2 2 1 1
1 3 1 3 1 3 1 3 1
1 3 1 1 5 1 3 1
1 3 1 1 4 1 3 1
1 1 1 2 1 1
7 1 1 1 1 1 7
1 1 3
2 1 2 1 8 2 1
2 2 1 2 1 1 1 2
1 7 3 2 1
1 2 3 1 1 1 1 1
4 1 1 2 6
3 3 1 1 1 3 1
1 2 5 2 2
2 2 1 1 1 1 1 2 1
1 3 3 2 1 8 1
6 2 1
7 1 4 1 1 3
1 1 1 1 4
1 3 1 3 7 1
1 3 1 1 1 2 1 1 4
1 3 1 4 3 3
1 1 2 2 2 6 1
7 1 3 2 1 1
#
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 1 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 1 1 0 0 1 0 0 0 1 1 0 0 1 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 1 0 0 0 0 1 1 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
और यहां आपकी सुविधा के लिए थोड़ा अलग संस्करण है; अल्पविराम द्वारा अलग किया गया टपल (पंक्ति, कॉल) जहां प्रत्येक तत्व सूचियों की सूची है।
([[7, 3, 1, 1, 7],
[1, 1, 2, 2, 1, 1],
[1, 3, 1, 3, 1, 1, 3, 1],
[1, 3, 1, 1, 6, 1, 3, 1],
[1, 3, 1, 5, 2, 1, 3, 1],
[1, 1, 2, 1, 1],
[7, 1, 1, 1, 1, 1, 7],
[3, 3],
[1, 2, 3, 1, 1, 3, 1, 1, 2],
[1, 1, 3, 2, 1, 1],
[4, 1, 4, 2, 1, 2],
[1, 1, 1, 1, 1, 4, 1, 3],
[2, 1, 1, 1, 2, 5],
[3, 2, 2, 6, 3, 1],
[1, 9, 1, 1, 2, 1],
[2, 1, 2, 2, 3, 1],
[3, 1, 1, 1, 1, 5, 1],
[1, 2, 2, 5],
[7, 1, 2, 1, 1, 1, 3],
[1, 1, 2, 1, 2, 2, 1],
[1, 3, 1, 4, 5, 1],
[1, 3, 1, 3, 10, 2],
[1, 3, 1, 1, 6, 6],
[1, 1, 2, 1, 1, 2],
[7, 2, 1, 2, 5]],
[[7, 2, 1, 1, 7],
[1, 1, 2, 2, 1, 1],
[1, 3, 1, 3, 1, 3, 1, 3, 1],
[1, 3, 1, 1, 5, 1, 3, 1],
[1, 3, 1, 1, 4, 1, 3, 1],
[1, 1, 1, 2, 1, 1],
[7, 1, 1, 1, 1, 1, 7],
[1, 1, 3],
[2, 1, 2, 1, 8, 2, 1],
[2, 2, 1, 2, 1, 1, 1, 2],
[1, 7, 3, 2, 1],
[1, 2, 3, 1, 1, 1, 1, 1],
[4, 1, 1, 2, 6],
[3, 3, 1, 1, 1, 3, 1],
[1, 2, 5, 2, 2],
[2, 2, 1, 1, 1, 1, 1, 2, 1],
[1, 3, 3, 2, 1, 8, 1],
[6, 2, 1],
[7, 1, 4, 1, 1, 3],
[1, 1, 1, 1, 4],
[1, 3, 1, 3, 7, 1],
[1, 3, 1, 1, 1, 2, 1, 1, 4],
[1, 3, 1, 4, 3, 3],
[1, 1, 2, 2, 2, 6, 1],
[7, 1, 3, 2, 1, 1]])
s=[].fill([].fill(0,0,25),0,25);s[3][3]=s[3][4]=s3[3][12]=s3[3][13]=s3[3][21]=s[8][6]=s[8][7]=s[8][10]=s[8][14]=s[8][15]=s[8][18]=s[16][6]=s[16][11]=s[16][16]=s[16][20]=s[21][3]=s[21][4]=s[21][9]=s[21][10]=s[21][15]=s[21][20]=s[21][21]=1;