Jump to content
Ac

Teste de QI

Recommended Posts

Ac

achei nesta página http://rachacuca.com.br/teste-de-einstein/ o seguinte teste e decidi modular-lo em prolog mas tou meio encravado...

%Cor: 1verm 2verd 3azul 4ama 5branc
%Nacionalidade: 1ing 2din 3sue 4ale 5nor
%#Bebida: 1cha 2cafe 3cerv 4agua 5leite
%#Cigarro: 1pall 2blue 3princ 4dun 5blend
%#Animal: 1cao 2cava 3gat 4pass 5peixe

%#O Inglês vive na casa Vermelha.
%#O Sueco tem Cachorros como animais de estimação.
%#O Dinamarquês bebe Chá.
%#A casa Verde fica do lado esquerdo da casa Branca.
%#O homem que vive na casa Verde bebe Café.
%#O homem que fuma Pall Mall cria Pássaros.
%#O homem que vive na casa Amarela fuma Dunhill.
% s2    O homem que vive na casa do meio bebe Leite.
% s1    O Norueguês vive na primeira casa.
%#O homem que fuma Blends vive ao lado do que tem Gatos.
%#O homem que cria Cavalos vive ao lado do que fuma Dunhill.
%#O homem que fuma BlueMaster bebe Cerveja.
%#O Alemão fuma Prince.
% s3    O Norueguês vive ao lado da casa Azul.
%#O homem que fuma Blends é vizinho do que bebe Água.

%casa(A,B,C,D,E,F)

cor(0):-write(' desc').
nac(0):-write(' desc').
beb(0):-write(' desc').
cig(0):-write(' desc').


cor(1):-write(' vermelho').
cor(2):-write(' verde').
cor(3):-write(' azul').
cor(4):-write(' amarelo').
cor(5):-write(' branco').
nac(1):-write(' ingles').
nac(2):-write(' dinamarques').
nac(3):-write(' sueco').
nac(4):-write(' alemao').
nac(5):-write(' noruegues').
beb(1):-write(' cha').
beb(2):-write(' cafe').
beb(3):-write(' cerveja').
beb(4):-write(' agua').
beb(5):-write(' leite').
cig(1):-write(' pall').
cig(2):-write(' blue').
cig(3):-write(' princ').
cig(4):-write(' dun').
cig(5):-write(' blend').
anim(0):-write(' desc').
anim(1):-write(' cao').
anim(2):-write(' cavalo').
anim(4):-write(' gato').
anim(4):-write(' passaro').
anim(5):-write(' peixe').

escreve:-escrev2(1).
escrev2(6).
escrev2(N):-casa(N,A,B,C,D,E),write('casa '),write(N),cor(A),nac(B),beb(C),cig(D),anim(E),write('\n'),M is N+1,escrev2(M).

start:-assert(casa(1,0,0,0,0,0)),assert(casa(2,0,0,0,0,0)),assert(casa(3,0,0,0,0,0)),assert(casa(4,0,0,0,0,0)),assert(casa(5,0,0,0,0,0)).

s1:-casa(1,B,C,D,E,F),retract(casa(1,B,C,D,E,F)),assert(casa(1,B,5,D,E,F)).
s2:-casa(3,B,C,D,E,F),retract(casa(3,B,C,D,E,F)),assert(casa(3,B,C,5,E,F)).
s3:-casa(N,_,5,_,_,_),M is N+1, M > 0, casa(M,B,C,D,E,F),retract(casa(M,B,C,D,E,F)),assert(casa(M,3,C,D,E,F)).

Share this post


Link to post
Share on other sites
zecapistolas

Eu acho que no semestre passado resolvi isto nas aulas, mas já não sei do ficheiro.... Mas a dica é que tens que fazer isto com Restrições em Prolog....  🤔 Eu vou tentar encontrar o ficheiro que continha a solução....

cumps  :thumbsup:

Share this post


Link to post
Share on other sites
Ac

