Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Programación General (http://www.forosdelweb.com/f14/)
-   -   Ejercicio dificil en Prolog (http://www.forosdelweb.com/f14/ejercicio-dificil-prolog-582225/)

nandor 02/05/2008 08:38

Ejercicio dificil en Prolog
 
Tenemos 4 regalos (coche, casa, viaje, barco) a repartir entre 6 personas (Pepe, Juan, Rafael, Ana, Concha, Eva). Entre los 6, hay parejas que son incompatibles y nunca aceptarían tener el mismo regalo. La lista de parejas incompatibles es la siguiente:

v Pepe es incompatible con las otras 5 personas

v Juan es incompatible con Rafael, Ana y Concha

v Rafael es incompatible con Concha y Eva

v Ana es incompatible con Concha

v Concha es incompatible con Eva.

Escribir un programa PROLOG y el objetivo adecuado para obtener las asignaciones de regalos aceptables por las 6 personas.

doomamer 15/05/2008 10:56

Re: Ejercicio dificil en Prolog
 
Buscando me encontre un pdf que trata sobre ese tema, Programacion Logica basada en restriciones y dan una solucion a ese ejercicio es la siguiente

?-use_module(library(fd)).
asigregalos(Lista):-
Lista = [Pepe,Juan,Rafael,Ana,Concha,Eva],
Lista :: [coche,casa,viaje,barco],
Pepe ## Juan, Pepe ## Rafael, Pepe ## Ana, Pepe ## Concha, Pepe ## Eva,
Juan ## Rafael, Juan ## Ana, Juan ## Concha,
Rafael ## Concha, Rafael ## Eva,
Ana ## Concha,
Concha ## Eva,
labeling(Lista).
labeling([]).
labeling([X|Y]):-
indomain(X),
labeling(Y).

pero esta un poco ambiguo y no entiendo bien lo que significa, si te encuentras una solucion mejor escribeme

ealmeida 05/07/2008 08:33

Respuesta: Ejercicio dificil en Prolog
 
Mira ya lo programé y aqui te va el código, pégalo íntegro en un nuevo archivo *.pl, compila y listo, n o utilize nada del lenguage sái que si quieres puedes hasta reducir más el código para correrlo solo invoca: asignaciondeRegalos(X) y listo, espero que te sea de provecho, si encuentras por ahí alguna otra respuésta más óptima me la mandas por favor mi email es [email protected].

%% Autor: Enrique Almeida Maldonado


incompatibles(pepe,[juan, rafael, ana, concha, eva]).
incompatibles(juan,[pepe, rafael, ana, concha]).
incompatibles(rafael,[pepe, juan, concha, eva]).
incompatibles(ana,[pepe, juan, concha]).
incompatibles(concha,[pepe, juan, rafael, ana, eva]).
incompatibles(eva,[pepe, rafael, concha]).
regalos([coche, casa, viaje, barco]).
personas([eva, juan, concha, ana, pepe, rafael]).

asignaciondeRegalos(Asignaciones):- personas(ListaPersonas), regalos(ListaRegalos), asignacionPersonas(ListaPersonas,ListaRegalos,Asig naciones), largo(Asignaciones,Largo), Largo ==6 .

asignacionPersonas([],_,[]). % Acá recursivamente comienzo la asignación de los regalos y la comprobación de compatibilidad
asignacionPersonas([Primero|Restante],Regalos,Listado):- asignacionPersonas(Restante,Regalos,Prov),asignaci onRegalos(Primero,Regalos,Prov,Listado).
asignacionRegalos(_,[],Provicional,Provicional).
asignacionRegalos(Persona,[PR|_],Provicional,[[Persona,PR]|Provicional]):-validacionRegalos(Persona,PR,Provicional).
asignacionRegalos(Persona,[_|Regalos],Provicional,Restante):-asignacionRegalos(Persona,Regalos,Provicional,Rest ante).

validacionRegalos(_,Regalo,Lista):- not(miembro([_,Regalo],Lista)), !.
validacionRegalos(Persona,Regalo,Lista):- listadoCompatible(Lista,Regalo,Persona), cont(Regalo,Lista,Veces), Veces<2 .

listadoCompatible(Lista,Regalo,Persona):- miembro([X,Regalo],Lista),not(incompatible(Persona,X)).
incompatible(Persona,X):- incompatibles(Persona,Lista), miembro(X,Lista).

largo([],0).
largo([_|Y],R):- largo(Y,R1), R is R1+1.
miembro(X,[X|_]).
miembro(X,[_|L]):- miembro(X,L).

cont(_,[],0).
cont(X,[[_,Z]|Y],R):- X==Z, cont(X,Y,R1), R is R1+1, ! .
cont(X,[_|Y],R):- cont(X,Y,R).

jxguevaraj 21/10/2008 21:10

Ejercicio dificil en Prolog
 
Hola me pueden ayudar con este problema en prolog:
Toda persona tiene diferentes gustos, cuando un hombre o una mujer descubra que de su lista de gustos comparten al menos uno, puede ser una pareja ideal

No lo puedo hacer porfa alguien que me ayude


La zona horaria es GMT -6. Ahora son las 22:15.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.