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())