Решение 1. Анализ через f(a, b, m)
🔹 Шаг 1. Создаем рекурсивную функцию
def f(a, b, m):
📌 Функция определяет, может ли текущий игрок гарантированно победить за m ходов.
🔹 Шаг 2. Проверяем окончание игры
if a + b <= 53 or m < 0:
📌 Конец игры при сумме не больше 53.
🔹 Шаг 3. Возвращаем результат
return m % 2 == 0
📌 Чётность m показывает победителя.
🔹 Шаг 4. Перебираем все возможные ходы
h = [
f(a - 3, b, m - 1),
f(a // 3, b, m - 1),
f(a, b - 3, m - 1),
f(a, b // 3, m - 1),
]
📌 Ходы: −3 или // 3 в одну из куч.
🔹 Шаг 5. Выбираем any или all
return any(h) if (m - 1) % 2 == 0 else all(h)
📌 На своём ходу — any, на ходе соперника — all.
✅ Задание 20
ans = [s for s in range(35, 1001) if not f(19, s, 1) and f(19, s, 3)]
print(min(ans), max(ans))
📌 Ответ: 108 и 323.