Exercício 01 - Tabuleiro de xadrez

Autor:lionis
Data:12/03/2009

Solução 1

  • Criação do tabuleiro de forma matricial, em 2 etapas

Desenha um tabuleiro de xadrez, de tamanho Height x Width, possibilitando a definição do tamanho das células (Cell Height x Cell Width).

Inicialmente, é gerada uma matriz de "zeros" com o tamanho desejado. Depois, realiza-se a inserção de 2 padrões: primeiro começando - linhas e colunas - por 0, e depois começando por 1.

Para possibilitar a definição do tamanho da célula, ocorre a varredura da matriz, a fim de definir as regiões onde serão inseridos os "uns".

 1 def tabuleiro_xadrez1(h, w, cellh, cellw):
 2     t1 = time.time() #captura o tempo inicial
 3 
 4     I = zeros([h, w]) #cria uma matriz de altura H e largura W, preenchida com zeros
 5 
 6     for i in range(0, cellh):#preencher com 1 toda a area da celula (height x width)
 7         for j in range(0, cellw):
 8             I[i:h:2*cellh, j+cellw:w:2*cellw] = 1
 9             I[i+cellh:h:2*cellh, j:w:2*cellw] = 1
10 
11     t2 = time.time()
12     print I
13     mmshow(I, title= "Tempo de processamento = " + str(t2-t1) + " segundos");
14 
15 tabuleiro_xadrez1(400,400,10,20)
[[ 0.  0.  0. ...,  1.  1.  1.]
 [ 0.  0.  0. ...,  1.  1.  1.]
 [ 0.  0.  0. ...,  1.  1.  1.]
 ..., 
 [ 1.  1.  1. ...,  0.  0.  0.]
 [ 1.  1.  1. ...,  0.  0.  0.]
 [ 1.  1.  1. ...,  0.  0.  0.]]
Warning: downcasting image from double to uint16 (may lose precision)

Tempo de processamento = 0.00420713424683 segundos

Solução 2

  • Criação do tabuleiro de forma matricial, utilizando complemento de 1

Desenha um tabuleiro de xadrez, de tamanho Height x Width, possibilitando a definição do tamanho das células (Cell Height x Cell Width).

Inicialmente, é gerada uma matriz de "zeros" com o tamanho desejado. Depois, insere-se o padrão "0 1 0 1..." para todas as linhas, respeitando a largura da célula.

Após a formação desta matriz inicial, cria-se um vetor de "um", do qual serão subtraídas as linhas selecionadas - de acordo com a altura da célula - e assim definir o complemento de 1.

 1 def tabuleiro_xadrez2(h, w, cellh, cellw):
 2     t1 = time.time() #captura o tempo inicial
 3 
 4     I = zeros([h,w]) #cria uma matriz de altura H e largura W, preenchida com zeros
 5 
 6     for i in range(0, cellw):#preencher com 1 toda a area da celula (height x width)
 7         I[...,i+cellw:w:2*cellw] = 1 #todas as linhas comecam com 0
 8 
 9     um = ones([w]) #cria um vetor de 1's com largura W
10 
11     for i in range(cellh,h,2*cellh): #seleciona as linhas para
12         for j in range(0,cellh): #serem subtraidas, de acordo com a altura da celula
13             if (i+j < h):
14                 I[i+j] = um - I[i+j] #calcula o complementar
15 
16     t2 = time.time()
17     print I
18     mmshow(I, title= "Tempo de processamento = " + str(t2-t1) + " segundos");
19 
20 tabuleiro_xadrez2(400,400,20,10)
[[ 0.  0.  0. ...,  1.  1.  1.]
 [ 0.  0.  0. ...,  1.  1.  1.]
 [ 0.  0.  0. ...,  1.  1.  1.]
 ..., 
 [ 1.  1.  1. ...,  0.  0.  0.]
 [ 1.  1.  1. ...,  0.  0.  0.]
 [ 1.  1.  1. ...,  0.  0.  0.]]
Warning: downcasting image from double to uint16 (may lose precision)

Tempo de processamento = 0.00211715698242 segundos