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

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

Задача 1#87238

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

В ответ запишите измененное слово. Если вариантов изменения несколько, запишите то слово, убранная буква из которого стоит ближе всего к началу слова.

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

Ваня побеждает, если составляемое слово имеет четную длину. Поэтому, если мы уберем любую букву из слова ЧЕРЕПАХАХАМ, Ваня победит, так как слово станет четной длины. Соответственно убираем первую букву Ч.

Ответ: ЕРЕПАХАХАМ

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

Задача 2#87235

Для игры, описанной в задании 19, уменьшите количество повторений последовательности букв ЗВУКИ в слове ЗВУКИ...ЗВУКИ, чтобы выигрышная стратегия появилась у другого игрока.

В ответ запишите сумму всех возможных новых количеств повторений. (Последовательность не может повторяться 0 раз).

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

Петя побеждает, если составляемое слово имеет четную длину. Значит, чтобы он победил, нужно сделать слово ЗВУКИ...ЗВУКИ четной длины. Любое число при умножении на четное дает четное число, значит последовательность ЗВУКИ должна повторяться четное количество раз: 2, 4, 6, ..., 124 раза. Сумму этих количеств можно найти как сумму арифметической прогрессии: (2+124)⋅62
----2--- = 3906  .

Ответ: 3906

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

Задача 3#87229

Для игры, описанной в задании 19, уберите одну букву из слова ГЭНДАЛЬФЧЕРНЫЙ в наборе того же задания так, чтобы у второго игрока не осталось вообще никаких возможностей победить.

В ответ запишите измененное слово. Если вариантов изменения несколько, запишите то слово, убранная буква из которого стоит ближе всего к началу слова.

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

Петя побеждает, если составляемое слово имеет нечетную длину. Поэтому, если мы уберем любую букву из слова ГЭНДАЛЬФЧЕРНЫЙ, Петя победит, так как слово станет нечетной длины. Соответственно убираем первую букву Г.

Ответ: ЭНДАЛЬФЧЕРНЫЙ

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

Задача 4#78636

Найдите сумму значений 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(sum(a))

Ответ: 835

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

Задача 5#78633

Найдите наибольшее и наименьшее значения 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)

for i in range(1, 197):
    if f(9, i) == 2:
        print(i)

Ответ: 4093

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

Задача 6#78630

Найдите количество значений 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)

count = 0
for i in range(1, 154):
    if f(15, i) == 2:
        count += 1
print(count)

Ответ: 10

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

Задача 7#78627

Найдите сумму значений 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)

Ответ: 148

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

Задача 8#78624

Найдите наибольшее и наименьшее значения 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)

Ответ: 1121

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

Задача 9#76992

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

— Петя не может выиграть за один ход;

— Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.

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

Показать ответ и решение
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)
for i in range(1, 40):
    if f(i, 10) == 2 and not(f(i, 10) ==  1):
        print(i)

Ответ: 11 12

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

Задача 10#76989

Для игры, описанной в задании 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)

Ответ: 8 9

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

Задача 11#76986

В игре, описанной в задании 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(i+25, i, 45) == 2:
        a.append(i)
print(min(a), max(a))

Ответ: 1 22

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

Задача 12#76983

Для игры, описанной в задании 19, найдите сумму значений 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(sum(a))

Ответ: 108

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

Задача 13#76980

Для игры, описанной в задании 19, найдите такое значение 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) == -2:
        print(i)

Ответ: 23

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

Задача 14#72489

Для игры, описанной в задании 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)
for y in range(1,20):
    if f(5,y) == 2:
        print(y)
        break

Ответ: 13

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

Задача 15#72477

Для игры, описанной в задании 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)
for i in range(1,95):
    if f(10,5,i) == 2:
        print(i)
        break

Ответ: 42

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

Задача 16#72458

Для игры, описанной в задании 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)

Ответ: 30

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

Задача 17#72444

Для игры, описанной в задании 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) == 2:
        print(i)

Ответ: 37

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

Задача 18#72432

Для игры, описанной в задании 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)
c = 0
for i in range(1,120):
    if f(i) == 2:
        c += 1
print(c)

Ответ: 4

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

Задача 19#72421

Для игры, описанной в задании 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)
        break

Ответ: 19

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

Задача 20#72405

Для игры, описанной в задании 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)
        break

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