Теория игр, найти подходящее значение кучи
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу один камень или три камня или одиннадцать камней. Для того чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается в тот момент, когда количество камней в куче становится числом, оканчивающимся на ноль. Победителем считается игрок, сделавший последний ход, т.е. первым получивший кучу, количество камней в которой оканчивается на ноль. К примеру, игра заканчивается, когда в куче стало 10, 200, 6800 камней. В начальный момент в куче было S камней. S – двузначное число, не оканчивающиеся на ноль. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Для игры, описанной в задании 19, найдите количество значений S, при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия: – Петя не может выиграть за один ход; – Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
#p - Ход, s - Куча, p(2) = Ход Пети, p(3) = Ход Вани
def f(s,p):
if s%10==0 and p==4: return True
if s%10==0 and p<4: return False
if s%10!=0 and p==4: return False
if p%2==0:
return f(s+1,p+1) and f(s+3,p+1) and f(s+11,p+1)
if p%2!=0:
return f(s+1,p+1) or f(s+3,p+1) or f(s+11,p+1)
for s in range(11, 99):
if s%10==0:
s+=1
if f(s,1):
print(s)
Почему код не работает?