Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу три камня, добавить шесть камней или увеличить количество камней в куче в три раза. При этом нельзя повторять ход, который этот же игрок делал на предыдущем ходу. Повторять чужие ходы и свои более старые ходы разрешается. Чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается, когда количество камней в куче становится не менее 68. Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу, в которой будет 68 или больше камней. В начальный момент в куче было S камней, 1 S
67.
Укажите наименьшее значение S, при котором Петя не может выиграть за один ход, но у Пети есть выигрышная стратегия, позволяющая ему выиграть вторым ходом.
Решение программой
def f(x, s1, s2): # s1 - предыдущий ход, s2 - ПРЕДпредыдущий ход
if x >= 68:
return 0
t = []
# Делаем каждый ход, только если ПРЕДпредыдущий не совпадает с номером того, который собираемся сделать
if s2 != 1:
t += [f(x + 3, 1, s1)] # Делаем первый ход - прошлый предыдущий становится ПРЕДпредыдущим
if s2 != 2:
t += [f(x + 6, 2, s1)]
if s2 != 3:
t += [f(x * 3, 3, s1)]
n = [i for i in t if i <= 0]
if n:
return -max(n) + 1
return -max(t)
for i in range(1, 67 + 1):
if f(i, 0, 0) == 2:
print(i)
break