Помогите решить задачу проверки угрозы королю на шахматной доске
На шахматной доске находятся король и несколько ферзей другого цвета. Проверить находится ли король под угрозой и если да, кто ему угрожает. Положение фигур задано массивом K(8,8): 0-клетка пуста, 1-король, 2-ферзь. Ферзь бьет по горизонтали, вертикали, диагонали
Спустя какое-то время было много вариантов как это сделать и в итоге ни один не сработал.
В конечном результате получил это, но понял, что нужно описывать ход ферзя, а не позицию, но не знаю как. Еще был вариант через матрицы, но я с ними не особо хорошо лажу)
пробовал создавать кортежи, списки, но...
king_x = (input("x: "))
king_y = (input("y: "))
queen1_x = (input("x: "))
queen1_y = (input("y: "))
queen2_x = (input("x: "))
queen2_y = (input("y: "))
if king_x == queen1_x and king_y == queen1_y:
print("First queen take damage for king")
else:
print("loxushka")
if king_x == queen2_x and king_y == queen2_y:
print("Second queen take damage for king")
else:
print("loxushka")
Ответы (1 шт):
Алгоритм следующий: Задаем расположение короля, ферзей. Потом проверяем, находится ли король на общих вертикалях, горизонталях, диагоналях с ферзями. Если король под ударом, то выведутся координаты ферзей которые это делают.
Примерно так:
def point():
return int(input("x: ")), int(input("y: "))
print("King")
king = point()
queens = []
for i in range(1,3):
print("Queen" + str(i))
queens.append(point())
*res, = filter(lambda p: p[0] == king[0], queens) # вертикаль
print(res)
*res, = filter(lambda p: p[1] == king[1], queens) # горизонталь
print(res)
*res, = filter(lambda p: (p[1] - p[0]) == (king[1] - king[0]), queens) # диагональ 1
print(res)
*res, = filter(lambda p: (king[0] + king[1]) == (p[0] + p[1]), queens) # диагональ 2
print(res)
Для 3D-шахмат будет немного отличаться.