Files @ c4cd607ea28c
Branch filter:

Location: Tetris/tetris.py

Laman
skutečné dílky
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()