Форум » Теория игр » 21-135 задача » Ответить

21-135 задача

esilence: Здравствуйте. У меня не сходится ответ в 21 задаче №135. results = {} def f (x, k): if x in results: return results[x] if x >= 61: return 0 nextcodes = [] if k - 1 >= 0: nextcodes.append(f(x+1, k-1)) if k - x >= 0: nextcodes.append(f(2*x, k-x)) negative = [i for i in nextcodes if i<=0] if negative: res = -max(negative)+1 else: res = -max(nextcodes) results[x] = res return res for i in range(1,62): print(i, f(i, 80-i)) Позиция 28 проигрышная, но у второго игрока нет гарантии, что он выиграет своим вторым ходом. Если первый игрок походит в позицию 56, то проигрыш будет на 3 ходу. Не понятно, как думать в этом случае?

Ответов - 1

les: Здравствуйте! У меня тоже не сходится ответ с данным номером. При 28 Ваня своим 2-ым ходом не сможет победить, т.к. для осуществления хода *2 ему не хватит камней. def f(s,m): if s>=61: return m%2==0 if m==0 : return 0 h=[f(s+1,m-1)] if s<=40: h+=[ f(s*2,m-1)] return any (h) if m % 2 !=0 else all(h) print('№19 ответ:',len([s for s in range(1,61) if f (s,1)])) print('№20 ответ:',[s for s in range(1,61) if not (f (s,1)) and f(s,3)]) print('№21 ответ:',[s for s in range(1,61) if not (f (s,2)) and f(s,4)]) print('***') def f(h): s,s1=h a=[] if s1>=1: a.append((s+1,s1-1)) if s1>=s: a.append((s*2,s1-s)) return a from functools import* @lru_cache(None) def game(h): s,s1=h if s>=61: return 'победа' if any(game(n)=='победа' for n in f(h)): return 'Петя 1'# 1-ый ход игры if all(game(n)=='Петя 1' for n in f(h)): return 'Ваня 1'# 2-ой ход игры if any(game(n)=='Ваня 1' for n in f(h)): return 'Петя 2'# 3-ий ход игры if all(game(n)=='Петя 1' or game(n)=='Петя 2' for n in f(h)): return 'Ваня 2'# 4-ый ход игры print('ответ на номер 19:') k=0 for s in range(1,61): n=s,80-s if game(n)=='Петя 1': k+=1 print(s,game(n)) print(k) print('ответ на номер 20:') for s in range(1,61): n=s,80-s if game(n)=='Петя 2': print(s,game(n)) print('ответ на номер 21:') for s in range(1,61): n=s,80-s if game(n)=='Ваня 2': print(s,game(n)) ВЫВОД: №19 ответ: 11 №20 ответ: [15, 29, 58] №21 ответ: [57] *** ответ на номер 19: 31 Петя 1 32 Петя 1 33 Петя 1 34 Петя 1 35 Петя 1 36 Петя 1 37 Петя 1 38 Петя 1 39 Петя 1 40 Петя 1 60 Петя 1 11 ответ на номер 20: 15 Петя 2 29 Петя 2 58 Петя 2 ответ на номер 21: 57 Ваня 2



полная версия страницы