1905.py
print([
b for b in range(1, 110)
if any(
a1 + b1 < 123 and
g(a1, b1, 1, [2]) for
a1, b1 in ((14, b), (13, b + 1), (26, b), (13, 2 * b))) and
any(a1 + b1 < 123 and not
g(a1, b1, 1, [2]) for
a1, b1 in ((14, b), (13, b + 1), (26, b), (13, 2 * b)))
])
def g(a, b, hod, end):
if a + b >= 123:
return hod in end
if hod >= max(end):
return False
moves = [
g(a + 1, b, hod + 1, end),
g(a, b + 1, hod + 1, end),
g(a * 2, b, hod + 1, end),
g(a, b * 2, hod + 1, end),
]
return any(moves) if ((hod + 1) % 2) == (end[0] % 2) else all(moves)
"""
print([
b for b in range(1, 110)
if any(
a1 + b1 < 123 and
g(a1, b1, 1, [2]) for
a1, b1 in ((14, b), (13, b + 1), (26, b), (13, 2 * b))) and
any(a1 + b1 < 123 and not
g(a1, b1, 1, [2]) for
a1, b1 in ((14, b), (13, b + 1), (26, b), (13, 2 * b)))
])
"""
#"""
print([
b for b in range(1, 110)
if g(13, b, 0, end=[2])
#if g(13, b, 0, [3]) and not g(13, b, 0, [1])
#if g(13, b, 0, [2, 4]) and not g(13, b, 0, [2])
])
#"""
"""
Два игрока, Петя и Ваня, играют в следующую игру.
Перед игроками лежит две кучи камней.
Игроки ходят по очереди, первый ход делает Петя.
За один ход игрок может:
добавить в одну из куч камень
увеличить количество камней в одной из куч в 2 раза
Игра завершается,
когда суммарное количество камней в двух кучах
становится не менее 123.
Победителем считается игрок, сделавший последний ход,
то есть первым получивший суммарное количество
камней в двух кучах не менее 123.
В начальный момент в первой куче было 13 камней,
во второй - S камней, 1 ≤ S ≤ 109.
Будем говорить, что игрок имеет выигрышную стратегию,
если он может выиграть при любых ходах противника.
Задание 19:
Укажите минимальное значение S, при котором
Ваня выиграет своим первым ходом после неудачного хода Пети.
Задание 20:
Найдите два минимальных значения S,
при которых у Пети есть выигрышная стратегия,
причём одновременно выполняются два условия:
- Петя не может выиграть за один ход
- Петя может выиграть своим вторым ходом
независимо от того, как будет ходить Ваня
Найденные значения запишите в ответе в порядке возрастания.
Задание 21:
Найдите минимальное значение S,
при котором одновременно выполняются два условия:
- у Вани есть выигрышная стратегия, позволяющая ему
выиграть первым или вторым ходом при любой игре Пети
- у Вани нет стратегии, которая позволит ему
гарантированно выиграть первым ходом
Если найдено несколько значений S, в ответе запишите наименьшее из них.
"""
def g(a, b, hod, end):
if a + b >= 123:
return hod in end
if hod >= max(end):
return False
moves = [
g(a + 1, b, hod + 1, end),
g(a, b + 1, hod + 1, end),
g(a * 2, b, hod + 1, end),
g(a, b * 2, hod + 1, end),
]
return any(moves) if ((hod + 1) % 2) == (end[0] % 2) else all(moves)
"""
print([
b for b in range(1, 110)
if any(
a1 + b1 < 123 and
g(a1, b1, 1, [2]) for
a1, b1 in ((14, b), (13, b + 1), (26, b), (13, 2 * b))) and
any(a1 + b1 < 123 and not
g(a1, b1, 1, [2]) for
a1, b1 in ((14, b), (13, b + 1), (26, b), (13, 2 * b)))
])
"""
#"""
print([
b for b in range(1, 110)
if g(13, b, 0, end=[2])
#if g(13, b, 0, [3]) and not g(13, b, 0, [1])
#if g(13, b, 0, [2, 4]) and not g(13, b, 0, [2])
])
#"""
"""
Два игрока, Петя и Ваня, играют в следующую игру.
Перед игроками лежит две кучи камней.
Игроки ходят по очереди, первый ход делает Петя.
За один ход игрок может:
добавить в одну из куч камень
увеличить количество камней в одной из куч в 2 раза
Игра завершается,
когда суммарное количество камней в двух кучах
становится не менее 123.
Победителем считается игрок, сделавший последний ход,
то есть первым получивший суммарное количество
камней в двух кучах не менее 123.
В начальный момент в первой куче было 13 камней,
во второй - S камней, 1 ≤ S ≤ 109.
Будем говорить, что игрок имеет выигрышную стратегию,
если он может выиграть при любых ходах противника.
Задание 19:
Укажите минимальное значение S, при котором
Ваня выиграет своим первым ходом после неудачного хода Пети.
Задание 20:
Найдите два минимальных значения S,
при которых у Пети есть выигрышная стратегия,
причём одновременно выполняются два условия:
- Петя не может выиграть за один ход
- Петя может выиграть своим вторым ходом
независимо от того, как будет ходить Ваня
Найденные значения запишите в ответе в порядке возрастания.
Задание 21:
Найдите минимальное значение S,
при котором одновременно выполняются два условия:
- у Вани есть выигрышная стратегия, позволяющая ему
выиграть первым или вторым ходом при любой игре Пети
- у Вани нет стратегии, которая позволит ему
гарантированно выиграть первым ходом
Если найдено несколько значений S, в ответе запишите наименьшее из них.
"""