वैकल्पिक नाम: ChessMoveQ
32 तत्वों तक की सूची को देखते हुए, प्रत्येक में 4 तत्वों से युक्त और 4 तत्वों के साथ एक दूसरी सूची है, यह निर्धारित करें कि क्या दूसरे इनपुट में विस्तृत कदम एक वैध शतरंज चाल है।
पहली सूची बोर्ड पर सभी 32 टुकड़ों की स्थिति को इंगित करती है। प्रत्येक तत्व संरचना का पालन करेगा <colour>, <piece-name>, <x-coord>, <y-coord>
, जैसे कि ["W", "K", 5, 1]
, जो इंगित करता है कि सफेद राजा चालू है 5, 1
( e1
एक सामान्य शतरंज बोर्ड पर)। पहले इनपुट के सभी तत्व अद्वितीय होंगे। <x-coord>
और <y-coord>
हमेशा 1 और 8 के बीच होगा। एक उदाहरण यह होगा:
[["B", "K", 3, 8], ["B", "Q", 1, 5], ["B", "N", 4, 7], ["B", "N", 7, 8],
["B", "B", 2, 4], ["B", "R", 4, 8], ["B", "R", 8, 8], ["B", "P", 1, 7],
["B", "P", 2, 7], ["B", "P", 3, 6], ["B", "P", 5, 6], ["B", "P", 6, 7],
["B", "P", 7, 7], ["B", "P", 8, 7], ["W", "K", 5, 1], ["W", "Q", 6, 3],
["W", "N", 3, 3], ["W", "B", 5, 2], ["W", "B", 6, 4], ["W", "R", 1, 1],
["W", "R", 8, 1], ["W", "P", 1, 3], ["W", "P", 2, 2], ["W", "P", 3, 2],
["W", "P", 4, 4], ["W", "P", 6, 2], ["W", "P", 7, 2], ["W", "P", 8, 3]]
जो बोर्ड का प्रतिनिधित्व करेगा:
दूसरे इनपुट में पहले के सब्लिस्ट के रूप में समान संरचनाएं शामिल होंगी, लेकिन x और y निर्देशांक के बजाय यह दर्शाता है कि टुकड़ा कहां है, वे संकेत कर रहे हैं कि वह कहां स्थानांतरित करने की कोशिश कर रहा है।
उपरोक्त उदाहरण के लिए, एक वैध चाल हो सकती है ["W", "B", 4, 3]
(बिशप एक वर्ग को आगे और बाईं ओर ले जाता है), और एक अवैध चाल हो सकती है ["B", "R", 4, 1]
क्योंकि बदमाश को नाइट के माध्यम से चलना होगा, और वर्ग को प्राप्त करने के लिए मोहरा होगा। जैसा कि यह कदम कई बार कई टुकड़ों को संदर्भित कर सकता है, आपको यह परीक्षण करना होगा कि क्या निर्दिष्ट टुकड़े में से कोई भी चाल बना सकता है, न कि उनमें से केवल एक। उदाहरण के लिए, पहला उदाहरण केवल एक बिशप के लिए मान्य है, लेकिन यह अभी भी एक वैध कदम है। हालांकि, न तो काला बदमाश दूसरा कदम उठा सकता है, इसलिए यह अमान्य है।
आपका कार्य यह निर्धारित करना है कि दूसरे इनपुट में विस्तृत कदम एक वैध शतरंज चाल है या नहीं। एक नियम की वैधता भिन्न होती है, जो उस टुकड़े को स्थानांतरित करने की कोशिश पर निर्भर करती है (मान्य चाल के आरेख के लिए टुकड़े के नाम पर क्लिक करें):
- कोई भी टुकड़ा : कोई भी टुकड़ा पहले से ही कब्जे वाले वर्ग या बोर्ड के बाहर नहीं जा सकता है, जब तक कि उस वर्ग को दूसरे रंग के टुकड़े पर कब्जा न हो। उदाहरण के लिए, एक सफेद टुकड़ा एक काले टुकड़े के कब्जे वाले एक वर्ग पर जा सकता है, लेकिन एक सफेद टुकड़ा नहीं। इसके अतिरिक्त, शूरवीरों को छोड़कर, कोई भी टुकड़ा, उन वर्गों पर नहीं जा सकता है जो सीधे दूसरे टुकड़े द्वारा बाधित हैं।
- टुकड़ा द्वारा एक कदम बी वर्ग के लिए सी "सीधे बाधित" है टुकड़ा द्वारा एक अगर एक , सीधे है एक सीधी (ओर्थोगोनल या विकर्ण) लाइन में के बीच बी और सी ।
- कोई भी टुकड़ा : राजा की स्थिति एक टुकड़े की चाल की वैधता को भी प्रभावित कर सकती है। यदि इन दोनों में से कोई एक शर्त पूरी होती है, तो यह कदम अमान्य है:
- लुप्तप्राय राजा के रूप में एक ही तरफ एक टुकड़ा ले जाकर, राजा को जांचने के लिए उजागर करना। यह केवल तभी लागू होता है जब एक गैर-विरोध करने वाला टुकड़ा राजा को जांचने के लिए स्थानांतरित करने वाले एक विरोधी टुकड़े के बजाय कदम बनाता है।
- जाँच में राजा, जिस स्थिति में इसे छोड़ने है की जाँच बाहर स्थानांतरित करने के। इसलिए, यदि राजा जांच में है और चाल यह निर्धारित करती है कि एक और टुकड़ा चलता है, तो यह एक अमान्य चाल है, जब तक कि दूसरा टुकड़ा चेक को रोक नहीं रहा है। एक टुकड़ा दो तरीकों में से एक को रोक सकता है: या तो यह टुकड़ा प्रदर्शन चेक ले जाता है, या यह टुकड़ा प्रदर्शन चेक और राजा के बीच के मार्ग को बाधित करता है।
- एक "चेक" एक ऐसी स्थिति है जिसमें राजा के प्रतिद्वंद्वी (यदि यह स्थानांतरित करने की उनकी बारी थी) कानूनी तौर पर उस राजा पर एक टुकड़ा ले जा सकते हैं। यह नियम पुनरावर्ती रूप से लागू नहीं होता है, अर्थात एक राजा जांच में होता है, भले ही उस राजा के प्रतिद्वंद्वी द्वारा किए गए कदम से अपने ही राजा को रोक दिया जाए।
- पंजे : एक मोहरा आगे की ओर जा सकता है (अर्थात ऊपर की ओर सफेद, नीचे की ओर यदि काला हो) एक वर्ग रहित वर्ग में। तीन विशेष परिस्थितियाँ भी हैं:
- यदि मोहरा अभी तक स्थानांतरित नहीं हुआ है (आप वाई-समन्वय का उपयोग करके यह निर्धारित कर सकते हैं, तो सफेद प्यादे नहीं चले गए हैं यदि उनका वाई-समन्वय 2 है, तो काले प्यादे स्थानांतरित नहीं हुए हैं यदि उनका वाई-समन्वय 7 है), प्यादा एक अनचाहे वर्ग के लिए दो वर्गों को आगे बढ़ने की अनुमति है।
- यदि मोहरे के सामने तिरछे (यानी उत्तर-पश्चिम या उत्तर-पूर्व में चौक पर अगर यह सफेद है, या दक्षिण-पश्चिम या दक्षिण-पूर्व में काला है तो) प्यादे को विचाराधीन कब्जे वाले वर्ग पर जाने की अनुमति है।
- यदि कोई मोहरा अंतिम Y- समन्वय (सफेद के लिए 8, या काले रंग के लिए 1) में चलता है, तो सामान्य शतरंज के नियमों में इसे रानी, बदमाश, नाइट या एक ही रंग के बिशप को बढ़ावा देना चाहिए। इस प्रश्न के प्रयोजनों के लिए, पदोन्नति का विकल्प इस बात के लिए अप्रासंगिक है कि यह कदम वैध है या नहीं (और इसे इनपुट प्रारूप में व्यक्त नहीं किया जा सकता है), लेकिन प्यादा चालें जिसके परिणामस्वरूप पदोन्नति की अनुमति होनी चाहिए।
- बिशप : बिशप 1 और 8 वर्गों के बीच किसी भी निरंतर गैर-बाधित इंटरकार्डिनल (यानी विकर्ण) पथ के साथ आगे बढ़ सकते हैं।
- शूरवीरों : शूरवीरों एक
L
आकारमें आगे बढ़ सकते हैं, जिसमें निम्नलिखित (समतुल्य) चालें शामिल हैं:- किसी भी कार्डिनल दिशा में एक वर्ग, जिसके बाद 90/270 ° मोड़, उसके बाद 2 वर्ग आगे बढ़ते हैं।
- किसी भी कार्डिनल दिशा में 2 वर्ग, एक 90/270 ° मोड़ के बाद, एक एकल वर्ग आगे की अंतिम चाल के बाद।
- Rooks : Rooks 1 और 8 वर्गों के बीच किसी भी निरंतर गैर-बाधित कार्डिनल पथ पर जा सकते हैं।
- क्वींस : क्वींस किसी भी निरंतर कार्डिनल या इंटरकार्डिनल (यानी विकर्ण) गैर-बाधित मार्ग के साथ 1 और 8 वर्गों के बीच जा सकता है।
- किंग्स : किंग्स रानियों की तरह चलते हैं, सिवाय इसके कि वे केवल एक वर्ग प्रति चाल तक ही सीमित हैं (यानी एक राजा केवल कार्डिनल या तिरछे आसन्न वर्गों में जा सकता है)। एक अनुस्मारक के रूप में, आप एक चाल नहीं बना सकते हैं जो आपके राजा को जांच में छोड़ देता है; इस प्रकार आप अपने राजा को जांच में स्थानांतरित नहीं कर सकते।
शतरंज के नियमों में "कालिंग" और "एन पास" नामक विशेष चालें भी हैं। हालाँकि, क्योंकि इन चालों की वैधता खेल के इतिहास पर निर्भर करती है, न कि केवल वर्तमान स्थिति (और क्योंकि कास्टिंग के लिए एक साथ दो टुकड़ों को स्थानांतरित करने की आवश्यकता होती है, जो इनपुट प्रारूप के साथ फिट नहीं होते हैं), आपको इन चालों में से किसी पर भी विचार नहीं करना चाहिए। मौजूद होना (यानी एक चाल जो कास्ट या एन पासेंट को गैरकानूनी माना जाएगा)।
आप किसी चाल की वैधता को इंगित करने के लिए किसी भी दो अलग-अलग परिणामों का उत्पादन कर सकते हैं, और आप जिस विधि से चाहते हैं उसमें इनपुट ले सकते हैं। यदि आप चाहें तो आप पदों के लिए 1-अनुक्रमण के बजाय 0-अनुक्रमण को भी चुन सकते हैं। यह एक कोड-गोल्फ है , इसलिए सबसे छोटा कोड जीतता है!
परीक्षण के मामलों
Board
Move => Output (Reason)
[["B", "K", 3, 8], ["B", "Q", 1, 5], ["B", "N", 4, 7], ["B", "N", 7, 8], ["B", "B", 2, 4], ["B", "R", 4, 8], ["B", "R", 8, 8], ["B", "P", 1, 7], ["B", "P", 2, 7], ["B", "P", 3, 6], ["B", "P", 5, 6], ["B", "P", 6, 7], ["B", "P", 7, 7], ["B", "P", 8, 7], ["W", "K", 5, 1], ["W", "Q", 6, 3], ["W", "N", 3, 3], ["W", "B", 5, 2], ["W", "B", 6, 4], ["W", "R", 1, 1], ["W", "R", 8, 1], ["W", "P", 1, 3], ["W", "P", 2, 2], ["W", "P", 3, 2], ["W", "P", 4, 4], ["W", "P", 6, 2], ["W", "P", 7, 2], ["W", "P", 8, 3]]
["W", "R", 8, 2] => True (The rook on h1 can move forward one)
[['B', 'K', 6, 8], ['B', 'Q', 1, 7], ['B', 'N', 1, 3], ['B', 'N', 7, 1], ['B', 'B', 8, 8], ['B', 'B', 2, 5], ['B', 'R', 4, 3], ['B', 'R', 1, 5], ['B', 'P', 5, 5], ['B', 'P', 7, 2], ['B', 'P', 5, 7], ['B', 'P', 5, 6], ['B', 'P', 4, 4], ['W', 'K', 7, 3], ['W', 'Q', 3, 2], ['W', 'N', 4, 8], ['W', 'N', 7, 5], ['W', 'B', 1, 1], ['W', 'B', 8, 1], ['W', 'R', 1, 8], ['W', 'R', 3, 7], ['W', 'P', 8, 2], ['W', 'P', 6, 3], ['W', 'P', 4, 2], ['W', 'P', 1, 4], ['W', 'P', 8, 7]]
['W', 'N', 1, 5] => False (Neither knight to move to a5 from where they are)
[['B', 'K', 7, 3], ['B', 'Q', 2, 4], ['B', 'N', 5, 2], ['B', 'N', 1, 6], ['B', 'B', 7, 7], ['B', 'B', 1, 8], ['W', 'K', 7, 1], ['W', 'Q', 6, 1], ['W', 'N', 5, 6], ['W', 'N', 3, 3], ['W', 'B', 2, 2], ['W', 'B', 6, 5]]
['B', 'K', 8, 3] => False (The white bishop would put the king in check)
[['B', 'K', 7, 6], ['B', 'Q', 8, 3], ['B', 'N', 7, 7], ['B', 'N', 8, 7], ['B', 'B', 2, 2], ['B', 'B', 3, 8], ['B', 'R', 1, 1], ['B', 'R', 1, 6], ['B', 'P', 8, 5], ['B', 'P', 4, 3], ['B', 'P', 8, 6], ['W', 'K', 7, 8], ['W', 'Q', 7, 2], ['W', 'N', 5, 1], ['W', 'N', 4, 6], ['W', 'B', 1, 2], ['W', 'B', 2, 6], ['W', 'R', 4, 4], ['W', 'R', 3, 6], ['W', 'P', 5, 2], ['W', 'P', 6, 2]]
['B', 'N', 5, 8] => False (The white queen currently has the king in check, and this move doesn't prevent that)
[['B', 'K', 7, 6], ['B', 'Q', 8, 3], ['B', 'N', 7, 7], ['B', 'N', 8, 7], ['B', 'B', 2, 2], ['B', 'B', 3, 8], ['B', 'R', 1, 1], ['B', 'R', 1, 6], ['B', 'P', 8, 5], ['B', 'P', 4, 3], ['B', 'P', 8, 6], ['W', 'K', 7, 8], ['W', 'Q', 7, 2], ['W', 'N', 5, 1], ['W', 'N', 4, 6], ['W', 'B', 1, 2], ['W', 'B', 2, 6], ['W', 'R', 4, 4], ['W', 'R', 3, 6], ['W', 'P', 5, 2], ['W', 'P', 6, 2]]
['B', 'N', 7, 5] => True (The king is in check, and the knight blocks that)
[['B', 'K', 8, 3], ['B', 'Q', 6, 5], ['B', 'N', 7, 8], ['B', 'N', 3, 7], ['B', 'B', 4, 1], ['B', 'B', 1, 1], ['W', 'K', 7, 7], ['W', 'Q', 7, 1], ['W', 'N', 2, 2], ['W', 'N', 1, 3], ['W', 'B', 3, 5]]
['B', 'B', 2, 2] => True (takes the white knight)
[['B', 'K', 6, 1], ['B', 'Q', 6, 2], ['W', 'K', 8, 1]]
['B', 'Q', 7, 1] => True (Smallest checkmate possible, in terms of bounding box)
इस चुनौती को सैंडबॉक्स किया गया था । यह बिना किसी स्पष्टीकरण के डाउनवोट प्राप्त किया, इसलिए मैंने इसे वैसे भी पोस्ट करने का निर्णय लिया