Напишите функцию can_eat
, которая принимает положение коня и другой фигуры в виде кортежей из двух координат, а возвращает булево значение: True
если конь съедает фигуру и False
иначе.
Примечание
Ваше решение должно содержать только функции.
В решении не должно быть вызовов требуемых функций.
Пример
Ввод
result = can_eat((2, 1), (4, 2))
Вывод
result = True
Ввод
result = can_eat((5, 5), (6, 6))
Вывод
result = False
Решение
Для решения этой задачи нам нужно вспомнить как ходит конь в шахматах. Если описывать его ход с точки зрения математики, то это всегда смещение на одно поле в любом направлении и потом на два в любом направлении по горизонтали или вертикали, перпендикулярном направлении. Можно описать и наоборот – сначала смещение на два поля, потом на одно.
Получается, что расстояние до клеток до которых может “дотянуться” конь можно описать формулой sorted(x, y) = (1, 2) или {x, y} == {1, 2}. Остается вычислить расстояние от текущей позиции коня до интересующей нас клетки. Так как в обозначенной выше формуле участвуют только положительные числа, нас интересует абсолютное расстояние. Вычисляем абсолютную разницу между координатам по x и абсолютную разницу между координатами по y.
По состоянию на 02 июня 2024 года в тестах Яндекса есть ошибка – код, считающий, что конь с a1 может атаковать клетку a4 (x + y == 3) прекрасно проходит все проверки.
Посмотреть код
Решение
def can_eat(horse, cell):
x = abs(horse[0] - cell[0])
y = abs(horse[1] - cell[1])
return sorted([x, y]) == [1, 2]
Решение
def can_eat(horse, cell):
x = abs(horse[0] - cell[0])
y = abs(horse[1] - cell[1])
return {x, y} == {1, 2}