Deepcopy в Python 3.7 3.6 не вывоз присвоение копий класса к списку/кортежу
Как на нем тогда писать перебор состояний игрового поля с множественным возвратом к предыдущему состоянию.
Уже более 10 часов не могу сделать задание по решению компьютером головоломки слоты путем перебора
По алгоритму, когда я попадаю на пустую ячейку , я добавляю в массив все возможные варианты поля с различными командами в этой ячейке , затем решаю последнюю, если решения нет удаляю ячейку и беру предыдущую
Короче когда я создаю новое состояние в массиве с deepcopy строка 63 а потом меняю его, меняются предыдущие и прога не пашет dbg3 b 0 u 0 mnbd
[['bu', 'a ', 'a ', 'a ', 'a '], ['a ', 'a ']]
dbg3 b 0 l 1 mnbd
[['bl', 'a ', 'a ', 'a ', 'a '], ['a ', 'a ']]
[['bl', 'a ', 'a ', 'a ', 'a '], ['a ', 'a ']]
dbg3 b 0 r 2 mnbd
[['br', 'a ', 'a ', 'a ', 'a '], ['a ', 'a ']]
[['br', 'a ', 'a ', 'a ', 'a '], ['a ', 'a ']]
[['br', 'a ', 'a ', 'a ', 'a '], ['a ', 'a ']]
dbg3 b 0 1 3 mnbd
[['b1', 'a ', 'a ', 'a ', 'a '], ['a ', 'a ']]
[['b1', 'a ', 'a ', 'a ', 'a '], ['a ', 'a ']]
[['b1', 'a ', 'a ', 'a ', 'a '], ['a ', 'a ']]
[['b1', 'a ', 'a ', 'a ', 'a '], ['a ', 'a ']]
dbg3 b 0 2 4 mnbd
[['b2', 'a ', 'a ', 'a ', 'a '], ['a ', 'a ']]
[['b2', 'a ', 'a ', 'a ', 'a '], ['a ', 'a ']]
[['b2', 'a ', 'a ', 'a ', 'a '], ['a ', 'a ']]
[['b2', 'a ', 'a ', 'a ', 'a '], ['a ', 'a ']]
[['b2', 'a ', 'a ', 'a ', 'a '], ['a ', 'a ']]
dbg3 o 1 u 0 mnbd
[['ou', 'a ', 'a ', 'a ', 'a '], ['a ', 'a ']]
[['ou', 'a ', 'a ', 'a ', 'a '], ['a ', 'a ']]
[['ou', 'a ', 'a ', 'a ', 'a '], ['a ', 'a ']]
[['ou', 'a ', 'a ', 'a ', 'a '], ['a ', 'a ']]
[['ou', 'a ', 'a ', 'a ', 'a '], ['a ', 'a ']]
[['ou', 'a ', 'a ', 'a ', 'a '], ['a ', 'a ']]
dbg3 o 1 l 1 mnbd
[['ol', 'a ', 'a ', 'a ', 'a '], ['a ', 'a ']]
[['ol', 'a ', 'a ', 'a ', 'a '], ['a ', 'a ']]
[['ol', 'a ', 'a ', 'a ', 'a '], ['a ', 'a ']]
[['ol', 'a ', 'a ', 'a ', 'a '], ['a ', 'a ']]
[['ol', 'a ', 'a ', 'a ', 'a '], ['a ', 'a ']]
[['ol', 'a ', 'a ', 'a ', 'a '], ['a ', 'a ']]
[['ol', 'a ', 'a ', 'a ', 'a '], ['a ', 'a ']]
dbg3 o 1 r 2 mnbd
А вот и сам код:
from copy import *
ihatepython=[]
class EatCrapNDie:
fld={(0,2): 'b',(1,2): 'b',(2,2): 'o',(3,2): 'b',(4,2): 'b',(2,0): 'b',(2,1): 'b',(2,3): 'b',(2,4): 'b',}
goal={(0,2):True,(2,0):True,(4,2):True,(2,4):True,}
fa=[['a ' for a in range(0,5)],['a ' for a in range(0,2)]]
crsr=(0,0)
stls=(2,3,0)
bckp=[stls,(0,0,-1)]
clr=('b','o','a')
cmdlst=('u','l','r','1','2')
def stlsmv(qq):
if qq.stls[2]==0:
qq.stls=(qq.stls[0],qq.stls[1]-1,qq.stls[2])
elif qq.stls[2]==1:
qq.stls=(qq.stls[0]+1,qq.stls[1],qq.stls[2])
elif qq.stls[2]==2:
qq.stls=(qq.stls[0],qq.stls[1]+1,qq.stls[2])
elif qq.stls[2]==3:
qq.stls=(qq.stls[0]-1,qq.stls[1],qq.stls[2])
def stlstrn(qq,a):
i=qq[2]+a
if i>3:
i=0
elif i<0:
i=3
qq.stls=(qq.stls[0],qq.stls[1],i)
def xsctcmd(q):
global crrnt,ra,ihatepython,ndscl
print('dbg2',q)
if q==' ':
for i in range(0,len(clr)):
for u in range(0,len(cmdlst)):
crrnt=crrnt+1
ihatepython=ihatepython+[deepcopy(ra)]
ihatepython[crrnt].fa[ra.crsr[1]][ra.crsr[0]]=clr[i]+cmdlst[u]
print('dbg3',clr[i],i,cmdlst[u],u,'mnbd')
for qwbck in ihatepython:
print(qwbck.fa)
ra=deepcopy(ihatepython[crrnt])
ihatepython.pop(crrnt)
crrnt=crrnt-1
elif q=='u':
ra.crsr=(ra.crsr[0]+1,ra.crsr[1])
stlsmv(ra.stls)
elif q=='l':
ra.crsr=(ra.crsr[0]+1,ra.crsr[1])
stlstrn(ra.stls,-1)
elif q=='r':
ra.crsr=(ra.crsr[0]+1,ra.crsr[1])
stlstrn(ra.stls,1)
elif q=='1' or q=='2':
i=int(q)-1
if ra.bckp[i]==ra.stls:
if crrnt>-1:
print('sclout',ra.fa)
ra=deepcopy(ihatepython[crrnt])
ihatepython.pop(crrnt)
crrnt=crrnt-1
else:
ndscl=True
else:
ra.crsr=(0,i)
ra.bckp[i]=ra.stls
crrnt=-1
ndscl=False
ra=EatCrapNDie
while ndscl==False:
print('dbg',ra.fa,ra.crsr,ra.stls)
crd=(ra.stls[0],ra.stls[1])
if crd in ra.fld:
if ra.fld[crd]==ra.fa[ra.crsr[1]][ra.crsr[0]][0] or ra.fa[ra.crsr[1]][ra.crsr[0]][0]=='a':
if crd in ra.goal:
ra.goal[crd]=False
frc=True
for u in ra.goal:
if ra.goal[u]==True:
frc=False
if frc==True:
print('itwrks',ra.fa)
ndscl=True
xsctcmd(ra.fa[ra.crsr[1]][ra.crsr[0]][1])
else:
print('stlsout',ra.fa)
ra=deepcopy(ihatePython[crrnt])
deepcopy.pop(crrnt)
crrnt=crrnt-1
Я отдаю себе отчет в том что это лютый говнокод,но я писал по быстрому, чтобы понять, что не так в основном проекте.