Теория игр, найти подходящее значение кучи

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу один камень или три камня или одиннадцать камней. Для того чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается в тот момент, когда количество камней в куче становится числом, оканчивающимся на ноль. Победителем считается игрок, сделавший последний ход, т.е. первым получивший кучу, количество камней в которой оканчивается на ноль. К примеру, игра заканчивается, когда в куче стало 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)
        

Почему код не работает?


Ответы (0 шт):