pl-30 exercicios mastermind programa˘c~ao l ogica ...sendin/cursos/pl/2s2019/aula30.pdf · 5 s~ao...
TRANSCRIPT
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
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!!!!!
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
PL-30
Ivan Sendin
Exercicios
MasterMind
ExpressoesBooleanas
Tour do Cavaleiro
MasterMind
Dificuldade: gerar a lista
e dificil gerar a lista via backtracking....
PL-30
Ivan Sendin
Exercicios
MasterMind
ExpressoesBooleanas
Tour do Cavaleiro
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!!
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
PL-30
Ivan Sendin
Exercicios
MasterMind
ExpressoesBooleanas
Tour do Cavaleiro
:- use_module(library(clpb)).
?-sat(A).
A=1
PL-30
Ivan Sendin
Exercicios
MasterMind
ExpressoesBooleanas
Tour do Cavaleiro
:- use_module(library(clpb)).
?-sat(A),sat(B).
A=B, B=1.
PL-30
Ivan Sendin
Exercicios
MasterMind
ExpressoesBooleanas
Tour do Cavaleiro
:- use_module(library(clpb)).
?-sat(A*B).
A=B, B=1.
PL-30
Ivan Sendin
Exercicios
MasterMind
ExpressoesBooleanas
Tour do Cavaleiro
:- use_module(library(clpb)).
?-sat(A+B).
sat(A=\=A*B#B)
Resposta condicional.
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
PL-30
Ivan Sendin
Exercicios
MasterMind
ExpressoesBooleanas
Tour do Cavaleiro
Ou-exclusivo.
:- use_module(library(clpb)).
?- sat(A#B),labeling([A,B]).
PL-30
Ivan Sendin
Exercicios
MasterMind
ExpressoesBooleanas
Tour do Cavaleiro:- use_module(library(clpb)).
?- sat(~A*B),labeling([A,B]).
A=0,B=1
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
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
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
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...
PL-30
Ivan Sendin
Exercicios
MasterMind
ExpressoesBooleanas
Tour do Cavaleiro
Cavaleiros e Cafajestes
”Eu sou um cafajeste”
PL-30
Ivan Sendin
Exercicios
MasterMind
ExpressoesBooleanas
Tour do Cavaleiro
:- use_module(library(clpb)).
?- sat(A =:= (A=:=0)).
false
PL-30
Ivan Sendin
Exercicios
MasterMind
ExpressoesBooleanas
Tour do Cavaleiro A diz: ”Eu sou cafajeste OU B e cavaleiro”
PL-30
Ivan Sendin
Exercicios
MasterMind
ExpressoesBooleanas
Tour do Cavaleiro
A diz: ”Eu sou cafajeste OU B e cavaleiro”
A=0
B=1
PL-30
Ivan Sendin
Exercicios
MasterMind
ExpressoesBooleanas
Tour do CavaleiroA diz: ”Eu sou cafajeste OU B e cavaleiro”
˜A + B
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
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...
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
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
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
PL-30
Ivan Sendin
Exercicios
MasterMind
ExpressoesBooleanas
Tour do Cavaleiroexercicio([F1,F2,F3,F4,F5,F6]) :-
sat(F1 =:= todas abaixo )...
PL-30
Ivan Sendin
Exercicios
MasterMind
ExpressoesBooleanas
Tour do Cavaleiro
exercicio([F1,F2,F3,F4,F5,F6]) :-
sat(F1 =:= F2*F3*F4*F5*F6),
...
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)...
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))...
PL-30
Ivan Sendin
Exercicios
MasterMind
ExpressoesBooleanas
Tour do Cavaleiro Terminar no lab...
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).
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
PL-30
Ivan Sendin
Exercicios
MasterMind
ExpressoesBooleanas
Tour do Cavaleiro
PL-30
Ivan Sendin
Exercicios
MasterMind
ExpressoesBooleanas
Tour do Cavaleiro
PL-30
Ivan Sendin
Exercicios
MasterMind
ExpressoesBooleanas
Tour do Cavaleiro
PL-30
Ivan Sendin
Exercicios
MasterMind
ExpressoesBooleanas
Tour do Cavaleiro
PL-30
Ivan Sendin
Exercicios
MasterMind
ExpressoesBooleanas
Tour do Cavaleiro
PL-30
Ivan Sendin
Exercicios
MasterMind
ExpressoesBooleanas
Tour do Cavaleiro
PL-30
Ivan Sendin
Exercicios
MasterMind
ExpressoesBooleanas
Tour do Cavaleiro
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)