Задание 20
Для игры, описанной в задании 19, найдите два наименьших значения , при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:
– Петя не может выиграть за один ход;
– Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.
Источник: ФИПИ, проект демоверсии ЕГЭ 2027, с. 18
Решение и ответ
Пишем рекурсию по позициям: — можно ли закончить игру победой нужного игрока не более чем за ходов. На ходу Пети достаточно одного хорошего хода (any), на ходу Вани должны подходить все его ходы (all).
from functools import lru_cache def moves(a, b): return (a + 4, b), (a, b + 4), (2 * a, b), (a, 2 * b) @lru_cache(None) def f(a, b, n): # n — сколько ходов осталось; при нечётном n ходит тот, чью победу проверяем if a + b >= 133: return n % 2 == 0 # последний ход сделал «наш» игрок if n == 0: return False h = [f(x, y, n - 1) for x, y in moves(a, b)] return any(h) if n % 2 == 1 else all(h) print([s for s in range(1, 116) if not f(17, s, 1) and f(17, s, 3)][:2])Подходят , при которых Петя не выигрывает за 1 ход (), но выигрывает за 3 хода (свой второй ход). Два наименьших — 28 и 48.
Ответ: 28 48