Dificuldade na Parte III

Dificuldade na Parte III

por Rodrigo Alves Souza -
Número de respostas: 5

Oi professor,

Hoje no fim da aula comentei que estava com dificuldades em resolver a Parte III do EP1, que embora tenha lido os 2 artigos no Wikipedia sobre como achar a solução ótima do Light's Out, não entendi muito bem o processo.

Será que você poderia dar uma explicada mais por cima de como a gente acha o algoritmo da solução pra resolver o tabuleiro no menor número possível de jogadas?

Obrigado desde já!

Em resposta à Rodrigo Alves Souza

Re: Dificuldade na Parte III

por José Coelho de Pina -

Ois,

Oi professor,...

Antes de mais nada, uma dica sorriso, quando vocês colocarem uma mensagem no fórum não restrigam
o universo das pessoas que podem responder.
Simplesmente coloquem a dúvida/pergunta.
Sugestões/respostas/dicas são bem vindas boca aberta, independentemente da fonte.

como a gente acha o algoritmo da solução pra resolver o tabuleiro no menor número possível de jogadas?

Todas as soluções conhecidas enumera/listam todos os candidatos a solução e ficam
com a melhor. Umas maneiras enumeram menos candidatos que as outras, mas todas
enumeram.

Aqui vai sugestão de uma solução (= processo de enumeração).
Durante a leitura do texto a seguir talvez ajude ir olhando os comentarios
no programa tapinhas.c colocado no diretório do esqueleto do EP1.

Solução alto nivel:

para cada possível lista de tapinhas,
aplique os tapinhas na lista e verifique se eles colocam todos
os turtles para dormir. Dentre as listas que colocam todos
os turtles para dormir, retorne a que tem o menor número
de tapinhas.

Olhando de mais alto nível o problema é essencialmente o
de encontrar o menor elemento de uma sequência. pensativo No caso
a sequência é a formada pelas lista de tapinhas que colocam todos
os turtles para dormir e o menor é referente a violência da lista sorriso (número de tapinhas).

Cada lista de tapinhas é representada por uma matriz binária.
O problema passa a ser portanto o de enumerar todas as matriz binárias.
Se a dimensão do turtledorm é n × n, então existem 2n × n matriz binária possíveis surpreso, cada uma representa uma lista de tapinhas.
Para exemplificar, suponha que n = 2.
Assim, precisamos enumerar 24 matriz de tapinhas.
Cada uma dessas matriz esta associada a uma sequencia de 4 bits (dígitos binários = zeros e uns).
Por exemplo, as 24 sequência de 4 bits (escritas usando 5) são:

0 0 0 0 0    = representação do 0 na base 2 utilizando 5 bits
0 0 0 0 1    = representação do 1 na base 2 utilizando 5 bits
0 0 0 1 0    = representação do 2 na base 2 utilizando 5 bits
0 0 0 1 1    = representação do 3 na base 2 utilizando 5 bits
0 0 1 0 0    = representação do 4 na base 2 utilizando 5 bits
0 0 1 0 1    = representação do 5 na base 2 utilizando 5 bits
0 0 1 1 0    = ...
0 0 1 1 1    = ...
0 1 0 0 0
0 1 0 0 1
0 1 0 1 0
0 1 0 1 1
0 1 1 0 0
0 1 1 0 1
0 1 1 1 0
0 1 1 1 1
1 0 0 0 0 -----------> acabou

A cada configuração acima corresponde uma matriz de tapinhas:

meu_prompt> ./tapinhas 
Lista de todas as matriz binarias 2 x 2:

Matriz para:  0 0 0 0 0
         1       2   
     +-------+-------+
  1  |       |       |
     +-------+-------+
  2  |       |       |
     +-------+-------+

Matriz para:  0 0 0 0 1
         1       2   
     +-------+-------+
  1  |   T   |       |
     +-------+-------+
  2  |       |       |
     +-------+-------+

Matriz para:  0 0 0 1 0
         1       2   
     +-------+-------+
  1  |       |   T   |
     +-------+-------+
  2  |       |       |
     +-------+-------+

Matriz para:  0 0 0 1 1
         1       2   
     +-------+-------+
  1  |   T   |   T   |
     +-------+-------+
  2  |       |       |
     +-------+-------+

Matriz para:  0 0 1 0 0
         1       2   
     +-------+-------+
  1  |       |       |
     +-------+-------+
  2  |   T   |       |
     +-------+-------+

Matriz para:  0 0 1 0 1
         1       2   
     +-------+-------+
  1  |   T   |       |
     +-------+-------+
  2  |   T   |       |
     +-------+-------+

Matriz para:  0 0 1 1 0
         1       2   
     +-------+-------+
  1  |       |   T   |
     +-------+-------+
  2  |   T   |       |
     +-------+-------+

Matriz para:  0 0 1 1 1
         1       2   
     +-------+-------+
  1  |   T   |   T   |
     +-------+-------+
  2  |   T   |       |
     +-------+-------+

Matriz para:  0 1 0 0 0
         1       2   
     +-------+-------+
  1  |       |       |
     +-------+-------+
  2  |       |   T   |
     +-------+-------+

Matriz para:  0 1 0 0 1
         1       2   
     +-------+-------+
  1  |   T   |       |
     +-------+-------+
  2  |       |   T   |
     +-------+-------+

Matriz para:  0 1 0 1 0
         1       2   
     +-------+-------+
  1  |       |   T   |
     +-------+-------+
  2  |       |   T   |
     +-------+-------+

Matriz para:  0 1 0 1 1
         1       2   
     +-------+-------+
  1  |   T   |   T   |
     +-------+-------+
  2  |       |   T   |
     +-------+-------+

Matriz para:  0 1 1 0 0
         1       2   
     +-------+-------+
  1  |       |       |
     +-------+-------+
  2  |   T   |   T   |
     +-------+-------+

Matriz para:  0 1 1 0 1
         1       2   
     +-------+-------+
  1  |   T   |       |
     +-------+-------+
  2  |   T   |   T   |
     +-------+-------+

Matriz para:  0 1 1 1 0
         1       2   
     +-------+-------+
  1  |       |   T   |
     +-------+-------+
  2  |   T   |   T   |
     +-------+-------+

Matriz para:  0 1 1 1 1
         1       2   
     +-------+-------+
  1  |   T   |   T   |
     +-------+-------+
  2  |   T   |   T   |
     +-------+-------+

Bem, agora tente escrever a parte III usando a ideia acima e como ponto de partida
o programa tapinhas.c que foi colocado com o esqueleto do EP1.

Em resposta à José Coelho de Pina

Re: Dificuldade na Parte III

por Fabio Brzostek Muller -

Podemos copiar trechos do programa tapinhas.c dentro do nosso programa ou ele é só para ilustrar a ideia?