Тема 21. Теория игр
21.01 Теория игр
Вспоминай формулы по каждой теме
Решай новые задачи каждый день
Вдумчиво разбирай решения
ШКОЛКОВО.
Готовиться с нами - ЛЕГКО!
Подтемы раздела теория игр
Решаем задачи

Ошибка.
Попробуйте повторить позже

Задача 1#87240

Дан набор слов ПРОИЗВОДСТВО, ПРОВЕРКА, ПРОСТОКВАША, САЛЮТ, САМОКАТ, САРКАЗМ.

Определите, у кого из игроков есть выигрышная стратегия. В ответ запишите первую заглавную букву имени этого игрока.

Показать ответ и решение

Сразу отметим, что нельзя ставить рядом две гласные, поэтому слово ПРОИЗВОДСТВО даже не будем рассматривать.

У Пети есть выбор - начинать с буквы П или с буквы С.

Если он начнёт с буквы П, то после буквы О у Вани будет выбор, какое слово дальше собирать. Очевидно, Ваня выберет слово ПРОВЕРКА и победит.

Если Петя начнёт с буквы С, то после буквы А у Пети будет выбор. Он может выбрать букву Л и собрать слово САЛЮТ, тогда он победит.

Очевидно, что выигрышная стратегия есть у Пети.

Ответ: П

Ошибка.
Попробуйте повторить позже

Задача 2#87236

Дан набор слов ВЫИГРЫШ, ВЫХОД, ВЫХУХОЛЬ, ПРОХОД, ПРОЕЗД, ПРООБРАЗ.

Определите, у кого из игроков есть выигрышная стратегия. В ответ запишите первую заглавную букву имени этого игрока.

Показать ответ и решение

Сразу отметим, что нельзя ставить рядом две гласные, поэтому слова ВЫИГРЫШ и ПРООБРАЗ даже не будем рассматривать.

У Вани есть выбор - начинать с буквы В или с буквы П.

Если он начнёт с буквы В, то после буквы Х у Пети будет выбор, какое слово дальше собирать. Очевидно, Петя выберет слово ВЫХУХОЛЬ и победит.

Если Ваня начнёт с буквы П, то после буквы О у Пети будет выбор. Он может выбрать букву Х и собрать слово ПРОХОД, тогда он победит.

Ответ: П

Ошибка.
Попробуйте повторить позже

Задача 3#87230

Дан набор слов МАРКА, МАРИНА, МАРС, ДРЕВО, ДРЕНАЖ, ДРЕЗИНА.

Определите, у кого из игроков есть выигрышная стратегия. В ответ запишите первую заглавную букву имени этого игрока.

Показать ответ и решение

У Пети есть выбор - начинать с буквы М или с буквы Д.

Если он начнёт с буквы М, то после буквы Р у Вани будет выбор, какое слово дальше собирать. Очевидно, Ваня выберет слово МАРС и победит.

Если Петя начнёт с буквы Д, то после буквы Е у Вани будет выбор. Он может выбрать букву Н и собрать слово ДРЕНАЖ, тогда он победит.

Ответ: В

Ошибка.
Попробуйте повторить позже

Задача 4#78637

Найдите все значения S, при котором одновременно выполняются два условия:

– у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;

– у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Найденные значения запишите в ответе в порядке возрастания без пробелов.

Показать ответ и решение
from functools import lru_cache
lru_cache(None)
def f(a, b, c=0):
    if a + b >= 186:
        return 0
    if c > 5:
        return 1000
    t = [f(a+7, b, c+1), f(a+11, b, c+1), f(a*2, b, c+1), f(a, b*2, c+1), f(a, b+7, c+1),f(a, b+11, c+1)]
    n = [i for i in t if i <= 0]
    if n:
        return -max(n) + 1
    return -max(t)

a = []
for i in range(1, 176):
    if f(10, i) == -2:
        a.append(i)
print(a)

Ответ: 71727377

Ошибка.
Попробуйте повторить позже

Задача 5#78634

Найдите среднее значение значений S, при котором одновременно выполняются два условия:

– у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;

– у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

