Проверка: может ли шашка "съесть" шашку противника? Реализация на Python
Задача:
В первой строке даны числа
NиM(1 ≤ N, M ≤ 103) - размеры доски, на которой разработчики играют в шашки. Каждое поле имеет свой цвет, черный или белый. При этом гарантируется, что поле с координатами (1, 1) имеет черный цвет. Гарантируется также, что поле, имеющее общую границу с черным полем, будет иметь белый цвет, а поле, имеющее общую границу с белым полем, - черный цвет.В следующей строке дано число
w- количество белых шашек на поле. В следующих w строках задаются два целых числаiиj(1 ≤ i ≤ N, 1 ≤ j ≤ M) - поля, на которых стоят белые шашки. В следующей строке дано числоb- количество черных шашек на поле. В следующихbстроках задаются поля с черными шашками, точно так же, как и с белыми. Гарантируется, что количество шашек каждого цвета - целое положительное число, и что 2 ≤ w + b ≤ (NM + 1) / 2 .Гарантируется, что все шашки стоят на черных полях.В заключительной строке ввода указано, чей ход:
white, если белых, иblack, если черных.
Задача выглядит несложной, начал решать в лоб - написал условие. Оказалось, что не все тесты проходят. Не могу найти вариант расстановки, при котором алгоритм ошибается.
Мой код:
N, M = map(int, input().split())
w = int(input())
w_coord = [list(map(int, input().split())) for i in range(w)]
b = int(input())
b_coord = [list(map(int, input().split())) for i in range(b)]
move = input()
def moving(arr1, arr2, N, M):
for i in range(len(arr1)):
if (((([arr1[i][0] + 1, arr1[i][1] + 1] in arr2) and
([arr1[i][0] + 2, arr1[i][1] + 2] not in arr2) and
([arr1[i][0] + 2, arr1[i][1] + 2] not in arr1) and
((arr1[i][0] + 2 <= N) and (arr1[i][1] +2 <= M))) or
(([arr1[i][0] - 1, arr1[i][1] + 1] in arr2) and
([arr1[i][0] - 2, arr1[i][1] + 2] not in arr2) and
([arr1[i][0] - 2, arr1[i][1] + 2] not in arr1 ) and
((arr1[i][0] - 2 <= N) and (arr1[i][1] + 2 <= M)))) or
(((([arr1[i][0] - 1, arr1[i][1] - 1] in arr2) and
([arr1[i][0] - 2, arr1[i][1] - 2] not in arr2) and
([arr1[i][0] - 2, arr1[i][1] - 2] not in arr1) and
((arr1[i][0] - 2 <= N) and (arr1[i][1] - 2 <= M))) or
(([arr1[i][0] + 1, arr1[i][1] - 1] in arr2) and
([arr1[i][0] + 2, arr1[i][1] - 2] not in arr2) and
([arr1[i][0] + 2, arr1[i][1] - 2] not in arr1) and
((arr1[i][0] + 2 <= N) and (arr1[i][1] - 2 <= M)))))):
return 'Yes'
return 'No'
if move == 'white':
print(moving(w_coord, b_coord, N, M))
else:
print(moving(b_coord, w_coord, N, M))
Ответы (1 шт):
При ходе влево и вниз нужно сравнивать с нулём, а не с N, M
((arr1[i][0] - 2 > 0)
и т.п.