Загрузка данных


31365 
def f(a,b,m): #a-первая куча, b-вторая куча, (порядок не важен), m - количество оставшихся ходов 
    if a+b<=47: # условие выигрыша 
        return m%2==0 # возвращаем истину, если m=0 (для задания 21 и для m=2, к.т. Ваня мог выиграть за 2 или 4 хода) 
    if m==0: # выигрыша нет, но ходы закончились 
        return 0 # возвращаем ложь 
    h = [f(a-2,b,m-1), f(a,b-2,m-1), f(a//3,b, m-1), f(a,b//3,m-1)] # прописываем вожможные ходы 
    return any(h) if (m-1)%2 ==0 else all(h) # для игрока, стратегию которого мы рассматриваем, нужно найти хотя бы один 
    # выигрышный ход any(h). Как пойдет противник мы не знаем, проверяем все его ходы all(h). 
    # Для "неудачного хода Пети" в 19 задаче надо написать any(h) оба раза - у Пети есть хотя бы один (any) неудачный ход, при 
    # котором у Вани тоже есть хотя бы один (any) выигрышный ход 
 
print(19, [s for s in range(32,116) if f(16,s,2)]) # range смотрим по условию задачи, в случае убывания правую границу выбираем сами 
print(20, [s for s in range(32,300) if not f(16,s,1) and f(16,s,3)]) # не забываем ставить not 
print(21, [s for s in range(32,300) if not f(16,s,2) and f(16,s,4)]) # не забываем ставить not 
# Не забываем везде указывать функцию f(a,b,m), а не (a,b,m), т.к. кортеж всегда будет принимать значение Истина