मुझे हाल ही में एक नया सुडोकू ऐप मिला है जो वास्तव में कठिन सुडोकू पैदा करता है, जिसे मानक रणनीतियों का उपयोग करके हल नहीं किया जा सकता है। इसलिए मुझे कुछ नए सीखने थे। इन रणनीतियों में से एक वाई-विंग रणनीति है । इसे "टफ स्ट्रैटेजीज़" के तहत रैंक दिया गया है, लेकिन यह वास्तव में उतना कठिन नहीं है।
उदाहरण
इस रणनीति के लिए केवल 4 कोशिकाएं महत्वपूर्ण हैं। इसलिए मैंने छवियों में अन्य सभी कोशिकाओं को नजरअंदाज कर दिया।
हम प्रत्येक सेल के लिए सभी उम्मीदवारों को देखते हैं। निम्नलिखित उदाहरण में हमारे पास उम्मीदवारों के साथ एक सेल है 3 7
(इसका मतलब है कि हमने पहले ही उम्मीदवारों को अस्वीकार कर दिया है 1 2 4 5 6 8 9
, उदाहरण के लिए क्योंकि एक 1
ही पंक्ति में है, एक 2
ही 3x3 बॉक्स में, ...), उम्मीदवारों के साथ एक सेल 6 7
, उम्मीदवारों के साथ एक सेल 3 6
और उम्मीदवारों के साथ एक सेल 2 6
। Y- विंग की रणनीति सुझाव देगी, कि 6
केवल एक 2
उम्मीदवार के रूप में छोड़ कर, सीधे सेल के उम्मीदवारों से हटाया जा सकता है , जिसे आप भर सकते हैं। इसलिए हमें एक सही संख्या मिली और पूर्ण सुडोकू को हल करने में एक कदम करीब हैं।
क्यों 6
हटाया जा सकता है?
व्याख्या
चलिए मान लेते हैं कि 6
यह सर्वथा सेल के लिए सही संख्या है। अब 6
इस कॉलम में एक है, इसलिए हम 6
शीर्ष दाएं सेल के उम्मीदवारों से हटा सकते हैं , केवल एक को छोड़कर 7
, जो भर सकता है। ऐसा ही नीचे बाईं सेल के साथ होता है। हम हटा सकते हैं 6
और अंदर भर सकते हैं 3
। अब अगर हम शीर्ष बाएं सेल को देखें तो हमें एक विरोधाभास मिलता है। क्योंकि अब पहले से ही एक 7
ही पंक्ति में और एक 3
ही कॉलम में है, इसलिए हम उम्मीदवारों को हटा सकते हैं 7
और 3
सभी उम्मीदवारों को छोड़ सकते हैं। जो स्पष्ट रूप से संभव नहीं है। इसलिए 6 सर्वथा सेल की सही संख्या नहीं हो सकती है।
अधिक सटीक: यदि हमारे पास उम्मीदवारों के साथ 4 सेल हैं [A B] [A C] [C D] [B C]
(इस क्रम में या परिपत्र घुमाया गया है) और एक सर्कल में सेल जुड़े हुए हैं (एक ही पंक्ति, एक ही स्तंभ या समान 3x3 बॉक्स के माध्यम से) (सेल 1 सेल 2 से जुड़ा है, जो है) सेल 3 से जुड़ा है, जो सेल 4 से जुड़ा है, जो सेल 1 से जुड़ा हुआ है), सेल C
से हटा सकते हैं [C D]
। यह महत्वपूर्ण है, कि तीन कोशिकाएं [A B]
, [A C]
और [B C]
केवल दो उम्मीदवार हों। अलग-अलग सेल [C D]
, जिसमें अधिक या कम D
हो सकता है ( शून्य, एक या अधिक उम्मीदवार हो सकते हैं)।
ध्यान दें कि मैंने स्पष्ट रूप से कहा है कि उन्हें किसी भी तरह से जोड़ा जा सकता है। अगले उदाहरण में आप फिर से लागू की गई रणनीति देख सकते हैं। लेकिन इस बार 4 सेल एक आयत नहीं बनाते हैं। नीचे की ओर बाईं और नीचे की कोशिकाएँ बस जुड़ी हुई हैं, क्योंकि वे एक ही 3x3 बॉक्स में हैं। वाई-विंग का कहना है, कि हम 1
शीर्ष बाएं सेल के उम्मीदवार के रूप में निकाल सकते हैं । इस बार इस सेल में अभी भी 2 उम्मीदवार बचे हैं, इसलिए हमें वास्तव में एक नया सही नंबर नहीं मिला। लेकिन फिर भी कैन को हटाने 1
से विभिन्न रणनीतियों के दरवाजे खुल सकते हैं।
यदि आप रणनीति के बारे में अधिक जानकारी चाहते हैं या कुछ और उदाहरण चाहते हैं, sudokuwiki.org पर जाएं ।
चुनौती विनिर्देशों
आप इनपुट के रूप में 4 सूचियाँ प्राप्त करेंगे, जो कोशिकाओं के उम्मीदवारों का प्रतिनिधित्व करेंगे। चार सेल एक सर्कल की तरह जुड़े हुए हैं (सेल 1 सेल 2 से जुड़ा है, जो सेल 3 से जुड़ा है, जो सेल 4 से जुड़ा है, जो सेल 1 से जुड़ा है)। आप मान सकते हैं कि प्रत्येक सूची को आरोही क्रम में क्रमबद्ध किया गया है।
आपका काम एक उम्मीदवार को हटाना है (वाई-विंग रणनीति लागू करके) और उसी क्रम में परिणामी उम्मीदवारों की सूची वापस करना। यदि आप रणनीति लागू नहीं कर सकते हैं, तो केवल उन्हीं उम्मीदवारों की सूची वापस करें।
यदि दो संभावित समाधान हैं (आप सेल बी का ए हटा सकते हैं या सेल डी का सी हटा सकते हैं), केवल एक समाधान वापस करने से। इससे कोई फर्क नहीं पड़ता कि कौन सा है।
इनपुट किसी भी मूल सूची या सरणी प्रारूप में हो सकता है। आप सूची या कुछ समान सूची का भी उपयोग कर सकते हैं। आप STDIN, कमांड-लाइन तर्क, प्रॉम्प्ट या फ़ंक्शन तर्क के माध्यम से इनपुट प्राप्त कर सकते हैं और आउटपुट को रिटर्न वैल्यू के माध्यम से या बस STDOUT पर प्रिंट करके वापस कर सकते हैं।
यह कोड-गोल्फ है। सबसे छोटा कोड (बाइट्स में) जीतता है।
परीक्षण के मामलों
[3 7] [6 7] [2 6] [3 6] => [3 7] [6 7] [2] [3 6] # Example 1
[6 7] [2 6] [3 6] [3 7] => [6 7] [2] [3 6] [3 7] # Example 1, different order
[2 6] [3 6] [3 7] [6 7] => [2] [3 6] [3 7] [6 7] # Example 1, different order
[3 6] [3 7] [6 7] [2 6] => [3 6] [3 7] [6 7] [2] # Example 1, different order
[1 2 8] [1 8] [8 9] [1 9] => [2 8] [1 8] [8 9] [1 9] # Example 2
[3 8] [4 8] [3 4 8] [3 4] => [3 8] [4 8] [3 8] [3 4]
[1 3 6 7 8] [3 8] [3 4] [4 8] => [1 3 6 7] [3 8] [3 4] [4 8]
[7 8] [7 8] [4 7] [4 8] => [7 8] [8] [4 7] [4 8] or [7] [7 8] [4 7] [4 8]
[4 7] [7 8] [4 8] [4] => [4 7] [7 8] [4 8] [] # Fictional example
[3 7] [2 6] [6 7] [3 6] => [3 7] [2 6] [6 7] [3 6] # Y-Wing can't be applied here
[4 7] [2 7 8] [4 8] [1 4] => [4 7] [2 7 8] [4 8] [1 4] # -||-
7 8
पहले और दूसरे सेल के लिए उम्मीदवार हैं। Y- विंग रणनीति अभी भी लागू की जा सकती है।