já consegui rolar isto tudo mas acho que algo nao me está a dar certo:

%Cor: 1verm 2verd 3azul 4ama 5branc
%Nacionalidade: 1ing 2din 3sue 4ale 5nor
%#Bebida: 1cha 2cafe 3cerv 4agua 5leite
%#Cigarro: 1pall 2blue 3princ 4dun 5blend
%#Animal: 1cao 2cava 3gat 4pass 5peixe

% s5    O Inglês vive na casa Vermelha.
%#O Sueco tem Cachorros como animais de estimação.
%#O Dinamarquês bebe Chá.
% s4    A casa Verde fica do lado esquerdo da casa Branca.
% s4    O homem que vive na casa Verde bebe Café.
% s11  O homem que fuma Pall Mall cria Pássaros.
% s7    O homem que vive na casa Amarela fuma Dunhill.
% s2    O homem que vive na casa do meio bebe Leite.
% s1    O Norueguês vive na primeira casa.
%#O homem que fuma Blends vive ao lado do que tem Gatos.
%#O homem que cria Cavalos vive ao lado do que fuma Dunhill.
% s9    O homem que fuma BlueMaster bebe Cerveja.
% s10    O Alemão fuma Prince.
% s3    O Norueguês vive ao lado da casa Azul.
% s8    O homem que fuma Blends é vizinho do que bebe Água.

%casa(A,B,C,D,E,F)

cor(0):-write('\tdesc').
nac(0):-write('\tdesc').
beb(0):-write('\tdesc').
cig(0):-write('\tdesc').


cor(1):-write('\tverme').
cor(2):-write('\tverde').
cor(3):-write('\tazul').
cor(4):-write('\tamarelo').
cor(5):-write('\tbranco').
nac(1):-write('\tingles').
nac(2):-write('\tdina').
nac(3):-write('\tsueco').
nac(4):-write('\talemao').
nac(5):-write('\tnors').
beb(1):-write('\tcha').
beb(2):-write('\tcafe').
beb(3):-write('\tcerveja').
beb(4):-write('\tagua').
beb(5):-write('\tleite').
cig(1):-write('\tpall').
cig(2):-write('\tblue').
cig(3):-write('\tprinc').
cig(4):-write('\tdun').
cig(5):-write('\tblend').
anim(0):-write('\tdesc').
anim(1):-write('\tcao').
anim(2):-write('\tcavalo').
anim(3):-write('\tgato').
anim(4):-write('\tpassaro').
anim(5):-write('\tpeixe').

escreve:-escrev2(1).
escrev2(6).
escrev2(N):-casa(N,A,B,C,D,E),write('casa '),write(N),cor(A),nac(B),beb(C),cig(D),anim(E),write('\n'),M is N+1,escrev2(M).

confirma_desocupado(A,1):-casa(A,0,_,_,_,_).
confirma_desocupado(A,2):-casa(A,_,0,_,_,_).
confirma_desocupado(A,3):-casa(A,_,_,0,_,_).
confirma_desocupado(A,4):-casa(A,_,_,_,0,_).
confirma_desocupado(A,5):-casa(A,_,_,_,_,0).

start:-assert(casa(1,0,0,0,0,0)),assert(casa(2,0,0,0,0,0)),assert(casa(3,0,0,0,0,0)),assert(casa(4,0,0,0,0,0)),assert(casa(5,0,0,0,0,0)).

cs(A,1,V):-casa(A,B1,C1,D1,E1,F1),
   retract(casa(A,_,_,_,_,_)),
   assert(casa(A,V,C1,D1,E1,F1)).
cs(A,2,V):-casa(A,B1,C1,D1,E1,F1),
   retract(casa(A,_,_,_,_,_)),
   assert(casa(A,B1,V,D1,E1,F1)).
cs(A,3,V):-casa(A,B1,C1,D1,E1,F1),
   retract(casa(A,_,_,_,_,_)),
   assert(casa(A,B1,C1,V,E1,F1)).
