# 19 ```python= def is_winning_position(heap1, heap2, turn): if heap1 + heap2 <= 18: # Если игра окончена if turn == 3: # И это следующий ход после хода Вани return True # то победа else: return False # иначе непобеда if turn > 2: # Если игра длится дольше двух ходов - проигрыш return False turn1 = is_winning_position(heap1 - 1, heap2, turn + 1) turn2 = is_winning_position(heap1, heap2 - 1, turn + 1) turn3 = is_winning_position(heap1 // 2, heap2, turn + 1) turn4 = is_winning_position(heap1, heap2 // 2, turn + 1) # any([True, False, False]) == True # all([True, True, True]) == True if turn % 2 == 0: if any([turn1, turn2, turn3, turn4]): # Если ход Вани - то нам нужен хотя бы один выйгрышный ход return True else: return False else: if all([turn1, turn2, turn3, turn4]): # Если ход Пети - то нам нужно чтобы как бы он ни сходил, Ваня побеждал всегда return True else: return False for M in range(10, 100): if is_winning_position(M, M, 1): print(M) ``` ![](https://i.imgur.com/XEr7vZG.png) Ответ: 13 # 20 ```python= def is_winning_position(heap1, heap2, turn): if heap1 + heap2 <= 18: # Если игра окончена if turn == 4: # И это следующий ход после хода Пети return True # то победа else: return False # иначе непобеда if turn > 3: # Если игра длится дольше двух трёх ходов - проигрыш return False turn1 = is_winning_position(heap1 - 1, heap2, turn + 1) turn2 = is_winning_position(heap1, heap2 - 1, turn + 1) turn3 = is_winning_position(heap1 // 2, heap2, turn + 1) turn4 = is_winning_position(heap1, heap2 // 2, turn + 1) # any([True, False, False]) == True # all([True, True, True]) == True if turn % 2 == 1: if any([turn1, turn2, turn3, turn4]): # Если ход Вани - то нам нужен хотя бы один выйгрышный ход return True else: return False else: if all([turn1, turn2, turn3, turn4]): # Если ход Пети - то нам нужно чтобы как бы он ни сходил, Ваня побеждал всегда return True else: return False for S in range(6, 100): if is_winning_position(13, S, 1): print(S) ``` ![](https://i.imgur.com/MLHmJbI.png) Ответ: 14 27 ## 21 ```python= # П -(1)-> В # В -(2)-> П # П -(3)-> В # В -(4)-> П # П -(5)-> В - def is_winning_position(heap1, heap2, turn): if heap1 + heap2 <= 18: # Если игра окончена if turn == 3 or turn == 5: # И это следующий ход после хода Вани return True # то победа else: return False # иначе непобеда if turn > 4: # Если игра длится дольше четырёх ходов - проигрыш return False turn1 = is_winning_position(heap1 - 1, heap2, turn + 1) turn2 = is_winning_position(heap1, heap2 - 1, turn + 1) turn3 = is_winning_position(heap1 // 2, heap2, turn + 1) turn4 = is_winning_position(heap1, heap2 // 2, turn + 1) # any([True, False, False]) == True # all([True, True, True]) == True if turn % 2 == 0: if any([turn1, turn2, turn3, turn4]): # Если ход Вани - то нам нужен хотя бы один выйгрышный ход return True else: return False else: if all([turn1, turn2, turn3, turn4]): # Если ход Пети - то нам нужно чтобы как бы он ни сходил, Ваня побеждал всегда return True else: return False for N in range(10, 100): if is_winning_position(N, N, 1): print(N) ``` ![](https://i.imgur.com/ZdBYH23.png) Ответ: 14 ``` ⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⠤⠖⠚⢉⣩⣭⡭⠛⠓⠲⠦⣄⡀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⢀⡴⠋⠁⠀⠀⠊⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠳⢦⡀⠀⠀⠀⠀ ⠀⠀⠀⠀⢀⡴⠃⢀⡴⢳⠀⠀⠀⠀⠀⢣⠀⠀⢣⠀⠀⠀⠀⠀⠀ ⠙⣆⠀⠀⠀ ⠀⠀⠀⠀⡾⠁⣠⠋⠀⠈⢧⠀⠀⠀⠀⠀⢣⠀⠀⢣⠀⠀⠀⠀⠀⠀ ⠈⢧⠀⠀ ⠀⠀⠀⣸⠁⢰⠃⠀⠀⠀⠈⢣⡀⠀⠀⠀⠀⢣⢀⢀⢣⠀⠀⠀⠀⠀⠀ ⠈⣇⠀ ⠀⠀⠀⡇⠀⡾⡀⠀⠀⠀⠀⣀⣹⣆⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⢹⠀ ⠀⠀⢸⠃⢀⣇⡈⠀⠀⠀⠀⠀⠀⢀⡑⢄⡀⢀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⢸⡇ ⠀⠀⢸⠀⢻⡟⡻⢶⡆⠀⠀⠀⠀⡼⠟⡳⢿⣦⡑⢄⠀⠀⠀⠀⠀⠀⠀⠀ ⢸⡇ ⠀⠀⣸⠀⢸⠃⡇⢀⠇⠀⠀⠀⠀⠀⡼⠀⠀⠈⣿⡗⠂⠀⠀⠀⠀⠀⠀⠀ ⢸⠁ ⠀⠀⡏⠀⣼⠀⢳⠊⠀⠀⠀⠀⠀⠀⠱⣀⣀⠔⣸⠁⠀⠀⠀⠀⠀⠀⢠⡟⠀ ⠀⠀⡇⢀⡇⠀⠀⠀⠀/⠀⠀⠀⠀⠀⠀⠀⠠⠀⡇⠀⠀⠀⠀⠀⠀⠀⢸⠃⠀ ⠀⢸⠃⠘⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠁⠀⠀⢀⠀⠀⠀⠀⠀⣾⠀⠀ ⠀⣸⠀⠀⠹⡄⠀⠀⠈⠁⠀⠀⠀⠀⠀⠀⠀⡞⠀⠀⠀⠸⠀⠀⠀⠀⠀⡇⠀⠀ ⠀⡏⠀⠀⠀⠙⣆⠀⠀⠀⠀⠀⠀⠀⢀3⣠⢶⡇⠀⠀⢰⡀⠀⠀⠀⠀⠀⡇⠀⠀ ⢰⠇⡄⠀⠀⠀⡿⢣⣀⣀⣀⡤⠴⡞⠉⠀⢸⠀⠀⠀⣿⡇⠀⠀⠀⠀⠀⣧⠀⠀ ⣸⠀⡇⠀⠀⠀⠀⠀⠀⠉⠀⠀⠀⢹⠀⠀⢸⠀⠀⢀⣿⠇⠀⠀⠀⠁⠀⢸⠀⠀ ⣿⠀⡇⠀⠀⠀⠀⠀⢀⡤⠤⠶⠶⠾⠤⠄⢸⠀⡀⠸⣿⣀⠀⠀⠀⠀⠀⠈⣇⠀ ⡇⠀⡇⠀⠀⡀⠀⡴⠋⠀⠀⠀⠀⠀⠀⠀⠸⡌⣵⡀⢳⡇⠀⠀⠀⠀⠀⠀⢹⡀ ⡇⠀⠇⠀⠀⡇⡸⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⠮⢧⣀⣻⢂⠀⠀⠀⠀⠀⠀⢧ ⣇⠀⢠⠀⠀⢳⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⡎⣆⠀⠀⠀⠀⠀⠘ ⢻⠀⠈⠰⠀⢸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠰⠘⢮⣧⡀⠀⠀⠀⠀ ⠸⡆⠀⠀⠇⣾⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⠆⠀⠀⠀⠀⠀⠀⠀⠙⠳⣄⡀⢢⡀ ```