20. Выигрышная стратегия: часть 2: #295291
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя.
Для игры, описанной в задании $19$, найдите два наименьших значения $S$, при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:
- Петя не может выиграть за один ход;
- Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания без пробелов.
Первый способ – математическое решение
Петя не должен выигрывать первым ходом, поэтому $3S<79$, откуда $S\leq26$.
Чтобы Петя гарантированно выиграл вторым ходом, первым ходом ему нужно получить $25$ или $26$ камней.
При $25$ камнях Ваня может получить: $25\rightarrow27$ или $25\rightarrow75$.
Из обеих позиций Петя выигрывает следующим ходом:
$27\rightarrow81$;
$75\rightarrow225$.
При $26$ камнях: $26\rightarrow28$ или $26\rightarrow78$, и Петя также выигрывает следующим ходом:
$28\rightarrow84$;
$78\rightarrow80$.
Получить эти позиции можно так:
$23\rightarrow25$;
$24\rightarrow26$.
Второй способ – решение с помощью Python
def moves(x):
return [x + 2, x * 3]
def win1(x):
return x < 79 and any(
y >= 79 for y in moves(x)
)
ans = []
for S in range(1, 79):
if not win1(S):
if any(
x < 79 and all(
y < 79 and win1(y)
for y in moves(x)
)
for x in moves(S)
):
ans.append(S)
print(ans[:2])
Программа проверяет, что Петя не может выиграть первым ходом, а затем ищет такой его ход, после которого при любом ходе Вани Петя выигрывает следующим ходом.
Программа выведет: $[23,\ 24]$.