Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. Если количество камней в куче делится на целое k (2 ≤ k ≤ 9), то игрок может убрать из кучи k камней. Если количество камней в куче не делится ни на одно из указанных чисел, игрок убирает один камень, после чего выполняет ход по описанному выше правилу.
Например, если в куче 12 камней, то за один ход можно убрать 2, 3, 4 или 6 камней, а если в куче 11 камней, то игрок за один ход сначала убирает один камень (остаётся 10), а затем убирает 2 или 5 камней.
Игра завершается, когда количество камней в куче становится не более 15.
Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу, в которой будет 15 или меньше камней.
В начале игры в куче было S камней, S > 15.
Укажите минимальное значение S, при котором Петя не может выиграть первым ходом, но при любом первом ходе Пети Ваня может выиграть своим первым ходом.
Приведём решение на языке Python.
def f(x, h):
delit = [k for k in range(2, 10) if x % k == 0]
if x <= 15:
return h % 2 == 0
elif h == 0:
return 0
elif not any(x % k == 0 for k in range(2, 10)):
x -= 1
elif (h-1)%2 ==0:
return any(f(x-k, h-1) for k in delit)
else:
return all(f(x-k, h-1) for k in delit)
for x in range(16, 100):
if f(x,2):
print('Задача 19:',x)
break
Ответ: 22.

