"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > एक शतरंज बोर्ड के बारे में

एक शतरंज बोर्ड के बारे में

2024-08-27 को प्रकाशित
ब्राउज़ करें:907

साप्ताहिक चुनौती 281

पिछले कुछ हफ़्तों से एमआईए बने रहने के लिए क्षमा करें। मैंने घर बदल लिया है और नई नौकरी कर ली है, इसलिए इस दौरान चुनौतियों में भाग लेने का मौका नहीं मिला।

प्रत्येक सप्ताह मोहम्मद एस. अनवर द वीकली चैलेंज भेजते हैं, जो हम सभी के लिए दो साप्ताहिक कार्यों के समाधान के साथ आने का एक मौका है। मेरे समाधान पहले पायथन में लिखे गए हैं, और फिर पर्ल में परिवर्तित किए गए हैं। यह हम सभी के लिए कोडिंग का अभ्यास करने का एक शानदार तरीका है।

चुनौती, मेरे समाधान

कार्य 1: रंग जांचें

काम

आपको निर्देशांक दिए गए हैं, एक स्ट्रिंग जो शतरंज की बिसात के एक वर्ग के निर्देशांक का प्रतिनिधित्व करती है जैसा कि नीचे दिखाया गया है:

The one about a chess board

यदि वर्ग हल्का है तो सत्य और यदि वर्ग गहरा है तो गलत लौटाने के लिए एक स्क्रिप्ट लिखें।

मेरा समाधान

यह अपेक्षाकृत सीधा है। पहली चीज जो मैं करता हूं वह यह जांचता है कि प्रदान की गई स्थिति वैध है (पहला अक्षर ए-एच है और दूसरा अक्षर 1 और 8 के बीच है)।

मैं फिर जाँचता हूँ कि क्या पहला अक्षर a, c, e या g है और संख्या सम है, या पहला अक्षर b, d, f या h है और संख्या विषम है, तो सही लौटें। अन्यथा झूठी वापसी करें।

def check_color(coords: str) -> bool:
    if not re.search('^[a-h][1-8]$', coords):
        raise ValueError('Not a valid chess coordinate!')

    if coords[0] in ('a', 'c', 'e', 'g') and int(coords[1]) % 2 == 0:
        return True
    if coords[0] in ('b', 'd', 'f', 'h') and int(coords[1]) % 2 == 1:
        return True
    return False

उदाहरण

$ ./ch-1.py d3
true

$ ./ch-1.py g5
false

$ ./ch-1.py e6
true

टास्क 2: नाइट की चाल

काम

शतरंज में एक शूरवीर अपनी वर्तमान स्थिति से दो पंक्तियों या स्तंभों के अलावा एक स्तंभ या पंक्ति दूर किसी भी वर्ग में जा सकता है। तो नीचे दिए गए चित्र में, यदि यह S से प्रारंभ होता है, तो यह E चिह्नित किसी भी वर्ग में जा सकता है।

The one about a chess board

एक स्क्रिप्ट लिखें जो प्रारंभिक स्थिति और समाप्ति स्थिति लेती है और आवश्यक चालों की न्यूनतम संख्या की गणना करती है।

मेरा समाधान

यह अधिक विस्तृत है। मैं निम्नलिखित वेरिएबल्स से शुरू करता हूं:

  • डेल्टा सूचियों का एक टुपल्स है (पर्ल में सरणियों की श्रृंखला) जिसमें नाइट अपनी वर्तमान स्थिति से आठ तरीकों से आगे बढ़ सकता है।
  • लक्ष्य वह सेल है जिस तक हम पहुंचना चाहते हैं। इसके लिए मैं पहले अक्षर को एक से 8 तक की संख्या में परिवर्तित करता हूं। इसे टपल के रूप में संग्रहीत किया जाता है, पहला मान कॉलम है और दूसरा मान पंक्ति है।
  • चालें की गई चालों की संख्या है और एक से शुरू होती है।
  • देखा गया उन सेल की सूची है जिन्हें हम पहले ही देख चुके हैं।
  • कोर्ड्स एक शूरवीर की वर्तमान स्थिति की एक सूची है। यह शुरुआती निर्देशांक से शुरू होता है।
def knights_move(start_coord: str, end_coord: str) -> int:
    for coord in (start_coord, end_coord):
        if not re.search('^[a-h][1-8]$', coord):
            raise ValueError(
                f'The position {coord} is not a valid chess coordinate!')

    deltas = ([2, 1], [2, -1], [-2, 1], [-2, -1],
              [1, 2], [1, -2], [-1, 2], [-1, -2])
    coords = [convert_coord_to_list(start_coord)]
    target = convert_coord_to_list(end_coord)
    moves = 1
    seen = []

मेरे पास वर्तमान कोर्डर्स सूची और डेल्टा सूची का एक डबल लूप है। एक वैरिएबल new_pos सेट करें जो नाइट के लिए नए निर्देशांक का प्रतिनिधित्व करता है। यदि यह बोर्ड के बाहर की स्थिति या समन्वय की ओर ले जाता है जहां हम पहले ही जा चुके हैं, तो मैं इसे छोड़ देता हूं। यदि यह लक्ष्य पर पहुँचता है, तो मैं चाल मान लौटाता हूँ।

लूप के बाद, मैं निर्देशांक सूची को पुनरावृत्तियों के माध्यम से एकत्र किए गए निर्देशांक पर रीसेट करता हूं, और चाल मान को एक से बढ़ाता हूं। यह तब तक जारी रहता है जब तक हम लक्ष्य निर्देशांक तक नहीं पहुंच जाते।

    while True:
        new_coords = []

        for coord in coords:
            for delta in deltas:
                new_pos = (coord[0]   delta[0], coord[1]   delta[1])

                if not 0 



उदाहरण

$ ./ch-2.py g2 a8
4

$ ./ch-2.py g2 h2
3
विज्ञप्ति वक्तव्य यह लेख यहां पुन: प्रस्तुत किया गया है: https://dev.to/simongreennet/the-one-about-a-chess-board-57mh?1 यदि कोई उल्लंघन है, तो कृपया इसे हटाने के लिए [email protected] से संपर्क करें।
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3