इस कोड का ध्यानपूर्वक अध्ययन करें और उन पेचीदा सुडोकू पहेलियों को हल करने के लिए पुनरावर्तन का उपयोग करने का एक चतुर तरीका खोजें।
सुडोकू एक लोकप्रिय संख्या पहेली है जिसमें 1 से 9 तक अंकों के साथ 9x9 ग्रिड होते हैं। पहेली में संख्याओं का संयोजन और कुछ रिक्त स्थान शामिल हैं, जिन्हें आपको भरने की आवश्यकता है।
रिक्त स्थानों को भरते समय, प्रत्येक पंक्ति, कॉलम, और 3x3 सब-ग्रिड में 1 से 9 तक के सभी अंक होने चाहिए।
एक साधारण पायथन स्क्रिप्ट आपके लिए सुडोकू पहेली को हल करने में मदद कर सकती है। यह सुडोकू बोर्ड पर सभी रिक्त स्थानों का विश्लेषण कर सकता है, और प्रत्येक रिक्त स्थान को भरने के लिए संभावित संख्या का पता लगा सकता है।
सुडोकू बोर्ड कैसे बनाएं और प्रदर्शित करें
पायथन स्क्रिप्ट के अंदर, आपको अनसुलझी सुडोकू पहेली के मूल्यों को संग्रहीत करने के लिए सरणियों की एक सूची का उपयोग करने की आवश्यकता होगी।
इस प्रोजेक्ट में इस्तेमाल किया गया कोड इसमें उपलब्ध है गिटहब रेपो एमआईटी लाइसेंस के तहत।
- सुडोकू.पी नामक एक नई पायथन लिपि के अंदर, 9x9 ग्रिड के लिए सभी मानों को संग्रहित करें। प्रत्येक पंक्ति और स्तंभ सुडोकू पहेली के ऊपर और नीचे नौ संख्याओं का प्रतिनिधित्व करते हैं। हल करने की आवश्यकता वाले रिक्त स्थान का प्रतिनिधित्व करने के लिए 0s जोड़ें:
बोर्ड = [
[5, 3, 0, 0, 7, 0, 0, 0, 0],
[6, 0, 0, 1, 9, 5, 0, 0, 0],
[0, 9, 8, 0, 0, 0, 0, 6, 0],
[8, 0, 0, 0, 6, 0, 0, 0, 3],
[4, 0, 0, 8, 0, 3, 0, 0, 1],
[7, 0, 0, 0, 2, 0, 0, 0, 6],
[0, 6, 0, 0, 0, 0, 2, 8, 0],
[0, 0, 0, 4, 1, 9, 0, 0, 5],
[0, 0, 0, 0, 8, 0, 0, 7, 9]
] - Print_board नामक एक नए फ़ंक्शन के अंदर, लूप के लिए उपयोग करें ग्रिड में प्रत्येक पंक्ति को संसाधित करने के लिए:
डीईएफ़print_board(तख़्ता):
के लिए पंक्ति में श्रेणी(9): - प्रत्येक पंक्ति को तिहाई में अलग करने के लिए, जांचें कि क्या पंक्ति तीन से विभाज्य है, और एक पंक्ति जोड़ें:
अगर पंक्ति % 3 == 0और पंक्ति! = 0:
प्रिंट ("- - - - - - - - - - - - - - ") - प्रत्येक पंक्ति के भीतर, प्रत्येक कॉलम के माध्यम से लूप करें। यदि कॉलम तीन से विभाज्य है, तो आप यह जाँच कर कॉलम को तीन भागों में विभाजित कर सकते हैं:
के लिए कर्नल में श्रेणी(9):
अगर कर्नल% 3 == 0और कर्नल! = 0:
प्रिंट (" | ", अंत ="") - ग्रिड में संग्रहीत संख्या मान प्रिंट करें। यदि कॉलम उस विशेष पंक्ति के लिए अंतिम कॉलम है, तो ब्रेक लाइन जोड़ें, ताकि निम्न पंक्ति एक नई लाइन पर दिखाई दे:
अगर कोल == 8:
प्रिंट (बोर्ड [पंक्ति] [कर्नल])
अन्य:
प्रिंट (एसटीआर (बोर्ड [पंक्ति] [कर्नल]) + " ", अंत ="") - बोर्ड प्रिंट करने के लिए फ़ंक्शन को कॉल करें:
प्रिंट_बोर्ड (बोर्ड)
- एक कमांड लाइन में, उस फ़ोल्डर में नेविगेट करें जहां आपने अपनी पायथन स्क्रिप्ट को संग्रहीत किया था, उदाहरण के लिए:
सीडी डेस्कटॉप
- अपनी सुडोकू स्क्रिप्ट चलाने के लिए पायथन कमांड का प्रयोग करें। स्क्रीन पर छपी पहेली देखें:
अजगर सुडोकू.py
हल करने के लिए खाली जगहों की पहचान कैसे करें
आप 0 से युक्त रिक्त स्थान खोजने के लिए सूचियों के माध्यम से जा सकते हैं। ये निर्धारित करते हैं कि किन रिक्त स्थानों को हल करने की आवश्यकता है।
- Find_empty () नामक एक नए फ़ंक्शन में, बोर्ड पर प्रत्येक पंक्ति और कॉलम के माध्यम से लूप करें:
डीईएफ़find_खाली(तख़्ता):
के लिए पंक्ति में श्रेणी(9):
के लिए कर्नल में श्रेणी(9): - यदि वर्तमान सेल का मान 0 है, तो खाली सेल की वर्तमान स्थिति लौटाएँ:
अगर बोर्ड [पंक्ति] [कर्नल] == 0:
वापस करना (पंक्ति, कर्नल) - यदि स्क्रिप्ट फ़ंक्शन के अंत तक पहुंचती है, तो इसका मतलब है कि स्क्रिप्ट को 0 के मान के साथ कोई सेल नहीं मिला। इस मामले में, कुछ भी वापस न करें:
वापस करनाकोई नहीं
- हल () नामक एक नए फ़ंक्शन में, बोर्ड पर पहली खाली जगह खोजने के लिए खोज फ़ंक्शन का उपयोग करें:
डीईएफ़हल करना(तख़्ता):
ढूंढें = ढूंढें_खाली (बोर्ड) - Find_empty () फ़ंक्शन सेल की स्थिति को टपल प्रारूप में लौटाता है, उदाहरण के लिए, (0, 2)। इन मानों को अलग-अलग में सहेजें पंक्ति और कर्नल चर। अन्यथा, यह इंगित करने के लिए सही लौटें कि हल करने के लिए कोई रिक्त स्थान नहीं बचा है:
अगरनहीं पाना:
वापस करनासत्य
अन्य:
पंक्ति, कर्नल = ढूँढें
प्रत्येक पंक्ति, कॉलम और 3x3 ग्रिड के लिए पहेली को कैसे हल करें
अब जब आप हल करने के लिए पहली खाली जगह की पहचान कर सकते हैं, तो आपको उस जगह को भरने और पहेली को हल करने के लिए एक उपयुक्त संख्या खोजने की कोशिश करनी होगी।
रिकर्सन का उपयोग करना, अन्य सभी स्थानों के लिए मानों के हर संभव संयोजन को आज़माने के लिए स्वयं के भीतर समाधान () फ़ंक्शन को कॉल करें।
- हल () फ़ंक्शन के अंदर, पहली खाली जगह खोजने के बाद, प्रत्येक संख्या के माध्यम से 1 से 9 तक लूप करें। ये संख्याएँ उन संभावित संख्याओं का प्रतिनिधित्व करती हैं जो अनसुलझी जगह को भर सकती हैं:
के लिए अंक में श्रेणी(1, 10):
- एक नए फ़ंक्शन में बोर्ड, संभावित संख्या और खाली सेल की स्थिति दर्ज करें। यदि वह संख्या एक वैध संख्या है जो उस रिक्त स्थान को हल कर सकती है तो नया फ़ंक्शन सही हो जाएगा। यदि यह मान्य है, तो उस नंबर को बोर्ड पर सेल को असाइन करें:
अगर is_valid (बोर्ड, अंक, (पंक्ति, कर्नल)):
बोर्ड [पंक्ति] [कर्नल] = संख्या - मिलान पैरामीटर के साथ is_valid() फ़ंक्शन बनाएं:
डीईएफ़यह सही है(बोर्ड, संख्या, स्थिति):
- यह जांचने के लिए फ़ंक्शन का उपयोग करें कि उस स्थिति में नंबर रखने से सुडोकू गेम के किसी नियम का उल्लंघन होता है या नहीं। सबसे पहले, जांचें कि क्या वह संख्या सेल की पंक्ति या स्तंभ में पहले से मौजूद है:
के लिए कर्नल में श्रेणी(9):
अगर बोर्ड [स्थिति [0]] [कर्नल] == संख्या और स्थिति [1] != कर्नल:
वापस करनाअसत्यके लिए पंक्ति में श्रेणी(9):
अगर बोर्ड [पंक्ति] [स्थिति]1]] == संख्या और स्थिति [0] != पंक्ति:
वापस करनाअसत्य - सेल से संबंधित 3x3 ग्रिड प्राप्त करें। आप सेल की स्थिति को तीन से भाग देकर ऐसा कर सकते हैं:
बॉक्स_रो = स्थिति [0] // 3
बॉक्स_कोल = स्थिति [1] // 3 - उस 3x3 ग्रिड में प्रत्येक पंक्ति और कॉलम के लिए, जांचें कि संख्या पहले से मौजूद है या नहीं। अगर ऐसा होता है, तो झूठी वापसी करें:
के लिए पंक्ति में सीमा (बॉक्स_पंक्ति*3, बॉक्स_पंक्ति*3 + 3):
के लिए कर्नल में रेंज (बॉक्स_कोल*3, बॉक्स_कोल*3 + 3):
अगर बोर्ड [पंक्ति] [कर्नल] == संख्या और (पंक्ति, कर्नल)! = स्थिति:
वापस करनाअसत्य - यदि स्क्रिप्ट फ़ंक्शन के अंत तक पहुँचती है, तो इसका मतलब है कि कोई भी सुडोकू नियम विफल नहीं हुआ। वापसी सच:
वापस करनासत्य
- is_valid() फ़ंक्शन केवल जाँचता है कि क्या नंबर प्लेसमेंट मान्य है, लेकिन इसका मतलब यह नहीं है कि यह समग्र समाधान का सही उत्तर है। हल () फ़ंक्शन के भीतर, अपडेट किए गए बोर्ड के साथ हल () फ़ंक्शन को फिर से कॉल करें। हल () फ़ंक्शन उस स्थिति तक पहुंच सकता है जहां यह किसी भी रिक्त स्थान को भरने के लिए किसी भी संख्या का उपयोग नहीं कर सकता है। इस स्थिति में, संपूर्ण फ़ंक्शन गलत रिटर्न देता है, उस विशेष सेल को वापस 0 पर रीसेट करता है, और बैकट्रैक करता है। हल () फ़ंक्शन केवल तभी सही होता है जब स्क्रिप्ट सभी रिक्त स्थान भर सकती है:
के लिए अंक में श्रेणी(1, 10):
अगर is_valid (बोर्ड, अंक, (पंक्ति, कर्नल)):
बोर्ड [पंक्ति] [कर्नल] = संख्या
अगर हल (बोर्ड):
वापस करनासत्य
बोर्ड [पंक्ति] [कर्नल] = 0वापस करनाअसत्य
- पहेली को हल करना शुरू करने के लिए, हल () फ़ंक्शन को घोषित करने के बाद, स्क्रिप्ट के निचले भाग में, मूल बोर्ड के साथ हल () फ़ंक्शन को कॉल करें:
हल (बोर्ड)
- अंतिम परिणाम प्रिंट करें:
प्रिंट ("हल किया:")
प्रिंट_बोर्ड (बोर्ड) - कमांड लाइन पर, स्क्रिप्ट को फिर से चलाने के लिए पायथन कमांड का उपयोग करें। स्क्रीन पर छपी हल की हुई पहेली देखें:
अजगर सुडोकू.py
पायथन का उपयोग करके गेम बनाना
सुडोकू उन कई खेलों में से एक है जिन्हें आप पायथन का उपयोग करके बना सकते हैं और हल कर सकते हैं। आप पाइथन का उपयोग कई अन्य गेम बनाने के लिए कर सकते हैं, जैसे कि वर्ड जंबल, टेक्स्ट-आधारित एडवेंचर गेम, या कलर गेम, कुछ ही नाम।