Для игры, описанной в задании , найдите значение
, при котором у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети, но у Вани нет стратегии, которая позволяла бы ему гарантированно выиграть первым ходом.
from functools import lru_cache
def moves(h):
k = h[0]
m = h[1]
if m == 0:
return (k + 1, 1), (k + 2, 2), (k * 3, 3)
if m == 1:
return (k + 2, 2), (k * 3, 3)
if m == 2:
return (k + 1, 1), (k * 3, 3)
if m == 3:
return (k + 1, 1), (k + 2, 2)
@lru_cache(None)
def f(h):
if h[0] >= 43:
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, 43):
h = i, 0
if f(h) == ’LOSE2’:
print(i)
Ответ: 4