cs(A,4,V):-casa(A,B1,C1,D1,E1,F1),
   retract(casa(A,_,_,_,_,_)),
   assert(casa(A,B1,C1,D1,V,F1)).
cs(A,5,V):-casa(A,B1,C1,D1,E1,F1),
   retract(casa(A,_,_,_,_,_)),
   assert(casa(A,B1,C1,D1,E1,V)).

s1:-cs(1,2,5).
s2:-cs(3,3,5).
s3:-casa(N,_,5,_,_,_),M is N+1, M > 0, cs(M,1,3).
s4:-s4_2(1).
s4_2(5).
s4_2(N):-M is N+1,
   confirma_desocupado(N,1),
   confirma_desocupado(M,1),
   confirma_desocupado(N,3),
   casa(N,B,C,D,E,F),retract(casa(N,B,C,D,E,F)),assert(casa(N,2,C,2,E,F)),
   casa(M,B,C,D,E,F),retract(casa(M,B,C,D,E,F)),assert(casa(M,5,C,D,E,F)).
s4_2(N):-M is N+1, s4_2(M).

s5:-s5_2(1).
s5_2(5).
s5_2(N):-confirma_desocupado(N,1),
   confirma_desocupado(N,2),
   casa(N,B,C,D,E,F),retract(casa(N,B,C,D,E,F)),assert(casa(N,1,1,D,E,F)).
s5_2(N):-M is N+1, s5_2(M).

s6:-s6_2(1).
s6_2(5).
s6_2(N):-confirma_desocupado(N,1),
   casa(N,B,C,D,E,F),retract(casa(N,B,C,D,E,F)),assert(casa(N,4,C,D,E,F)).
s6_2(N):-M is N+1, s6_2(M).

s7:-casa(N,4,C,D,E,F),retract(casa(N,4,C,D,E,F)),assert(casa(N,4,C,D,4,F)).

s8:-s8_2(1).
s8_2(5).
s8_2(N):-M is N+1,
   confirma_desocupado(N,4),
   confirma_desocupado(M,3),
   cs(N,4,5),
   cs(M,3,4).
s8_2(N):-M is N+1, s8_2(M).

s10:-s10_2(1).
s10_2(6).
s10_2(N):-
   confirma_desocupado(N,2),
   confirma_desocupado(N,4),
   cs(N,2,4),
   cs(N,4,3).
s10_2(N):-M is N+1, s10_2(M).

s9:-s9_2(1).
s9_2(5).
s9_2(N):-
   confirma_desocupado(N,3),
   confirma_desocupado(N,4),
   cs(N,3,3),
   cs(N,4,2).
s9_2(N):-M is N+1, s9_2(M).

s11:-s11_2(1).
s11_2(6).
s11_2(N):-
   confirma_desocupado(N,4),
   confirma_desocupado(N,5),
   cs(N,4,1),
   cs(N,5,4).
s11_2(N):-M is N+1, s11_2(M).

s12:-casa(N,A,B,C,5,D),
   M is N+1,
   cs(M,5,3).

Share this post


Link to post
Share on other sites
zecapistolas

Vai por mim, investiga Restrições em ProloG.... Eu já encontrei o ficheiro que contém a solução para este problema (com apenas 40 linhas de código), só ainda não a coloquei aqui porque se calhar não queres que dê a solução imediata....

Estes eram os slides que utilizavamos nas aulas, experimentar dar uma olhadela:

[*]http://paginas.fe.up.pt/~eol/LP/0809/documents/Praticas/PLR/PLR_2004_Slides.PDF

[*]http://paginas.fe.up.pt/~eol/LP/0809/documents/Praticas/PLR/PLR_Sictsus.pdf

cumps  :D

Share this post


Link to post
Share on other sites
Denilson Jr.

Alguém já tentou criar este Teste de Einstein no python, ou tem uma ideia de como séria o código em python? 

Edited by Denilson Jr.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.