В ответ запишите целую часть найденного значения.

Показать ответ и решение
from functools import lru_cache
lru_cache(None)
def f(a, b, c=0):
    if a + b >= 205:
        return 0
    if c > 5:
        return 1000
    if a > b:
        t = [f(a, b + a, c + 1), f(a, b * 2, c + 1)]
    else:
        t = [f(a + b, b, c + 1), f(a * 2, b, c + 1)]
    n = [i for i in t if i <= 0]
    if n:
        return -max(n) + 1
    return -max(t)

a = []
for i in range(1, 197):
    if f(9, i) == -2:
        a.append(i)
print(sum(a)/len(a))

Ответ: 70

Ошибка.
Попробуйте повторить позже

Задача 6#78631

Найдите значения S, при котором одновременно выполняются два условия:

– у Вани есть выигрышная стратегия, позволяющая ему выиграть первым, вторым или третьим ходом при любой игре Пети;

– у Вани нет стратегии, которая позволит ему гарантированно выиграть первым или вторым ходом.

Найденные значения запишите в ответе в порядке возрастания без пробелов.

Показать ответ и решение
from functools import lru_cache
lru_cache(None)
def f(a, b, c=0):
    if a + b >= 169:
        return 0
    if c > 5:
        return 1000
    t = [f(a+4, b, c+1), f(a*2, b, c+1), f(a*3, b, c+1), f(a, b+4, c+1), f(a, b*2, c+1), f(a, b*3, c+1)]
    n = [i for i in t if i <= 0]
    if n:
        return -max(n) + 1
    return -max(t)

for i in range(1, 154):
    if f(15, i) == -3:
        print(i)

Ответ: 3642

Ошибка.
Попробуйте повторить позже

Задача 7#78628

Найдите значение S, при котором одновременно выполняются два условия:

– у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;

– у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Показать ответ и решение
from functools import lru_cache
lru_cache(None)
def f(a, b, c=0):
    if a + b >= 124:
        return 0
    if c > 5:
        return 1000
    t = [f(a+1, b, c+1), f(a+3, b, c+1), f(a+b, b, c+1), f(a, b+1, c+1), f(a, b+3, c+1), f(a, b+a, c+1)]
    n = [i for i in t if i <= 0]
    if n:
        return -max(n) + 1
    return -max(t)

for i in range(1, 111):
    if f(13, i) == -2:
        print(i)

Ответ: 53

Ошибка.
Попробуйте повторить позже

Задача 8#78625

Найдите количество значений S, при котором одновременно выполняются два условия:

– у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;

– у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Показать ответ и решение
def f(a):
  if a >= 47:  #если камней в куче стало больше 47, то выход из функции
    return 0
  t = [f(a+2), f(a+5), f(a*2)]    #сформировали список ходов
  n = [i for i in t if i <= 0] #записываем отрицательные элементы из t
  if n:  #если n не пустой список
    return -max(n)+1 #получаем положительный выигрышный ход для Пети
  else:
    return -max(t) #получаем отрицательный выигрышный ход для Вани


for i in range(1,47):
    if f(i) == -2:
        print(i)

Ответ: 3

Ошибка.
Попробуйте повторить позже

Задача 9#76993

Для игры, описанной в задании 19 найдите количество пар (S;P), при котором одновременно выполняются два условия:

– у Вани есть выигрышная стратегия, позволяющая ему выиграть первым, вторым или третьим ходом при любой игре Пети;

– у Вани нет стратегии, которая позволит ему гарантированно выиграть первым или вторым ходом.

Показать ответ и решение
from functools import lru_cache
@lru_cache(None)
def f(a, b):
    if a + b >= 50:
        return 0
    h = [f(a + 2, b), f(a * 3, b),f(a, b + 2),f(a, b * 3)]
    t = [i for i in h if i <= 0]
    if t:return -max(t)+1
    return -max(h)
c = 0
for i in range(1, 40):
    for j in range(1, 40):
        if f(i, j) == -3 and not(f(i, j) == -2) and not(f(i, j) == -1):
            print(i, j)
            c += 1
print(c)

Ответ: 19

