PL-30 Exercicios MasterMind Programa˘c~ao L ogica ...sendin/Cursos/PL/2S2019/aula30.pdf · 5 S~ao...

Post on 02-Nov-2020

58 views 0 download

Transcript of PL-30 Exercicios MasterMind Programa˘c~ao L ogica ...sendin/Cursos/PL/2S2019/aula30.pdf · 5 S~ao...

PL-30

Ivan Sendin

Exercicios

MasterMind

ExpressoesBooleanas

Tour do Cavaleiro

Programacao Logica

Aula 30

Ivan Sendin

FACOM - Universidade Federal de Uberlandiasendin@ufu.br

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)