pl-30 exercicios mastermind programa˘c~ao l ogica ...sendin/cursos/pl/2s2019/aula30.pdf · 5 s~ao...

43
PL-30 Ivan Sendin Exercicios MasterMind Express˜oes Booleanas Tour do Cavaleiro Programa¸ aoL´ogica Aula 30 Ivan Sendin FACOM - Universidade Federal de Uberlˆ andia [email protected] 27 de novembro de 2019

Upload: others

Post on 02-Nov-2020

40 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: PL-30 Exercicios MasterMind Programa˘c~ao L ogica ...sendin/Cursos/PL/2S2019/aula30.pdf · 5 S~ao cavaleiros ou cafajestes 6 Cavaleiro sempre fala a verdade 7 Cafajestes sempre mentem

PL-30

Ivan Sendin

Exercicios

MasterMind

ExpressoesBooleanas

Tour do Cavaleiro

Programacao Logica

Aula 30

Ivan Sendin

FACOM - Universidade Federal de [email protected]

27 de novembro de 2019

Page 2: PL-30 Exercicios MasterMind Programa˘c~ao L ogica ...sendin/Cursos/PL/2S2019/aula30.pdf · 5 S~ao cavaleiros ou cafajestes 6 Cavaleiro sempre fala a verdade 7 Cafajestes sempre mentem

PL-30

Ivan Sendin

Exercicios

MasterMind

ExpressoesBooleanas

Tour do Cavaleiro

P-99: Ninety-Nine Prolog Problems

Alem do cursoED, matematica,...Com o .pl disponıvel, nao ajuda!!!!!

Logic Puzzles with Prolog

Alem do curso....Com o .pl disponıvel, nao ajuda!!!!!

Page 3: PL-30 Exercicios MasterMind Programa˘c~ao L ogica ...sendin/Cursos/PL/2S2019/aula30.pdf · 5 S~ao cavaleiros ou cafajestes 6 Cavaleiro sempre fala a verdade 7 Cafajestes sempre mentem

PL-30

Ivan Sendin

Exercicios

MasterMind

ExpressoesBooleanas

Tour do Cavaleiro

MasterMind

cor: definir a 6 cores

red: Hc==Hs?

white: H/member?

dica: red,white,-

geraChutes: Instanciar um chute, dica

geraChutesLista: geraChutes

Page 4: PL-30 Exercicios MasterMind Programa˘c~ao L ogica ...sendin/Cursos/PL/2S2019/aula30.pdf · 5 S~ao cavaleiros ou cafajestes 6 Cavaleiro sempre fala a verdade 7 Cafajestes sempre mentem

PL-30

Ivan Sendin

Exercicios

MasterMind

ExpressoesBooleanas

Tour do Cavaleiro

MasterMind

Dificuldade: gerar a lista

e dificil gerar a lista via backtracking....

Page 5: PL-30 Exercicios MasterMind Programa˘c~ao L ogica ...sendin/Cursos/PL/2S2019/aula30.pdf · 5 S~ao cavaleiros ou cafajestes 6 Cavaleiro sempre fala a verdade 7 Cafajestes sempre mentem

PL-30

Ivan Sendin

Exercicios

MasterMind

ExpressoesBooleanas

Tour do Cavaleiro

Page 6: PL-30 Exercicios MasterMind Programa˘c~ao L ogica ...sendin/Cursos/PL/2S2019/aula30.pdf · 5 S~ao cavaleiros ou cafajestes 6 Cavaleiro sempre fala a verdade 7 Cafajestes sempre mentem

PL-30

Ivan Sendin

Exercicios

MasterMind

ExpressoesBooleanas

Tour do Cavaleiro

MasterMind

Dificuldade: gerar a lista

e dificil gerar a lista via backtracking

OK para o ”Iterativo”

bagof

How to get the list of values during Prologbacktracking?

CURIOSIDADE!! Nao sera avaliacao!!

