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