Python
from functools import lru_cache
@lru_cache(None)
def f(s, m):
if s >= 132: return m % 2 == 0
if m == 0: return False
h = [f(s+3, m-1), f(s+6, m-1), f(s*3, m-1)]
return any(h) if m % 2 != 0 else all(h)
# Ответ на №20: позиции, где 1-й не выигрывает за 1 ход, но выигрывает за 3
print('#20', [s for s in range(1, 132) if not f(s, 1) and f(s, 3)]) 📚 Теория
Продолжение теории игр. Анализ позиций на горизонте 1 и 3 хода.