Page 7: PL-30 Exercicios MasterMind Programa˘c~ao L ogica ...sendin/Cursos/PL/2S2019/aula30.pdf · 5 S~ao cavaleiros ou cafajestes 6 Cavaleiro sempre fala a verdade 7 Cafajestes sempre mentem

PL-30

Ivan Sendin

Exercicios

MasterMind

ExpressoesBooleanas

Tour do Cavaleiro

Constraint Logic Programming over

Boolean Variables

predicado sat(+Expr)

Verifica se a expressao booleana pode ser satisfeita(=verdadeira)

Se existe uma atribuicao de valores as variaveis quetorna a expressao verdadeira

a ∧ b ∨ b ∧ c

Page 8: PL-30 Exercicios MasterMind Programa˘c~ao L ogica ...sendin/Cursos/PL/2S2019/aula30.pdf · 5 S~ao cavaleiros ou cafajestes 6 Cavaleiro sempre fala a verdade 7 Cafajestes sempre mentem

PL-30

Ivan Sendin

Exercicios

MasterMind

ExpressoesBooleanas

Tour do Cavaleiro

:- use_module(library(clpb)).

?-sat(A).

A=1

Page 9: PL-30 Exercicios MasterMind Programa˘c~ao L ogica ...sendin/Cursos/PL/2S2019/aula30.pdf · 5 S~ao cavaleiros ou cafajestes 6 Cavaleiro sempre fala a verdade 7 Cafajestes sempre mentem

PL-30

Ivan Sendin

Exercicios

MasterMind

ExpressoesBooleanas

Tour do Cavaleiro

:- use_module(library(clpb)).

?-sat(A),sat(B).

A=B, B=1.

Page 10: PL-30 Exercicios MasterMind Programa˘c~ao L ogica ...sendin/Cursos/PL/2S2019/aula30.pdf · 5 S~ao cavaleiros ou cafajestes 6 Cavaleiro sempre fala a verdade 7 Cafajestes sempre mentem

PL-30

Ivan Sendin

Exercicios

MasterMind

ExpressoesBooleanas

Tour do Cavaleiro

:- use_module(library(clpb)).

?-sat(A*B).

A=B, B=1.

Page 11: PL-30 Exercicios MasterMind Programa˘c~ao L ogica ...sendin/Cursos/PL/2S2019/aula30.pdf · 5 S~ao cavaleiros ou cafajestes 6 Cavaleiro sempre fala a verdade 7 Cafajestes sempre mentem

PL-30

Ivan Sendin

Exercicios

MasterMind

ExpressoesBooleanas

Tour do Cavaleiro

:- use_module(library(clpb)).

?-sat(A+B).

