Files @ 5b557313c5f2
Branch filter:

Location: Tetris/tetris.py

Laman
úprava na ostrá data
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())