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