Задание 21: все выигрышные начальные позиции
Игра «Куча камней»: в куче лежит некоторое количество камней. Игроки ходят по очереди,
первым ходит Петя. За один ход игрок добавляет в кучу одно из чисел камней, разрешённых
списком moves (например [1, 2] — добавить 1 или 2 камня). Выигрывает игрок, после чьего
хода в куче становится S или больше камней (S — заданный порог).
На этот раз нужен ПОЛНЫЙ анализ игры (дерево всех партий), без ограничения на число ходов.
Напишите функцию winning_positions(S, moves), возвращающую отсортированный список ВСЕХ
значений s0 из отрезка [0, S-1], при которых игрок, делающий ход, выигрывает при
оптимальной игре обеих сторон (неважно, за сколько ходов).
Подсказка: считайте от больших s к меньшим (обратная индукция) — позиция выигрышная, если из неё есть ход в позицию, проигрышную для соперника (или сразу завершающую игру).
Пример: winning_positions(7, [1, 2]) → [0, 2, 3, 5, 6] (позиции 1 и 4 — проигрышные).
def winning_positions(S, moves):
# ваш код
pass