Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите решить задачу на питон

Леонид Морозов Ученик (97), открыт 1 неделю назад
Напомним, что в шахматах используется клеточная доска размером 8х8, где располагаются шахматные фигуры, которые могут перемещаться по определенным правилам. В частности, пешка ходит на 1 поле вперед по вертикали, начиная в начале игры свое движение со второй линии, при первом ходе пешка может перемещаться на 2 поля вперед по вертикали. Будем рассматривать только свободный ход пешки, т.е. тот случай, когда пешка перемещается в пустое поле.

Требуется определить: может ли пешка выполнить ход из клетки с координатами (X1,Y1) в клетку с координатами (X2,Y2) на стандартной шахматной доске?

Входные данные
Первая строка входного файла INPUT.TXT содержит два целых числа X1 и Y1 – начальную координату пешки. Во второй строке записана конечная координата – целые числа X2 и Y2 (1 ≤ X1,Y1,X2,Y2 ≤ 8). Гарантируется, что начальная и конечная координаты не совпадают.

Выходные данные
В выходной файл OUTPUT.TXT выведите «YES», если ход является допустимым, и «NO» - в противном случае.
2 ответа
Андрей Высший разум (462198) 1 неделю назад
 x1, y1 = map(int, input().split())
x2, y2 = map(int, input().split())
print(['NO', 'YES'][x1 == x2 and abs(y1 - y2) <= 1 + (y1 in [2, 7])])
Сдвигаться по X пешка не может. Из любой позиции пешка может сдвинуться на 1 по Y, а если y1 равно 2 или 7, дополнительно может сдвинуться на 2 по Y.
Проверять abs(y1 - y2) > 0 не требуется, т.к. из условия "начальная и конечная координаты не совпадают" следует, что если y1 == y2, то x1 != x2.

Используется то, что в Pyton слабая типизация: False автоматически преобразуется в 0, а True в 1.

Если же рассматривается не любая, а только белая пешка, условие немного меняется:
 print(['NO', 'YES'][x1 == x2 and y1 != 1 and 0 < y2 - y1 <= 1 + (y1 == 2)]) 
У белой пешки не может быть y1 == 1 и движется она строго в сторону увеличения Y.
Леонид МорозовУченик (97) 1 неделю назад
спасибо
Леонид МорозовУченик (97) 1 неделю назад
но всё равно тест не проходит:(
Андрей Высший разум (462198) Леонид Морозов, Дописал в основной ответ вариант только для белой пешки.
Леонид МорозовУченик (97) 1 неделю назад
а для черной и не надо
Рустам Абдрашитов Мыслитель (9542) 1 неделю назад
На
 def can_pawn_move(X1, Y1, X2, Y2): 
if X1 != X2:
return "NO"

deltaY = Y2 - Y1

if Y1 == 2 and (deltaY == 1 or deltaY == 2):
return "YES"
elif Y1 > 2 and deltaY == 1:
return "YES"

if Y1 == 7 and (deltaY == -1 or deltaY == -2):
return "YES"
elif Y1 < 7 and deltaY == -1:
return "YES"

return "NO"

with open("INPUT.TXT", "r") as infile:
X1, Y1 = map(int, infile.readline().split())
X2, Y2 = map(int, infile.readline().split())

result = can_pawn_move(X1, Y1, X2, Y2)

with open("OUTPUT.TXT", "w") as outfile:
outfile.write(result)
Похожие вопросы