Files @ b55ea037fd35
Branch filter:

Location: Tetris/tetris.py

Laman
transformace na řídkou matici
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)
	head.left.right=c
	c.left=head.left
	head.left=c
	c.right=head
	columns.append(c)

for row in matrix:
	cells=[]
	for (item,col) in zip(row,columns):
		if item!=1: continue
		c=Cell(up=col.up,down=col,col=col)
		col.up.down=c
		col.up=c
		cells.append(c)
		c.right=cells[0]
		c.left=cells[0].left
		c.left.right=c
		c.right.left=c

head.search()