Задание КИМ № 19: Теория игр
Раздел № 163: Задачи с одной кучей камней (ответ — число)
(А. Кабанов) Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может а) добавить в кучу один камень; б) увеличить количество камней в куче в два раза; в) увеличить количество камней в куче в три раза. Игра завершается в тот момент, когда количество камней в куче становится не менее 43. Если при этом в куче оказалось не более 72 камней, то победителем считается игрок, сделавший последний ход. В противном случае победителем становится его противник. В начальный момент в куче было S камней, 1 ≤ S ≤ 42. Ответьте на следующие вопросы: Вопрос 1. Найдите минимальное значение S, при котором Ваня выигрывает своим первым ходом при любой игре Пети. Вопрос 2. Сколько существует значений S, при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия: − Петя не может выиграть за один ход; − Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня. Вопрос 3. Найдите минимальное и максимальное значения S, при которых одновременно выполняются два условия: – у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети; – у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом. Найденные значения запишите в ответе в порядке возрастания. |
Данная задача решена на языке программирования - Python.
from functools import lru_cache
def sh(h):
return h+1,h*2,h*3 @lru_cache(None)
def f(h):
if h>42 and h<=72:
return 'выиграл'
elif h>72:
return 'проиграл'
elif any(f(x)=='выиграл' for x in sh(h)):
return 'П1'
elif all(f(x)=='П1' for x in sh(h)):
return 'B1'
elif any(f(x)=='B1' for x in sh(h)):
return 'П2'
elif all(f(x)=='П2' or f(x)=='П1' for x in sh(h)):
return 'В2'
for i in range(1,43):
print(i,' ',f(i)
1) 14 2) 3 3) 12 39
сайт Полякова