मान लीजिए कि हमारे पास शतरंज के समान नियमों के साथ एक अनंत शतरंज की बिसात है और अगर अनंत शतरंज की बिसात पर N शूरवीर निर्देशांक हैं और राजा का समन्वय है, तो हमें यह जांचना होगा कि राजा चेकमेट है या नहीं। अनंत बोर्ड का निर्देशांक बड़े मान से घिरा होता है जैसे (-10^9 <=x, y <=10^9)।
तो, अगर इनपुट शूरवीरों की स्थिति =[[2,1], [1,3], [3,6], [5,5], [6,1], [7,3]] और राजा की स्थिति की तरह है :[4,3],
तब आउटपुट ट्रू होगा, क्योंकि राजा के पास कोई चाल नहीं है, इसलिए यह चेक मेट है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- my_dict :=एक नया नक्शा
- मैं के लिए 0 से n की सीमा में, करते हैं
- x :=a[i, 0]
- y :=a[i, 1]
- my_dict[x, y] :=1
- my_dict[x - 2, y + 1] :=1
- my_dict[x - 2, y - 1] :=1
- my_dict[x + 1, y + 2] :=1
- my_dict[x + 1, y - 2] :=1
- my_dict[x - 1, y + 2] :=1
- my_dict[x + 2, y + 1] :=1
- my_dict[x + 2, y-1] :=1
- my_dict[x - 1, y - 2] :=1
- मैं श्रेणी -1 से 1 के लिए, करो
- जे के लिए -1 से 1 की श्रेणी में, करें
- nx :=king_pos[0] + i
- ny:=king_pos[1] + j
- यदि i, 0 के समान नहीं है और j, 0 के समान नहीं है, तो
- अगर my_dict[(nx, ny)] शून्य है, तो
- झूठी वापसी
- अगर my_dict[(nx, ny)] शून्य है, तो
- जे के लिए -1 से 1 की श्रेणी में, करें
- सही लौटें
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
def is_checkmate(a, n, king_pos): my_dict = {} for i in range(0, n): x = a[i][0] y = a[i][1] my_dict[(x, y)] = 1 my_dict[(x - 2, y + 1)] = 1 my_dict[(x - 2, y - 1)] = 1 my_dict[(x + 1, y + 2)] = 1 my_dict[(x + 1, y - 2)] = 1 my_dict[(x - 1, y + 2)] = 1 my_dict[(x + 2, y + 1)] = 1 my_dict[(x + 2, y - 1)] = 1 my_dict[(x - 1, y - 2)] = 1 for i in range(-1, 2): for j in range(-1, 2): nx = king_pos[0] + i ny = king_pos[1] + j if i != 0 and j != 0: if not my_dict[(nx, ny)]: return False return True a = [[2,1],[1,3],[3,6],[5,5],[6,1],[7,3]] n = len(a) pos = [4, 3] print (is_checkmate(a, n, pos))
इनपुट
[[2,1],[1,3],[3,6],[5,5],[6,1],[7,3]], 6, [4, 3]
आउटपुट
True