🎉 बधाई! 🎉
आपने कार्य को शानदार ढंग से हल किया! यह कठिन था, लेकिन आपने सही उत्तर खोजा। आप प्रोग्रामिंग में महारत के करीब हैं! ऐसे ही जारी रखें।
ProgerLib सभी के लिए Python
आप एक ग्रैंडमास्टर हैं और आपको एक प्रोग्राम लिखना है जो मानक शतरंज बोर्ड 8 × 8 पर आठ फेरेज़ के निर्देशांक इनपुट पर प्राप्त करता है और उनकी व्यवस्था का पूर्ण विश्लेषण करता है।
yes प्रदर्शित करना चाहिए। no प्रदर्शित करना चाहिए। . द्वारा दर्शाया जाता है, और फ़र्ज़ी वाले कोशिकाओं को प्रतीक Q द्वारा दर्शाया जाता है। 1 1
2 3
3 5
4 7
5 2
6 4
7 6
8 8
हाँ
1 1 और 8 8 एक-दूसरे को विकर्ण रूप से हराते हैं।
Q. . . . . . .
. . Q. . . . .
. . . . Q. . .
. . . . . . Q.
. Q. . . . . .
. . . Q. . . .
. . . . . Q. .
. . . . . . . Q
def read_and_validate_coordinates():
"""
Считывает 8 пар координат, проверяет их на корректность.
Возвращает список кортежей с координатами или None в случае ошибки.
"""
coords = []
try:
for _ in range(8):
# Считываем строку и разделяем на части
parts = input().split()
# Проверяем, что в строке ровно два элемента
if len(parts) != 2:
raise ValueError
# Преобразуем в целые числа
row, col = int(parts[0]), int(parts[1])
# Проверяем, что координаты в диапазоне от 1 до 8
if not (1 <= row <= 8 and 1 <= col <= 8):
raise ValueError
coords.append((row, col))
except (ValueError, IndexError):
# ValueError возникает при неудачном int() или если условия не выполнены
# IndexError может возникнуть, если split() дал меньше 2 элементов (хотя len(parts) это покрывает)
return None
return coords
def find_attacking_pair(coords):
"""
Ищет первую атакующую пару ферзей.
Возвращает кортеж (queen1, queen2, attack_type) или None, если атак нет.
"""
# Проверка на дубликаты координат (ферзи на одной клетке)
if len(coords) != len(set(coords)):
# Найдем первую дублирующуюся пару
seen = set()
duplicate = None
for q in coords:
if q in seen:
duplicate = q
break
seen.add(q)
# Найдем индексы дубликатов
indices = [i for i, x in enumerate(coords) if x == duplicate]
q1 = coords[indices[0]]
q2 = coords[indices[1]]
# Ферзи на одной клетке - это и горизонтальная, и вертикальная атака.
# Выберем "вертикали" для определенности.
return q1, q2, "вертикали"
# Проверяем все уникальные пары ферзей
for i in range(len(coords)):
for j in range(i + 1, len(coords)):
r1, c1 = coords[i]
r2, c2 = coords[j]
# Проверка по горизонтали
if r1 == r2:
return coords[i], coords[j], "горизонтали"
# Проверка по вертикали
if c1 == c2:
return coords[i], coords[j], "вертикали"
# Проверка по диагонали
if abs(r1 - r2) == abs(c1 - c2):
return coords[i], coords[j], "диагонали"
return None, None, None
def print_board(coords):
"""
Печатает шахматную доску 8x8 с расставленными ферзями.
"""
board = [['.' for _ in range(8)] for _ in range(8)]
for r, c in coords:
# Координаты (1,1) соответствуют индексу [0][0]
board[r - 1][c - 1] = 'Q'
for row in board:
print(' '.join(row))
def main():
"""
Главная функция программы.
"""
coordinates = read_and_validate_coordinates()
if coordinates is None:
print("Ошибка: координаты должны быть числами от 1 до 8.")
return
q1, q2, attack_type = find_attacking_pair(coordinates)
if attack_type:
print("YES")
print(f"{q1[0]} {q1[1]} и {q2[0]} {q2[1]} бьют друг друга по {attack_type}.")
print_board(coordinates)
else:
print("NO")
main()
🎉 बधाई! 🎉
आपने कार्य को शानदार ढंग से हल किया! यह कठिन था, लेकिन आपने सही उत्तर खोजा। आप प्रोग्रामिंग में महारत के करीब हैं! ऐसे ही जारी रखें।
AD
विज्ञापन
कोड चल रहा है...