import numpy as np from pieces import listRotations,listShifts,fits from dlx import Header,Column,Cell board=np.zeros((1,4,3)) boat=np.array([[[0,1,0],[1,1,1]]]) sz=np.array([[[1,1,0],[0,1,1]]]) el=np.array([[[1,1,1],[1,0,0]]]) (nz,ny,nx)=board.shape pieces=[("el1",el),("el2",el),("sz",sz)] header=[name for (name,p) in pieces]+\ [(z,y,x) for z in range(nz) for y in range(ny) for x in range(nx) if not board[z][y][x]] index={label:i for (i,label) in enumerate(header)} matrix=[] for (name,piece) in pieces: for p in listRotations(piece): for shift in listShifts(board,p): fit=fits(board,p,shift) if fit is not False: row=[0]*len(header) row[index[name]]=1 for coords in fit: row[index[coords]]=1 matrix.append(row) print(header) for row in matrix: print(row) columns=[] head=Header() for label in header: c=Column(label) c.attachRight(head) columns.append(c) for row in matrix: cells=[] for (item,col) in zip(row,columns): if item!=1: continue c=Cell(col) c.attachDown(col) cells.append(c) c.attachRight(cells[0]) col.size+=1 print() head.search()