Два игрока, Паша и Вася, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Паша. За один ход игрок может добавить в кучу один или четыре камня или увеличить количество камней в куче в пять раз. Игра завершается в тот момент, когда количество камней в куче становится
Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Описать стратегию игрока — значит, описать, какой ход он должен сделать в любой ситуации, которая ему может встретиться при различной игре противника. В описание выигрышной стратегии не следует включать ходы играющего по этой стратегии игрока, не являющиеся для него безусловно выигрышными, то есть не являющиеся выигрышными независимо от игры противника.
Известно, что Вася выиграл своим первым ходом после неудачного первого хода Паши. Укажите минимальное
Минимальное значение: S = 3. Паша может получить
Ответ: 3.
Приведём другое решение на языке Python.
def f(x, h):
if h == 3 and x >= 68:
return 1
elif h == 3 and x < 68:
return 0
elif x >= 68 and h < 3:
return 0
else:
if h % 2 == 0:
return f(x + 1, h + 1) or f(x + 4, h + 1) or f(x * 5, h + 1) # стратегия победителя
else:
return f(x + 1, h + 1) or f(x + 4, h + 1) or f(x * 5, h + 1) # стратегия проигравшего(неудачный ход)
for x in range(1, 68):
if f(x, 1) == 1:
print("Задача 19: ", x)
break
Приведём решение Артёма Гридина на языке Python.
from functools import lru_cache
def moves(h):
return h+1, h+4, h*5
@lru_cache(None)
def game(h):
if h >= 69: return 'W'
if any(game(m) == 'W' for m in moves(h)): return 'P'
if any(game(m) == 'P' for m in moves(h)): return 'V'
for s in range(1, 68):
if game(s) == 'V':
print(s)
break

