Источник: https://kpolyakov.spb.ru/
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в одну из куч (по своему выбору) два камня или увеличить количество камней в куче в два раза. Для того чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается в тот момент, когда суммарное количество камней в кучах становится не менее 44. Победителем считается игрок, сделавший последний ход, то есть первым получивший такую позицию, что в кучах всего будет 44 или больше камней.
В начальный момент в первой куче было 5 камней, во второй куче – камней;
.
1. При каких : 1a) Петя выигрывает первым ходом; 1б) Ваня выигрывает первым ходом?
2. Назовите одно любое значение , при котором Петя может выиграть своим вторым ходом.
3. Назовите значение , при котором Ваня выигрывает своим первым или вторым ходом.
В ответе укажите сначала левую границу отрезка из ответа на вопрос 1a), затем через пробел правую, затем через пробел ответ на вопрос 1б), затем через пробел ответ на 2 вопрос, затем через пробел ответ на вопрос 3.
from functools import *
@lru_cache(None)
def f(a, b):
if a >= 44: return 0
n = [f(a+2, b), f(a*2, b), f(a, b+2), f(a, b*2)]
t = [i for i in n if i <= 0]
if t: return -max(t)+1
else: return -max(n)
for i in range(1, 39):
if f(5, i) == 1: print(i)
Для пункта 1б) следует поменять последнюю строку на:
if f(5, i) == -1: print(i)
Для пункта 2) следует поменять последнюю строку на:
if f(5, i) == 2: print(i)
Для пункта 3) следует поменять последнюю строку на:
if f(5, i) == -2: print(i)
- 20 38 19 16 14
- 20 38 19 17 14
- 20 38 19 18 14