# Оба игрока играют по лучшей тактикеdef f(pile1, pile2, remaining_turns): if gameOver(pile1, pile2): return remainingё_turns % 2 == 0 if remaining_turns == 0: return False if remaining_turns % 2 != 0: return f(pile1 + 1, pile2, remaining_turns - 1) or f(pile1 * 2, pile2, remaining_turns - 1) or f(pile1,pile2 + 1,remaining_turns - 1) or f(pile1, pile2 * 2, - 1) else: return f(pile1 + 1, pile2, remaining_turns - 1) and f(pile1 * 2, pile2, remaining_turns - 1) and f(pile1,pile2 + 1, remaining_turns - 1) and f(pile1, pile2 * 2, remaining_turns - 1)# Первый игрок поддаётсяdef f1(pile1, pile2, remaining_turns): if gameOver(pile1, pile2): return remaining_turns % 2 == 0 if remaining_turns == 0: return False return f(pile1 + 1, pile2, remaining_turns - 1) or (pile1 * 2, pile2, remaining_turns - 1) or f(pile1, pile2 + 1, remaining_turns - 1) or f(pile1, pile2 * 2, remaining_turns - 1)
Проверка на соответствие условиям и вывод ответа
print("Первое")print("19 - ", min([s for s in range(78) if f1(9, s, 2)]))print("Второе - ", min([s for s in range(78) if not f(9, s, 2) and f(9, s, 3)]))print("Третье - ", min([s for s in range(78) if not f(9, s, 2) and f(9, s, 4)]))