समस्या विवरण
अनंत शतरंज बोर्ड पर N नाइट्स के निर्देशांक और राजा का निर्देशांक दिया गया है। जांचें कि क्या राजा चेकमेट है (कोई वैध चाल नहीं)। बोर्ड निर्देशांक: -10⁹ ≤ x,y ≤ 10⁹।
उदाहरण
नाइट्स: [[2,1], [1,3], [3,6], [5,5], [6,1], [7,3]]
राजा: [4, 3]
आउटपुट: True (चेकमेट)
एल्गोरिदम
- डिक्शनरी
my_dictमें सभी नाइट्स की पोजीशन और उनकी अटैक पोजीशन (8 संभावित चालें) मार्क करें - राजा के 8 पड़ोसी वर्गों (+1/-1 x,y) के लिए:
- यदि कोई वर्ग
my_dictमें नहीं है (सुरक्षित), तोFalse(चेकमेट नहीं)
- यदि कोई वर्ग
- सभी 8 वर्ग कवर हैं →
True(चेकमेट)
पायथन कार्यान्वयन
def is_checkmate(knights, king_pos):
attacked = set()
for x, y in knights:
attacked.add((x, y))
for dx, dy in [(-2,1),(-2,-1),(1,2),(1,-2),(-1,2),(2,1),(2,-1),(-1,-2)]:
attacked.add((x+dx, y+dy))
kx, ky = king_pos
for dx in (-1, 0, 1):
for dy in (-1, 0, 1):
if dx == 0 and dy == 0:
continue
if (kx+dx, ky+dy) not in attacked:
return False
return True
knights = [[2,1],[1,3],[3,6],[5,5],[6,1],[7,3]]
king = [4, 3]
print(is_checkmate(knights, king))
इनपुट
[[2,1],[1,3],[3,6],[5,5],[6,1],[7,3]], [4,3]
आउटपुट
True