Water Jug

 

Descrição do Problema

Código Fonte

Casos de Teste

 

 

Descrição do Problema

Há dois jarros d'água com as respectivas capacidades: 1º 3 litros e o 2º 4 litros. O propósito do problema é que ocorra uma situação final de que o jarro cuja capacidade é de 4 litros fique com apenas 2 litros. Assim não se tem atenção sobre o jarro de capacidade de 3 litros, podendo o mesmo possuir qualquer situação final (vazio ou com qualquer quantidade de litros). Assim foram identificados ocorrências de operações de encher, esvaziar e mover. Um ponto a observar é que a movimentação exige o cuidado de não ultrapassar a capacidade dos respectivos jarros

 

Código Fonte

 %----------- Buscas ---------------------------------------------

 

Neste ponto se localiza as buscas de Largura e Profundidade cuja descrição

pode ser vista acessando sua página respectiva através da página principal.

Dessa forma é facilitada a visualização do trecho específico referente ao problema.

 

% ---------- Representação de Estados para o Problema ----------

 

% Estado Inicial

estado_inicial([0,0]).

% Estado Final

[_,2] e_a_meta.

 

% Operações possíveis/permitidas para mudanças de estado.

 

operacao(encher_A) transforma [A,B] em [3,B] :- A < 3.

operacao(encher_B) transforma [A,B] em [A,4] :- B < 4.

 

operacao(esvaziar_A) transforma [A,B] em [0,B] :- A > 0.

operacao(esvaziar_B) transforma [A,B] em [A,0] :- B > 0.

 

operacao(mover_A_para_B) transforma [A,B] em [0,B1] :- A>0, B<4, B1 is A+B, B1=<4.

operacao(mover_B_para_A) transforma [A,B] em [A1,0] :- B>0, A<3, A1 is A+B, A1=<3.

 

operacao(mover_A_para_B) transforma [A,B] em [A1,4] :- B<4, A>0, A1 is A+B-4.

operacao(mover_B_para_A) transforma [A,B] em [3,B1] :- A<3, B>0, B1 is A+B-3.

 

Casos de Teste

Resolução por busca em largura

 

| ?- resolva_bl.

Estado inicial: [0,0].

 

encher_A: [3,0].

 

mover_A_para_B: [0,3].

 

encher_A: [3,3].

 

mover_A_para_B: [2,4].

 

esvaziar_B: [2,0].

 

mover_A_para_B: [0,2].

 

yes

 

Resolução por busca em profundidade

| ?-

# 0.05 seconds to consult jarros.pl [d:\users\jaque\ia\]

| ?- resolva_bp.

Estado inicial: [0,0].

 

encher_A: [3,0].

 

encher_B: [3,4].

 

esvaziar_A: [0,4].

 

mover_B_para_A: [3,1].

 

esvaziar_A: [0,1].

 

mover_B_para_A: [1,0].

 

encher_B: [1,4].

 

mover_B_para_A: [3,2].

 

yes