sat(A=\=A*B#B)

Resposta condicional.

Page 12: PL-30 Exercicios MasterMind Programa˘c~ao L ogica ...sendin/Cursos/PL/2S2019/aula30.pdf · 5 S~ao cavaleiros ou cafajestes 6 Cavaleiro sempre fala a verdade 7 Cafajestes sempre mentem

PL-30

Ivan Sendin

Exercicios

MasterMind

ExpressoesBooleanas

Tour do Cavaleiro

:- use_module(library(clpb)).

?-sat(A+B), labeling([A,B]).

A=0,B=1

A=1,B=0

A=B,B=1

Page 13: PL-30 Exercicios MasterMind Programa˘c~ao L ogica ...sendin/Cursos/PL/2S2019/aula30.pdf · 5 S~ao cavaleiros ou cafajestes 6 Cavaleiro sempre fala a verdade 7 Cafajestes sempre mentem

PL-30

Ivan Sendin

Exercicios

MasterMind

ExpressoesBooleanas

Tour do Cavaleiro

Ou-exclusivo.

:- use_module(library(clpb)).

?- sat(A#B),labeling([A,B]).

Page 14: PL-30 Exercicios MasterMind Programa˘c~ao L ogica ...sendin/Cursos/PL/2S2019/aula30.pdf · 5 S~ao cavaleiros ou cafajestes 6 Cavaleiro sempre fala a verdade 7 Cafajestes sempre mentem

PL-30

Ivan Sendin

Exercicios

MasterMind

ExpressoesBooleanas

Tour do Cavaleiro:- use_module(library(clpb)).

?- sat(~A*B),labeling([A,B]).

A=0,B=1

Page 15: PL-30 Exercicios MasterMind Programa˘c~ao L ogica ...sendin/Cursos/PL/2S2019/aula30.pdf · 5 S~ao cavaleiros ou cafajestes 6 Cavaleiro sempre fala a verdade 7 Cafajestes sempre mentem

PL-30

Ivan Sendin

Exercicios

MasterMind

ExpressoesBooleanas

Tour do Cavaleiro

Cavaleiros e Cafajestes

1 (Aula 1)

2 Knights and Knaves

3 What Is the Name of This Book? - RaymondSmullyan

4 Habitantes de uma determinada ilha

5 Sao cavaleiros ou cafajestes

6 Cavaleiro sempre fala a verdade

7 Cafajestes sempre mentem

Page 16: PL-30 Exercicios MasterMind Programa˘c~ao L ogica ...sendin/Cursos/PL/2S2019/aula30.pdf · 5 S~ao cavaleiros ou cafajestes 6 Cavaleiro sempre fala a verdade 7 Cafajestes sempre mentem

PL-30

Ivan Sendin

Exercicios

MasterMind

ExpressoesBooleanas

Tour do Cavaleiro

Cavaleiros e Cafajestes

”Eu sou um a cavaleiro”

”Eu sou um cafajeste”

Cavaleiro=1,Verdadeiro

Cafajeste=0, Falso

Page 17: PL-30 Exercicios MasterMind Programa˘c~ao L ogica ...sendin/Cursos/PL/2S2019/aula30.pdf · 5 S~ao cavaleiros ou cafajestes 6 Cavaleiro sempre fala a verdade 7 Cafajestes sempre mentem

PL-30

Ivan Sendin

Exercicios

MasterMind

ExpressoesBooleanas

Tour do Cavaleiro

Cavaleiros e Cafajestes

”Eu sou um a cavaleiro”

”A=1”

Alguem esta falando...pode ser verdade ou mentira

Page 18: PL-30 Exercicios MasterMind Programa˘c~ao L ogica ...sendin/Cursos/PL/2S2019/aula30.pdf · 5 S~ao cavaleiros ou cafajestes 6 Cavaleiro sempre fala a verdade 7 Cafajestes sempre mentem

PL-30

Ivan Sendin

Exercicios

MasterMind

ExpressoesBooleanas

Tour do Cavaleiro

:- use_module(library(clpb)).

?- sat(A =:= (A=:=1)).

sat(A=:=A).

?- sat(A =:= (A=:=1)), labeling([A]).

A=0

A=1

Era o esperado...

Page 19: PL-30 Exercicios MasterMind Programa˘c~ao L ogica ...sendin/Cursos/PL/2S2019/aula30.pdf · 5 S~ao cavaleiros ou cafajestes 6 Cavaleiro sempre fala a verdade 7 Cafajestes sempre mentem

PL-30

Ivan Sendin

Exercicios

MasterMind

ExpressoesBooleanas

Tour do Cavaleiro

Cavaleiros e Cafajestes

”Eu sou um cafajeste”

Page 20: PL-30 Exercicios MasterMind Programa˘c~ao L ogica ...sendin/Cursos/PL/2S2019/aula30.pdf · 5 S~ao cavaleiros ou cafajestes 6 Cavaleiro sempre fala a verdade 7 Cafajestes sempre mentem

PL-30

Ivan Sendin

Exercicios

MasterMind

ExpressoesBooleanas

Tour do Cavaleiro

:- use_module(library(clpb)).

?- sat(A =:= (A=:=0)).

false

Page 21: PL-30 Exercicios MasterMind Programa˘c~ao L ogica ...sendin/Cursos/PL/2S2019/aula30.pdf · 5 S~ao cavaleiros ou cafajestes 6 Cavaleiro sempre fala a verdade 7 Cafajestes sempre mentem

PL-30

Ivan Sendin

Exercicios

MasterMind

ExpressoesBooleanas

Tour do Cavaleiro A diz: ”Eu sou cafajeste OU B e cavaleiro”

Page 22: PL-30 Exercicios MasterMind Programa˘c~ao L ogica ...sendin/Cursos/PL/2S2019/aula30.pdf · 5 S~ao cavaleiros ou cafajestes 6 Cavaleiro sempre fala a verdade 7 Cafajestes sempre mentem

PL-30

Ivan Sendin

Exercicios

MasterMind

ExpressoesBooleanas

Tour do Cavaleiro

A diz: ”Eu sou cafajeste OU B e cavaleiro”

A=0

B=1

Page 23: PL-30 Exercicios MasterMind Programa˘c~ao L ogica ...sendin/Cursos/PL/2S2019/aula30.pdf · 5 S~ao cavaleiros ou cafajestes 6 Cavaleiro sempre fala a verdade 7 Cafajestes sempre mentem

PL-30

Ivan Sendin

Exercicios

MasterMind

ExpressoesBooleanas

Tour do CavaleiroA diz: ”Eu sou cafajeste OU B e cavaleiro”

˜A + B

Page 24: PL-30 Exercicios MasterMind Programa˘c~ao L ogica ...sendin/Cursos/PL/2S2019/aula30.pdf · 5 S~ao cavaleiros ou cafajestes 6 Cavaleiro sempre fala a verdade 7 Cafajestes sempre mentem

PL-30

Ivan Sendin

Exercicios

MasterMind

ExpressoesBooleanas

Tour do Cavaleiro

:- use_module(library(clpb)).

?- sat( ~A + B),labeling([A,B]).

A=B,B=0

A=0,B=1

A=B,B=1

Page 25: PL-30 Exercicios MasterMind Programa˘c~ao L ogica ...sendin/Cursos/PL/2S2019/aula30.pdf · 5 S~ao cavaleiros ou cafajestes 6 Cavaleiro sempre fala a verdade 7 Cafajestes sempre mentem

PL-30

Ivan Sendin

Exercicios

MasterMind

ExpressoesBooleanas

Tour do Cavaleiro

:- use_module(library(clpb)).

?- sat( ~A + B),labeling([A,B]).

A=B,B=0

A=0,B=1

A=B,B=1

A frase sera verdadeira se :

A=B, ou

A=0 e B=1

Se A for Verdadeiro, queremos a frase verdadeira, se A for falso, queremos afrase falsa...

Page 26: PL-30 Exercicios MasterMind Programa˘c~ao L ogica ...sendin/Cursos/PL/2S2019/aula30.pdf · 5 S~ao cavaleiros ou cafajestes 6 Cavaleiro sempre fala a verdade 7 Cafajestes sempre mentem

PL-30

Ivan Sendin

Exercicios

MasterMind

ExpressoesBooleanas

Tour do Cavaleiro

:- use_module(library(clpb)).

?- sat( A=:= ~A + B),labeling([A,B]).

A=B,B=1

Page 27: PL-30 Exercicios MasterMind Programa˘c~ao L ogica ...sendin/Cursos/PL/2S2019/aula30.pdf · 5 S~ao cavaleiros ou cafajestes 6 Cavaleiro sempre fala a verdade 7 Cafajestes sempre mentem

PL-30

Ivan Sendin

Exercicios

MasterMind

ExpressoesBooleanas

Tour do Cavaleiro

Lab

A diz: ”Eu sou um cafajeste, B nao e”

A diz: ”Ao menos um de nos ecafajeste”(considerando A e B)

A diz ”Todos somos cafajestes”; B diz ”Exatamente1 de nos e cavaleiro”, com A,B e C

A diz: ”B e cafajeste”, B diz:”A e C sao do mesmotipo”. Determine C

Page 28: PL-30 Exercicios MasterMind Programa˘c~ao L ogica ...sendin/Cursos/PL/2S2019/aula30.pdf · 5 S~ao cavaleiros ou cafajestes 6 Cavaleiro sempre fala a verdade 7 Cafajestes sempre mentem

PL-30

Ivan Sendin

Exercicios

MasterMind

ExpressoesBooleanas

Tour do Cavaleiro

Qual esta correta?

1 Todas as abaixo

2 Nenhuma abaixo

3 Todas acima

4 Ao menos uma acima

5 Nenhuma acima

6 Nenhuma acima

Page 29: PL-30 Exercicios MasterMind Programa˘c~ao L ogica ...sendin/Cursos/PL/2S2019/aula30.pdf · 5 S~ao cavaleiros ou cafajestes 6 Cavaleiro sempre fala a verdade 7 Cafajestes sempre mentem

PL-30

Ivan Sendin

Exercicios

MasterMind

ExpressoesBooleanas

Tour do Cavaleiroexercicio([F1,F2,F3,F4,F5,F6]) :-

sat(F1 =:= todas abaixo )...

Page 30: PL-30 Exercicios MasterMind Programa˘c~ao L ogica ...sendin/Cursos/PL/2S2019/aula30.pdf · 5 S~ao cavaleiros ou cafajestes 6 Cavaleiro sempre fala a verdade 7 Cafajestes sempre mentem

PL-30

Ivan Sendin

Exercicios

MasterMind

ExpressoesBooleanas

Tour do Cavaleiro

exercicio([F1,F2,F3,F4,F5,F6]) :-

sat(F1 =:= F2*F3*F4*F5*F6),

...

Page 31: PL-30 Exercicios MasterMind Programa˘c~ao L ogica ...sendin/Cursos/PL/2S2019/aula30.pdf · 5 S~ao cavaleiros ou cafajestes 6 Cavaleiro sempre fala a verdade 7 Cafajestes sempre mentem

PL-30

Ivan Sendin

Exercicios

MasterMind

ExpressoesBooleanas

Tour do Cavaleiro

exercicio([F1,F2,F3,F4,F5,F6]) :-

sat(F1 =:= F2*F3*F4*F5*F6),

sat(F2 Nehuma baixo)...

Page 32: PL-30 Exercicios MasterMind Programa˘c~ao L ogica ...sendin/Cursos/PL/2S2019/aula30.pdf · 5 S~ao cavaleiros ou cafajestes 6 Cavaleiro sempre fala a verdade 7 Cafajestes sempre mentem

PL-30

Ivan Sendin

Exercicios

MasterMind

ExpressoesBooleanas

Tour do Cavaleiro

exercicio([F1,F2,F3,F4,F5,F6]) :-

sat(F1 =:= F2*F3*F4*F5*F6),

sat(F2 =:= ~(F3+F4+F5+F6))...

Page 33: PL-30 Exercicios MasterMind Programa˘c~ao L ogica ...sendin/Cursos/PL/2S2019/aula30.pdf · 5 S~ao cavaleiros ou cafajestes 6 Cavaleiro sempre fala a verdade 7 Cafajestes sempre mentem

PL-30

Ivan Sendin

Exercicios

MasterMind

ExpressoesBooleanas

Tour do Cavaleiro Terminar no lab...

Page 34: PL-30 Exercicios MasterMind Programa˘c~ao L ogica ...sendin/Cursos/PL/2S2019/aula30.pdf · 5 S~ao cavaleiros ou cafajestes 6 Cavaleiro sempre fala a verdade 7 Cafajestes sempre mentem

PL-30

Ivan Sendin

Exercicios

MasterMind

ExpressoesBooleanas

Tour do Cavaleiro tour([],R) :- tour([[1,1]],R),!.

tour([H|T],[H|T]) :- length([H|T],L), L is 64,!. %,c(H,[1,1]),!.

tour([H|T],R) :- c(H,N),\+member(N,T),tour([N,H|T],R).

Page 35: PL-30 Exercicios MasterMind Programa˘c~ao L ogica ...sendin/Cursos/PL/2S2019/aula30.pdf · 5 S~ao cavaleiros ou cafajestes 6 Cavaleiro sempre fala a verdade 7 Cafajestes sempre mentem

PL-30

Ivan Sendin

Exercicios

MasterMind

ExpressoesBooleanas

Tour do Cavaleiro

Demora muito....

... ainda rodando!

nao sei se tem bug

8× 8, . . . , 16× 16, ...

”...premature optimization is the root of allevil...- Donald Knuth

xkcd 1691

Page 36: PL-30 Exercicios MasterMind Programa˘c~ao L ogica ...sendin/Cursos/PL/2S2019/aula30.pdf · 5 S~ao cavaleiros ou cafajestes 6 Cavaleiro sempre fala a verdade 7 Cafajestes sempre mentem

PL-30

Ivan Sendin

Exercicios

MasterMind

ExpressoesBooleanas

Tour do Cavaleiro

Page 37: PL-30 Exercicios MasterMind Programa˘c~ao L ogica ...sendin/Cursos/PL/2S2019/aula30.pdf · 5 S~ao cavaleiros ou cafajestes 6 Cavaleiro sempre fala a verdade 7 Cafajestes sempre mentem

PL-30

Ivan Sendin

Exercicios

MasterMind

ExpressoesBooleanas

Tour do Cavaleiro

Page 38: PL-30 Exercicios MasterMind Programa˘c~ao L ogica ...sendin/Cursos/PL/2S2019/aula30.pdf · 5 S~ao cavaleiros ou cafajestes 6 Cavaleiro sempre fala a verdade 7 Cafajestes sempre mentem

PL-30

Ivan Sendin

Exercicios

MasterMind

ExpressoesBooleanas

Tour do Cavaleiro

Page 39: PL-30 Exercicios MasterMind Programa˘c~ao L ogica ...sendin/Cursos/PL/2S2019/aula30.pdf · 5 S~ao cavaleiros ou cafajestes 6 Cavaleiro sempre fala a verdade 7 Cafajestes sempre mentem

PL-30

Ivan Sendin

Exercicios

MasterMind

ExpressoesBooleanas

Tour do Cavaleiro

Page 40: PL-30 Exercicios MasterMind Programa˘c~ao L ogica ...sendin/Cursos/PL/2S2019/aula30.pdf · 5 S~ao cavaleiros ou cafajestes 6 Cavaleiro sempre fala a verdade 7 Cafajestes sempre mentem

PL-30

Ivan Sendin

Exercicios

MasterMind

ExpressoesBooleanas

Tour do Cavaleiro

Page 41: PL-30 Exercicios MasterMind Programa˘c~ao L ogica ...sendin/Cursos/PL/2S2019/aula30.pdf · 5 S~ao cavaleiros ou cafajestes 6 Cavaleiro sempre fala a verdade 7 Cafajestes sempre mentem

PL-30

Ivan Sendin

Exercicios

MasterMind

ExpressoesBooleanas

Tour do Cavaleiro

Page 42: PL-30 Exercicios MasterMind Programa˘c~ao L ogica ...sendin/Cursos/PL/2S2019/aula30.pdf · 5 S~ao cavaleiros ou cafajestes 6 Cavaleiro sempre fala a verdade 7 Cafajestes sempre mentem

PL-30

Ivan Sendin

Exercicios

MasterMind

ExpressoesBooleanas

Tour do Cavaleiro

Page 43: PL-30 Exercicios MasterMind Programa˘c~ao L ogica ...sendin/Cursos/PL/2S2019/aula30.pdf · 5 S~ao cavaleiros ou cafajestes 6 Cavaleiro sempre fala a verdade 7 Cafajestes sempre mentem

PL-30

Ivan Sendin

Exercicios

MasterMind

ExpressoesBooleanas

Tour do Cavaleiro

Para os interessados

50% da P3 (= media simples entre a nota dotrabalho e P3)

Em duplas (ou sozinho...)

SEM COPIA!!!

Apresentar os resultados (tour, tempo,...)

Duvidas ”tecnicas”no horario deatendimento/email !!!

ATENCAO: RESOLVER para um tabuleiro10x10!!!!

(De fato... um bom programador resolve n × n)