from datetime import datetime import numpy as np from pieces import listRotations,listShifts,fits from dlx import Header,Column,Cell import piece_list board=np.zeros((2,5,5)) board[0][2][2]=1 (nz,ny,nx)=board.shape pieces=[(name,np.array(arr)) for (name,arr) in piece_list.pieces] header=list(range(1,15))+\ [(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 ((nameA,nameB),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[nameA]]=1 row[index[nameB]]=1 for coords in fit: row[index[coords]]=1 matrix.append(row) print(len(header),"cols") print(len(matrix),"rows") 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() print(datetime.now()) head.search() print(datetime.now())