🎯 До ЕГЭ по информатике:
--дней
:
--часов
:
--минут
:
--секунд
19

Теория игр — №19

1 куча, 2 кучи, отрезки. Минимальное s для победы за 2 хода.

Python
# 1 куча
def f(s, m):
    if s >= 132: return m % 2 == 0
    if m == 0: return 0
    h = [f(s+3, m-1), f(s+6, m-1), f(s*3, m-1)]
    return any(h) if m % 2 != 0 else all(h)
print('#19', min(s for s in range(1,132) if f(s, 2)))
print('#20', [s for s in range(1,132) if not f(s,1) and f(s,3)])
print('#21', min(s for s in range(1,132) if not f(s,2) and f(s,4)))
Способ 2
# 2 кучи
def f(x, y, m):
    if x + y >= 77: return m % 2 == 0
    if m == 0: return 0
    h = [f(x+3,y,m-1), f(x*3,y,m-1),
         f(x,y+3,m-1), f(x,y*3,m-1)]
    return any(h) if m % 2 != 0 else all(h)
print('#19', min(s for s in range(1,65) if f(12,s,2)))
print('#20', [s for s in range(1,65) if not f(12,s,1) and f(12,s,3)])
print('#21', [s for s in range(1,65) if not f(12,s,2) and f(12,s,4)])

# Отрезки
def f(x, m):
    if 105 >= x >= 97: return m % 2 == 0
    if x > 105: return m % 2 != 0
    if m == 0: return 0
    h = [f(x+3, m-1), f(x+5, m-1), f(x*3, m-1)]
    return any(h) if m % 2 != 0 else all(h)

📚 Теория

Теория игр: победные и проигрышные позиции. any() — текущий игрок выбирает лучший ход, all() — противник играет оптимально.