Помогите решить задачу проверки угрозы королю на шахматной доске

На шахматной доске находятся король и несколько ферзей другого цвета. Проверить находится ли король под угрозой и если да, кто ему угрожает. Положение фигур задано массивом 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 шт):

Автор решения: TigerTV.ru

Алгоритм следующий: Задаем расположение короля, ферзей. Потом проверяем, находится ли король на общих вертикалях, горизонталях, диагоналях с ферзями. Если король под ударом, то выведутся координаты ферзей которые это делают.

Примерно так:

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-шахмат будет немного отличаться.

→ Ссылка