Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может: убрать из кучи три камня, или убрать из кучи семь камней, или уменьшить количество камней в куче в четыре раза (количество камней, полученное при делении, округляется до меньшего).
Например, из кучи в 21 камень за один ход можно получить кучу из 18, 14 или 5 камней.
Игра завершается, когда количество камней в куче становится не более 21.
Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу, в которой будет 21 или меньше камней. В начальный момент в куче было S камней,
Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.
Укажите минимальное значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.
Приведём решение на языке Python.
def Win(n, m):
return 0 if m <= 21 else any([Lose(n-1, m-3), Lose(n-1, m-7), Lose(n-1, m//4)])
def Lose(n, m):
return 1 if m <= 21 else 0 if not n else\
all([Win(n-1, m-3), Win(n-1, m-7), Win(n-1, m//4)])
print('19)', min(m for m in range(22, 100) if not Win(1, m) and Lose(2, m)))
Ответ: 88.

