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

