Задача к ЕГЭ по информатике на тему «Теория игр» №1

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

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

from functools import lru_cache


def moves(h):
    k = h[0]
    m = h[1]
    if m == 0:
        return (k + 1, 1), (k + 2, 2), (k * 3, 3)
    if m == 1:
        return (k + 2, 2), (k * 3, 3)
    if m == 2:
        return (k + 1, 1), (k * 3, 3)
    if m == 3:
        return (k + 1, 1), (k + 2, 2)


@lru_cache(None)
def f(h):
    if h[0] >= 43:
        return ’END’
    if any(f(x) == ’END’ for x in moves(h)):
        return ’WIN1’
    if all(f(x) == ’WIN1’ for x in moves(h)):
        return ’LOSE1’
    if any(f(x) == ’LOSE1’ for x in moves(h)):
        return ’WIN2’


minim = 10000
maxim = 0
for i in range(1, 43):
    h = i, 0
    if f(h) == ’WIN2’:
        minim = min(minim, i)
        maxim = max(maxim, i)
print(minim,maxim)

Ответ: 5 13
Оцените статью
Я решу все!