12.286.*Шахматную доску будем представлять в виде квадратного символьного массива
размером 8х8. Даны натуральные числа V и g], указывающие номера верти-
кали (при счете слева направо) и горизонтали (при счете снизу вверх) для поля,
на котором стоит белая шахматная фигура, и числа v2 и g2 - указывающие
соответствующие координаты второй, черной, фигуры (15vj S8, 15g 58,
1
может пойти первая фигура, не попав под удар второй фигуры. Рассмотреть сле-
дующие варианты сочетаний первой и второй фигур:
л) конь и ферзь;
м) конь и слон;
н) слон и слон;
о) слон и ферзь;
Ответы
Ответ:
Для решения задачи можно создать функцию, которая будет принимать координаты двух фигур и проверять, может ли первая фигура пойти безопасно. Например, для случая конь и ферзь можно использовать следующий код на языке Python:
def can_move_safely(knight_pos, queen_pos):
# Проверяем, что координаты находятся в пределах доски
if knight_pos[0] < 0 or knight_pos[0] > 7 or knight_pos[1] < 0 or knight_pos[1] > 7 \
or queen_pos[0] < 0 or queen_pos[0] > 7 or queen_pos[1] < 0 or queen_pos[1] > 7:
return False
# Проверяем, что первая фигура - конь
if abs(knight_pos[0] - queen_pos[0]) == 2 and abs(knight_pos[1] - queen_pos[1]) == 1 \
or abs(knight_pos[0] - queen_pos[0]) == 1 and abs(knight_pos[1] - queen_pos[1]) == 2:
# Фигуры бьют друг друга
return False
# Проверяем, что первая фигура - ферзь
if knight_pos[0] == queen_pos[0] or knight_pos[1] == queen_pos[1] \
or abs(knight_pos[0] - queen_pos[0]) == abs(knight_pos[1] - queen_pos[1]):
# Фигуры бьют друг друга
return False
return True
Здесь knight_pos и queen_pos - это кортежи, содержащие координаты фигур. Например, (2, 3) означает, что фигура стоит на вертикали 2 и горизонтали 3.
Для проверки всех сочетаний фигур можно написать следующий код:
# Вариант л): конь и ферзь
for knight_pos in [(V, g), (V + 1, g + 2), (V + 2, g + 1), (V + 2, g - 1),
(V + 1, g - 2), (V - 1, g - 2), (V - 2, g - 1), (V - 2, g + 1),
(V - 1, g + 2)]:
if can_move_safely(knight_pos, (v2, g2)):
print("Конь на", knight_pos, "может пойти безопасно")
break
else:
print("Конь не может пойти безопасно")
if can_move_safely((V, g), (v2, g2)):
print("Ферзь на", (V, g), "может пойти безопасно")
else:
print("Ферзь не может пойти безопасно")
# Вариант м): конь и слон
for knight_pos in [(V, g), (V +