Для игры, описанной ранее, найдите минимальное значение , при котором одновременно выполняются два условия:
– у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
– у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.
from functools import lru_cache
def moves(h):
a, b = h
return (a*3, b), (a, b*3), (a+1, b), (a, b+1)
def pr(h):
a, b = h
return a*b
@lru_cache(None)
def f(h):
if pr(h) >= 1000:
return ’END’
if any(f(x) == ’END’ for x in moves(h)):
return ’WIN1’
if all(f(x) == ’WIN1’ for x in moves(h)):
return ’LOSE1’
if any(f(x) == ’LOSE1’ for x in moves(h)):
return ’WIN2’
if all(f(x) == ’WIN1’ or f(x) == ’WIN2’ for x in moves(h)):
return ’LOSE2’
for i in range(1, 83):
h = 12, i
if f(h) == ’LOSE2’:
print(i)
Ответ: 24