Ошибка.
Попробуйте повторить позже

Задача 10#76990

Для игры, описанной в задании 19, известно, что Петя выигрывает, сделав не более двух ходов. Укажите минимальное и максимальное значения S, если известно, что Петя не может гарантированно выиграть, сделав один ход.

Значения запишите в порядке возрастания через пробел.

Показать ответ и решение
from functools import lru_cache
@lru_cache(None)
def f(a):
    if a >= 65: return 0
    if a * 3 >= 109:
        n = [f(a + 5), f(a + 7)]
    else:
        n = [f(a + 5), f(a + 7), f(a * 3)] #список с возможными ходами
    t = [i for i in n if i <= 0] #список с отрицательными ходами
    if t:
        return -max(t) + 1 #выигрыш Пети
    else:
        return -max(n) #выигрыш Вани
for i in range(1, 40):
    if f(i) == 2:
        print(i)

Ответ: 7 19

Ошибка.
Попробуйте повторить позже

Задача 11#76987

Для игры, описанной в задании 19, найдите произведение значений S, при которых одновременно выполняются два условия:

– у Пети есть выигрышная стратегия, позволяющая ему выиграть первым, вторым или третьим ходом при любой игре Вани;

– у Пети нет стратегии, которая позволит ему гарантированно выиграть первым или вторым ходом.

Показать ответ и решение
from functools import lru_cache
lru_cache(None)
def f(a, b, d, c = 0):
    if a + b + d >= 300:
        return 0
    if c > 4:
        return 1000000
    t = [f(a*3, b, d,  c+1),f(a+b+d, b, d, c+1),f(a, b*3, d, c+1),
    f(a, b + a + d, d,  c+1),f(a, b, d*3, c+1),f(a, b, d+a+b, c+1)]
    n = [i for i in t if i <= 0]
    if n:
        return -max(n) + 1
    return -max(t)

a = []
for i in range(1,101):
    if f(45, i, i+25) == 3:
        a.append(i)
print(a)

Ответ: 12

Ошибка.
Попробуйте повторить позже

Задача 12#76984

Для игры, описанной в задании 19, найдите значение S, при котором одновременно выполняются два условия:

– у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;

– у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Если найдено несколько значений S, в ответе запишите минимальное из них.

Показать ответ и решение
from functools import lru_cache
lru_cache(None)
def f(a, b, d, c = 0):
    if a + b + d >= 150:
        return 0
    if c > 3:
        return 1000000
    t = [f(a*2, b, d,  c+1),f(a+16, b, d, c+1),f(a+32, b, d, c+1),
    f(a, b*2, d,  c+1),f(a, b+16, d, c+1),f(a, b+32, d, c+1),
    f(a, b, d*2,  c+1),f(a, b, d+16, c+1),f(a, b, d+32, c+1)]
    n = [i for i in t if i <= 0]
    if n:
        return -max(n) + 1
    return -max(t)

a = []
for i in range(1,67):
    if f(6, 2*i, 3*i) == -2:
        a.append(i)
print(a)

Ответ: 8

Ошибка.
Попробуйте повторить позже

Задача 13#76981

Найдите два значения S, при которых одновременно выполняются два условия:

– у Пети есть выигрышная стратегия, позволяющая ему выиграть первым, вторым или третьим ходом при любой игре Вани;

– у Пети нет стратегии, которая позволит ему гарантированно выиграть первым или вторым ходом.

Ответы укажите в порядке возрастания через пробел.

Показать ответ и решение
from functools import lru_cache
@lru_cache(None)
def f(a):
    if a >= 100: return 0
    if a * 4 > 120:
        n = [f(a + 3)]
    else:
        n = [f(a + 3), f(a * 4)] #список с возможными ходами
    t = [i for i in n if i <= 0] #список с отрицательными ходами
    if t:
        return -max(t) + 1 #выигрыш Пети
    else:
        return -max(n) #выигрыш Вани
for i in range(1, 61):
    if f(i) == 3:
        print(i)

Ответ: 20 22

Ошибка.
Попробуйте повторить позже

Задача 14#72491

