segunda-feira, 25 de abril de 2011

Prolog 2

Esse exemplo é do Coquetel Desafio Super #194 (Jan. 2011):

1. O(A) funcionário(a) da limpeza é voluntário na biblioteca.
2. Tiago trabalha como voluntário um dia antes na semana que o(a) voluntário(a) do centro juvenil, mas dois dias depois da pessoa de sobrenome Toledo.
3. Jane é voluntária na creche e faz esse trabalho um dia depois da pessoa de sobrenome Fontes, mas dois dias antes do motorista.
4. A pessoa de sobrenome Branco faz um trabalho voluntário no centro comunitário um dia antes de Pablo, mas dois dias depois da pessoa cuja atividade é contar histórias.
5. Catarina Martins faz um trabalho voluntário dois dias antes na semana que a pessoa que trabalha no setor de esportes. Roberval não é a pessoa que ajuda voluntariamente o asilo.

Código prolog:

um_antes(A, B, [A | [B | _]]).
um_antes(A, B, [_ | X]) :- um_antes(A, B, X).

dois_antes(A, B, X) :-
  um_antes(A, C, X),
  um_antes(C, B, X).

solve(Dias) :-
  Dias = [Segunda, Terca, Quarta, Quinta, Sexta],
  member(dia(_, _, limpeza, biblioteca), Dias),
  um_antes(dia(tiago, _, _, _), dia(_, _, _, juvenil), Dias),
  dois_antes(dia(_, toledo, _, _), dia(tiago, _, _, _), Dias),
  um_antes(dia(_, fontes, _, _), dia(jane, _, _, creche), Dias),
  dois_antes(dia(jane, _, _, _), dia(_, _, motorista, _), Dias),
  um_antes(dia(_, branco, _, comunitario), 

           dia(pablo, _, _, _), Dias),
  dois_antes(dia(_, _, contar_historias, _), 

             dia(_, branco, _, _), Dias),
  dois_antes(dia(catarina, martins, _, _),

             dia(_, _, esportes, _), Dias),
  \+member(dia(roberval, _, _, asilo), Dias),
  member(dia(roberval, _, _, _), Dias),
  member(dia(_, costa, _, _), Dias),
  member(dia(_, _, _, asilo), Dias),
  member(dia(_, _, coordenacao, _), Dias).


Solução:


?- solve(K).

K = [dia(roberval, fontes, limpeza, biblioteca), dia(jane, toledo, contar_historias, creche), dia(catarina, martins, coordenacao, asilo), dia(tiago, branco, motorista, comunitario), dia(pablo, costa, esportes, juvenil)] ;




Nenhum comentário:

Postar um comentário