1906.py
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней.
Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в одну
из куч один камень или увеличить количество камней в одной из куч в три раза.
Игра завершается в тот момент, когда суммарное количество камней в кучах становится
не менее 65. Победителем считается игрок, сделавший последний ход.
В начальный момент в первой куче 6 камней, во второй - S камней, 1 <= S <= 58.
19. Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети.
Укажите минимальное значение S, при котором такая ситуация возможна.
20. Найдите два наименьших значения S, при которых у Пети есть выигрышная стратегия,
и одновременно:
- Петя не может выиграть за один ход;
- Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
21. Найдите минимальное значение S, при котором одновременно:
- у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом
при любой игре Пети;
- у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.
def g(a, b, hod, end):
if a + b >= 65:
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 * 3, b, hod + 1, end),
g(a, b * 3, hod + 1, end)
]
return any(moves) if ((hod + 1) % 2) == (end[0] % 2) else all(moves)
print([
s for s in range(1, 59)
if any(
a1 + b1 < 65 and g(a1, b1, 1, end=[2])
for a1, b1 in ((7, s), (6, s + 1), (18, s), (6, 3 * s))
) and any(
a1 + b1 < 65 and not g(a1, b1, 1, end=[2])
for a1, b1 in ((7, s), (6, s + 1), (18, s), (6, 3 * s))
)
# if g(6, s, 0, end=[3]) and not g(6, s, 0, end=[1])
# if g(6, s, 0, end=[2, 4]) and not g(6, s, 0, end=[2])
])
"""
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней.
Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в одну
из куч один камень или увеличить количество камней в одной из куч в три раза.
Игра завершается в тот момент, когда суммарное количество камней в кучах становится
не менее 65. Победителем считается игрок, сделавший последний ход.
В начальный момент в первой куче 6 камней, во второй - S камней, 1 <= S <= 58.
19. Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети.
Укажите минимальное значение S, при котором такая ситуация возможна.
20. Найдите два наименьших значения S, при которых у Пети есть выигрышная стратегия,
и одновременно:
- Петя не может выиграть за один ход;
- Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
21. Найдите минимальное значение S, при котором одновременно:
- у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом
при любой игре Пети;
- у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.
"""
def g(a, b, hod, end):
if a + b >= 65:
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 * 3, b, hod + 1, end),
g(a, b * 3, hod + 1, end)
]
return any(moves) if ((hod + 1) % 2) == (end[0] % 2) else all(moves)
print([
s for s in range(1, 59)
if any(
a1 + b1 < 65 and g(a1, b1, 1, end=[2])
for a1, b1 in ((7, s), (6, s + 1), (18, s), (6, 3 * s))
) and any(
a1 + b1 < 65 and not g(a1, b1, 1, end=[2])
for a1, b1 in ((7, s), (6, s + 1), (18, s), (6, 3 * s))
)
# if g(6, s, 0, end=[3]) and not g(6, s, 0, end=[1])
# if g(6, s, 0, end=[2, 4]) and not g(6, s, 0, end=[2])
])
"""
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней.
Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в одну
из куч один камень или увеличить количество камней в одной из куч в три раза.
Игра завершается в тот момент, когда суммарное количество камней в кучах становится
не менее 65. Победителем считается игрок, сделавший последний ход.
В начальный момент в первой куче 6 камней, во второй - S камней, 1 <= S <= 58.
19. Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети.
Укажите минимальное значение S, при котором такая ситуация возможна.
20. Найдите два наименьших значения S, при которых у Пети есть выигрышная стратегия,
и одновременно:
- Петя не может выиграть за один ход;
- Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
21. Найдите минимальное значение S, при котором одновременно:
- у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом
при любой игре Пети;
- у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.
"""