Для игры, описанной в задании 19, найдите количество значений Y, при которых одновременно выполняются два условия:

– у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;

– у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Показать ответ и решение
def f(x,y):
    if (x**2 + y**2)**0.5 >= 20:return 0
    m = [f(x+2,y),f(x,y+3)]
    n = [i for i in m if i <= 0]
    if n:return -max(n) + 1
    return -max(m)
c = 0
for y in range(1,20):
    if f(5,y) == -2:
        c += 1
print(c)

Ответ: 2

Ошибка.
Попробуйте повторить позже

Задача 15#72478

Для игры, описанной в задании 19, найдите количество значений S, при которых одновременно выполняются два условия:

– у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;

– у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Показать ответ и решение
from functools import lru_cache
@lru_cache(None)
def f(a,b,c):
    if a+b+c >= 110:return 0
    m = [f(a+1,b,c),f(a*2,b,c),f(a,b+1,c),f(a,b*2,c),f(a,b,c+1),f(a,b,c*2)]
    n = [i for i in m if i <= 0]
    if n:return -max(n) + 1
    return -max(m)
c = 0
for i in range(1,95):
    if f(10,5,i) == -2:
        c += 1
print(c)

Ответ: 0

Ошибка.
Попробуйте повторить позже

Задача 16#72461

Для игры, описанной в задании 19, найдите значение S, при котором одновременно выполняются два условия:

– у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;

– у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Показать ответ и решение
def f(a):
    if a >= 64:return 0
    m = [f(a+1),f(a*2)]
    n = [i for i in m if i <= 0]
    if n:return -max(n) + 1
    return -max(m)
for i in range(1,64):
    if f(i) == -2:
        print(i)

Ответ: 29

Ошибка.
Попробуйте повторить позже

Задача 17#72448

Для игры, описанной в задании 19, найдите минимальное значение S, при котором у Вани есть выигрышная стратегия, позволяющая ему выиграть максимум третьим ходом.

Показать ответ и решение
from functools import lru_cache
@lru_cache(None)
def f(a,b):
    if a + b >= 122:return 0
    m = [f(a+1,b),f(a*3,b),f(a,b+1),f(a,b*3)]
    n = [i for i in m if i <= 0]
    if n:return -max(n)+1
    return -max(m)
for i in range(1,115):
    if f(7,i) == -3:
        print(i)
        break

Ответ: 31

Ошибка.
Попробуйте повторить позже

Задача 18#72435

Для игры, описанной в задании 19, найдите минимальное значение S, при котором одновременно выполняются два условия:

– у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;

– у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Показать ответ и решение
from functools import  lru_cache
@lru_cache(None)
def f(a):
    if a >= 120:return 0
    m = [f(a+2),f(a+3),f(a*3)]
    n = [i for i in m if i <= 0]
    if n:return -max(n)+1
    return -max(m)
for i in range(1,120):
    if f(i) == -2:
        print(i)
        break

Ответ: 33

Ошибка.
Попробуйте повторить позже

Задача 19#72422

Для игры, описанной в задании 19, найдите значение S, при котором одновременно выполняются два условия:

– у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;

– у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Показать ответ и решение
from functools import lru_cache
@lru_cache(None)
def f(a,b):
    if a+b >= 60:return 0
    m = [f(a+1,b),f(a*2,b),f(a,b+1),f(a,b*2)]
    t = [i for i in m if i <= 0]
    if t:return -max(t)+1
    return -max(m)
for i in range(1,50):
    if f(10,i) == -2:
        print(i)

Ответ: 23

Ошибка.
Попробуйте повторить позже

Задача 20#72406

Для игры, описанной в задании 19, найдите значение S, при котором одновременно выполняются два условия: – у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети; – у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Показать ответ и решение
def f(a):
    if a >= 70:return 0
    t = [f(a+1),f(a*2)]
    n= [i for i in t if i <= 0]
    if n:return -max(n) + 1
    return -max(t)
for i in range(1,70):
    if f(i) == -2:
        print(i)

Ответ: 32
Рулетка
Вы можете получить скидку в рулетке!