सुडोकू के लिए वाई-विंग रणनीति


11

मुझे हाल ही में एक नया सुडोकू ऐप मिला है जो वास्तव में कठिन सुडोकू पैदा करता है, जिसे मानक रणनीतियों का उपयोग करके हल नहीं किया जा सकता है। इसलिए मुझे कुछ नए सीखने थे। इन रणनीतियों में से एक वाई-विंग रणनीति है । इसे "टफ स्ट्रैटेजीज़" के तहत रैंक दिया गया है, लेकिन यह वास्तव में उतना कठिन नहीं है।

उदाहरण

इस रणनीति के लिए केवल 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] # -||-

क्या एक इनपुट में कई सेट बिल्कुल एक जैसे हो सकते हैं?
ऑप्टिमाइज़र

@ ओप्टिमाइज़र हाँ, उदाहरण के लिए 8 वीं परीक्षा के मामले में, 7 8पहले और दूसरे सेल के लिए उम्मीदवार हैं। Y- विंग रणनीति अभी भी लागू की जा सकती है।
जकुबे

@Jakube आह ठीक है, यह नहीं देखा।
ऑप्टिमाइज़र

यदि 1 से अधिक समाधान संभव हैं, तो क्या मैं उनमें से किसी एक को आउटपुट कर सकता हूं?
ऑप्टिमाइज़र

हां, मैंने इसे प्रश्न में स्पष्ट किया।
जकुबे

जवाबों:


3

सीजेएम, 90 बाइट्स

उगह, यह अड़चन के कारण बहुत लंबा है कि अन्य 3 कोशिकाओं में केवल 2 उम्मीदवार होने चाहिए।

l~_:_(a+2/::&_{,}$2>:&:Y;{:PY&Y{P1<}?~}%:X,3>1${,}$W=_,2>\Y&,1?*{X:_(+2/{~:I=}#)_2$=I-t}&p

यह CJam प्रारूप में सूची की सूची के रूप में इनपुट की अपेक्षा करता है। पूर्व के लिए:

[[2 6] [3 6] [3 7] [6 7]]

सूची प्रारूप की CJam सूची में आउटपुट देता है:

[[2] [3 6] [3 7] [6 7]]

मैं गोल्फ कर रहा हूँ एक बार स्पष्टीकरण जोड़ देंगे ..

इसे यहाँ ऑनलाइन आज़माएँ या पूरे टेस्ट सूट यहाँ आज़माएँ


3

गणितज्ञ, 124 110 बाइट्स

Cases[e@n_:>n]/@(Plus@@e/@#&/@#/.NestList[RotateLeft/@#&,{x:a_+b_,y:b_+c_,z:c_+a_,w:a_+_.}->{x,y,z,w-a+1},3])&

उदाहरण:

In[1]:= yWing = Cases[e@n_:>n]/@(Plus@@e/@#&/@#/.NestList[RotateLeft/@#&,{x:a_+b_,y:b_+c_,z:c_+a_,w:a_+_.}->{x,y,z,w-a+1},3])& ;

In[2]:= yWing[{{3, 7}, {6, 7}, {2, 6}, {3, 6}}]

Out[2]= {{3, 7}, {6, 7}, {2}, {3, 6}}

In[3]:= yWing[{{4, 7}, {7, 8}, {4, 8}, {4}}]

Out[3]= {{4, 7}, {7, 8}, {4, 8}, {}}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.