🎉 Glückwunsch! 🎉
Du hast die Aufgabe hervorragend gelöst! Es war schwierig, aber du hast die Lösung gefunden. Du bist dem Meister einen Schritt näher! Mach weiter so.
ProgerLib Python für alle
Sie sind ein Großmeister und müssen ein Programm schreiben, das die Koordinaten von acht Damen auf dem Standard-Schachbrett 8 × 8 als Eingabe erhält und eine vollständige Analyse ihrer Aufstellung durchführt.
yes ausgeben. no ausgeben. . angezeigt, Zellen mit einer Dame durch das Symbol Q . 1 1
2 3
3 5
4 7
5 2
6 4
7 6
8 8
Ja
1 1 und 8 8 schlagen sich diagonal gegenseitig.
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()
🎉 Glückwunsch! 🎉
Du hast die Aufgabe hervorragend gelöst! Es war schwierig, aber du hast die Lösung gefunden. Du bist dem Meister einen Schritt näher! Mach weiter so.
AD
Werbung
Führe deinen Code aus...