Jump to content

Teste de QI


Ac

Recommended Posts

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)).
Link to comment
Share on other sites

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).
Link to comment
Share on other sites

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  😄

Link to comment
Share on other sites

  • 9 years later...

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.