Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может выполнить любое из следующих действий:
1) убрать из кучи пять камней;
2) если количество камней в куче чётно, уменьшить его в два раза;
3) если количество камней в куче кратно трём, уменьшить его в три раза;
4) если количество камней в куче нечётно и не кратно трём, добавить один камень.
Например, если в куче 12 камней, то за один ход можно получить 7, 6 или 4 камня, а если в куче 11 камней, то за один ход можно получить 6 или 12 камней.
Игра завершается, когда количество камней в куче становится не более 19.
Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу, в которой будет 19 или меньше камней.
В начале игры в куче было S камней, S > 19.
Укажите минимальное значение S, при котором Петя не может выиграть первым ходом, но при любом первом ходе Пети Ваня может выиграть своим первым ходом.
Такое значение S — 25. Своим первым ходом Петя может получить
Приведём решение на языке Python.
def f(x,k,v):
if x <= 19:
return k in v
if k >= max(v):
return 0
h = [f(x-5,k+1,v)]
if x % 2 ==0:
h.append(f(x//2,k+1,v))
if x % 3 ==0:
h.append(f(x//3,k+1,v))
else:
h.append(f(x+1,k+1,v))
if k%2 != max(v) % 2:
return any(h)
else:
return all(h)
for x in range (19,10000):
if f(x,0,[2]) == 1:
print('Задача 19:',x)
break
Ответ: 25.

