Здравствуйте, в задании 3081 в 3 вопросе не сходится ответ с предложенным.
(№ 3081) (А. Кабанов) Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может
а) добавить в кучу один камень;
б) добавить в кучу два камня;
г) увеличить количество камней в куче в три раза.
Игра завершается в тот момент, когда количество камней в куче превышает 64. Победителем считается игрок,
сделавший последний ход, то есть первым получивший кучу, в которой будет 65 или больше камней. В начальный момент в куче было S камней, 1 ≤ S ≤ 64.
Ответьте на следующие вопросы:
Вопрос 3. Найдите значение S, при котором одновременно выполняются два условия:
– у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
– у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.
3) 18
Прога выдаёт 19, код вот
from functools import lru_cache
@lru_cache(None)
def g(h):
if h > 64:
return 0
ms = [h + 1, h * 2, h * 3]
if any(g(x) == 0 for x in ms):
return 1
if all(g(x) == 1 for x in ms):
return 2
if any(g(x) == 2 for x in ms):
return 3
if all(g(x) in (1, 3) for x in ms):
return 4
for x in range(1, 65):
if g(x) == 4:
print(x, g(x))