G. Шахматный «обед»

Напишите функцию 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) прекрасно проходит все проверки.

Посмотреть код

Решение

Python
def can_eat(horse, cell):
    x = abs(horse[0] - cell[0])
    y = abs(horse[1] - cell[1])
    return sorted([x, y]) == [1, 2]

Решение

Python
def can_eat(horse, cell):
    x = abs(horse[0] - cell[0])
    y = abs(horse[1] - cell[1])
    return {x, y} == {1, 2}
Подписаться
Уведомить о
guest
4 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии