📑ЗАДАЧА
Два игрока должны по очереди передвигать фигуру на клетчатой доскеиз точки с координатами (2,2) в точку с координатами (8,8).
Ход игры - перемещение из точки (х,у) в одну из точек: (х+1,у+2) или (х+2,у+1).
Выигрывает тот, после хода которого фигура оказалась в точке (8,8).
Попадание в одну из точек: (8,у) или (х,8), - считается ничьей.
Определите выигрышную стратегию победителя.
📑РЕШЕНИЕ
xxxxxxxxxx
start,end,step,edges=[2,2],8,0,[[1,2],[2,1]]
players={1:{'result':[],'strategy':[]},
2:{'result':[],'strategy':[]}}
game={0:[{'value':start,'label':'0','player':0}]}
def f_end(lst,end):
return sum([x==end for x in lst])
def f_exit(lst,end):
return sum([x<=end for x in lst])
while game[step]!=[]:
game[step+1]=[]
for node in game[step]:
for k in range(2):
v=[node['value'][i]+edges[k][i] for i in range(2)]
l=node['label']+str(k)
p=step%2+1
curr_node={'value':v,'label':l,'player':p}
if f_exit(curr_node['value'],end):
fe=f_end(curr_node['value'],end)
if fe:
players[p]['result'].append(fe)
players[p]['strategy'].append(
curr_node['label'])
game[step+1].append(curr_node)
step+=1
def winner(player,game):
result=[]
if (2 in player['result']):
for i in range(len(player['result'])):
if player['result'][i]==2:
strategy=[]
base=player['strategy'][i]
for j in range(len(base)):
for node in game[j]:
if base[:j+1]==node['label']:
strategy.append(
[node['value'],node['player']])
result+=[strategy]
return result
for i in [1,2]:
for el in winner(players[i],game):
print('the winner strategy for the player #%d =>\n'%i,
'(step & player)\n',el)
Комментариев нет:
Отправить комментарий