20. Выигрышная стратегия: часть 2: #295312
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя.
Для игры, описанной в задании $19$, найдите два наименьших значения $S$, при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:
- Петя не может выиграть за один ход;
- Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.
Первый способ – математическое решение
Подходящими промежуточными позициями являются $29$ и $30$ камней. Если Петя получает $30$ камней, Ваня может сделать ходы: $30\rightarrow32,\ 35,\ 60$.
Из каждой позиции Петя выигрывает следующим ходом:
$32\rightarrow64$;
$35\rightarrow70$;
$60\rightarrow62$.
Аналогично для $29$ камней: $29\rightarrow31,\ 34,\ 58$, после чего Петя также выигрывает следующим ходом.
Два наименьших начальных значения, из которых Петя может получить $29$ или $30$:
$15\rightarrow30$;
$24\rightarrow29$.
Ответ: $15,\ 24$.
Второй способ – решение с помощью Python
def moves(x):
return [x + 2, x + 5, x * 2]
def win1(x):
return x < 61 and any(
y >= 61 for y in moves(x)
)
ans = []
for S in range(1, 61):
if not win1(S):
if any(
x < 61 and all(
y < 61 and win1(y)
for y in moves(x)
)
for x in moves(S)
):
ans.append(S)
print(ans[:2])
Программа проверяет, что Петя не может выиграть первым ходом, а затем ищет такой его ход, после которого при любом ходе Вани Петя выигрывает следующим ходом.
Программа выведет: $[15,\ 24]$.