पृष्ठभूमि
नॉनोग्राम , जिसे पिक्रोस या ग्रिडलर्स के रूप में भी जाना जाता है, एक पहेली है जहां उद्देश्य यह निर्धारित करना है कि प्रत्येक पंक्ति पर लगातार रंगीन कोशिकाओं की संख्या का उपयोग करके 2 डी ग्रिड पर प्रत्येक सेल को रंगीन या खाली छोड़ दिया जाना चाहिए।
निम्नलिखित समाधान के साथ एक उदाहरण नॉनोग्राम पहेली है।
समस्या यह है कि कुछ व्यावसायिक नॉनोग्राम गेम्स / मोबाइल ऐप में ऐसी पहेलियां होती हैं जो हाथ से हल करने योग्य नहीं होती हैं (जैसे कई समाधान होते हैं, या गहरी बैकट्रैकिंग की आवश्यकता होती है)। हालांकि, वे खिलाड़ी को कुछ जीवन भी प्रदान करते हैं, जहां एक जीवन खो जाता है जब आप एक सेल को रंगने की कोशिश करते हैं जिसका सही उत्तर रिक्त है । तो अब उन बुरा "पहेली" को पाटने का समय है!
कार्य को सरल बनाने के लिए, इसके सुराग के साथ सिर्फ एक पंक्ति की कल्पना करें और कुछ नहीं:
3 7 | _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
[3,7]
सुराग हैं, और लाइन की लंबाई 15 कोशिकाओं है। चूंकि इसके कई संभावित समाधान हैं, हमें इस लाइन को पूरी तरह से हल करने के लिए कुछ जीवन को जोखिम में डालने की आवश्यकता है (अर्थात सभी रंगीन कोशिकाओं को निर्धारित करें)।
चुनौती
सुरागों (सकारात्मक पूर्णांक की एक सूची) और रेखा की लंबाई के साथ एक पंक्ति को देखते हुए, अपने जीवन की अधिकतम संख्या को खो देंगे, यह मानते हुए कि आप इष्टतम रणनीति के साथ पंक्ति को बल देते हैं।
ध्यान दें कि आप हमेशा रंगीन कोशिकाओं का अनुमान लगाते हैं । वास्तविक खेलों में, खाली कोशिकाओं (या तो सही या गलत) का अनुमान लगाने से आपके जीवन पर कोई प्रभाव नहीं पड़ता है, इसलिए आप इस तरह से पहेली को "हल" नहीं कर सकते हैं।
इसके अलावा, आप यह मान सकते हैं कि इनपुट हमेशा एक वैध नॉनोग्राम रेखा का प्रतिनिधित्व करता है, इसलिए आपको किसी चीज़ के बारे में चिंता करने की आवश्यकता नहीं है [6], 5
।
व्याख्या
आइए पहले कुछ सरल उदाहरण देखें।
[1,2], 5
इस लाइन के लिए तीन संभावनाएं हैं ( O
एक रंगीन सेल है, .
एक खाली है):
O . O O .
O . . O O
. O . O O
यदि हम रंग 0 सेल करने की कोशिश करते हैं (बाएं से 0-आधारित सूचकांक), तो निम्न में से एक होता है:
- सेल सही ढंग से रंगीन है। अब हमारे पास दो संभावनाएं हैं, और हम पूरी तरह से लाइन को हल करने के लिए सेल 2 और सेल 4 के बीच चयन कर सकते हैं। किसी भी मामले में, हम सबसे खराब स्थिति में एक जीवन खो देंगे।
- सेल खाली है, और हम एक जीवन खो देते हैं। इस मामले में, हमने पहले ही इस रेखा के लिए अद्वितीय समाधान की पहचान कर ली है, इसलिए हम 1 जीवन खो चुके हैं।
इसलिए, [1,2], 5
1 का उत्तर है।
[5], 10
द्विआधारी खोज? नहीं।
सबसे स्पष्ट पहली पसंद 4 या 5 है, जो रिक्त होने पर (1 जीवन की लागत पर) एक संभावना को प्रकट करेगी। मान लीजिए कि हमने पहले 4 को चुना। यदि सेल 4 वास्तव में रंगीन है, तो हम इसे बाईं ओर बढ़ाते हैं, अर्थात 3, 2, 1 और 0 का प्रयास करें जब तक कि एक जीवन खो नहीं जाता है (या सेल 0 रंगीन है, तो हम कोई भी जीवन नहीं बिताते हैं)। जब भी कोई जीवन खो जाता है, तो हम समाधान को विशिष्ट रूप से निर्धारित कर सकते हैं, जैसे कि अगर हम कुछ ऐसा देखते हैं:
_ _ X O O _ _ _ _ _
तो हम पहले से ही जवाब पता है:
. . . O O O O O . .
इसलिए, का उत्तर [5], 10
भी 1 है।
[3,7], 15
सेल 11 से शुरू करें, जो खाली होने पर, निम्न समाधान को तुरंत प्रकट करेगा।
O O O . O O O O O O O X . . .
फिर 12 का प्रयास करें, जो खाली होने पर, दो संभावनाएं देता है जिन्हें 1 अतिरिक्त जीवन की कीमत पर हल किया जा सकता है।
O O O . . O O O O O O O X . .
. O O O . O O O O O O O X . .
अब प्रयास करें 2. यदि खाली है, तो यह तीन संभावनाओं की ओर जाता है जिसे [1,2], 5
उदाहरण के समान हल किया जा सकता है ।
. . X O O O . O O O O O O O .
. . X O O O . . O O O O O O O
. . X . O O O . O O O O O O O
यदि आप इस तरीके से जोखिम कम से कम रखते हैं, तो आप अधिकतम के साथ किसी भी समाधान तक पहुंच सकते हैं। 2 जीवन बिताया।
परीक्षण के मामलों
[1,2] 5 => 1
[2] 5 => 2
[1] 5 => 4
[] 5 => 0
[5] 10 => 1
[2,1,5] 10 => 0
[2,4] 10 => 2
[6] 15 => 2
[5] 15 => 2
[4] 15 => 3
[3,7] 15 => 2
[3,4] 15 => 3
[2,2,4] 15 => 4
[1,1,1,1,1,1,1] 15 => 2
[2,1,1,3,1] 15 => 3
[1,1,1,2,1] 15 => 5
पिछले दो मामलों के लिए, इष्टतम रणनीति न्यूनतम रिक्त स्थान से नहीं गुजर रही है, लेकिन बस बाएं से दाएं (या दाएं से बाएं) जा रही है। इसे इंगित करने के लिए @crashoz को धन्यवाद।
नियम
मानक कोड-गोल्फ नियम लागू होते हैं। बाइट्स में सबसे कम वैध जमाव जीतता है।
इनाम
यदि कोई बहुपद-कालिक एल्गोरिथ्म (शुद्धता के प्रमाण के साथ) के साथ आता है, तो मैं इस तरह के समाधान के लिए +100 इनाम देगा।
[6], 5
?