''' P-00 (демо-2021). I, II (p, s) +1 *2 Win: p + s >= 77 (7, s) 1 ≤ S ≤ 69 c 1 P,I 2 V,I 3 P,II 4 V,II ''' def f(p, s, c): # При ЛЮБОЙ игре! if p + s >= 77: return c % 2 == 0 if c == 0: return False t = [f(p+1, s, c-1), f(p*2, s, c-1), f(p, s+1, c-1), f(p, s*2, c-1)] return any(t) if c % 2 != 0 else all(t) def fn(p, s, c): # При НЕУДАЧНОЙ игре! if p + s >= 77: return c % 2 == 0 if c == 0: return False t = [fn(p+1, s, c-1), fn(p*2, s, c-1), fn(p, s+1, c-1), fn(p, s*2, c-1)] return any(t) # УДАЛИТЬ для неудачной игры if c % 2 != 0 else all(t) mn = 1 # 1 ≤ S ≤ 69 mx = 69 # 1 ≤ S ≤ 69 ''' Задание 19. Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Укажите минимальное значение S, когда такая ситуация возможна. ''' print('мин. s, НЕУДАЧНЫЙ') for s in range(mn, mx+1): if fn(7, s, 2): # !!! fn - для неудачной print('19:', s) break # так как игра неудачная ''' Задание 20. c 1 P,I !!! NO!! 2 V,I 3 P,II ! Win 4 V,II ''' print('2, up') for s in range(mn, mx+1): if f(7, s, 3): if not f(7, s, 1): print('20:', s) ''' Задание 21. c 1 P,I 2 V,I ! Win !!! NO!! 3 P,II 4 V,II ! Win ''' print(' min s') for s in range(mn, mx+1): if f(7, s, 2) or f(7, s, 4): if not f(7, s, 2): print('21:', s) ''' ok 19: 18 20: 31 34 21: 30 мин. s, НЕУДАЧНЫЙ 19: 18 2, up 20: 31 20: 34 min s 21: 30 21: 33 '''