Foros del Web » Programación para mayores de 30 ;) » Programación General »

Ejercicio dificil en Prolog

Estas en el tema de Ejercicio dificil en Prolog en el foro de Programación General en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 02/05/2008, 08:38
 
Fecha de Ingreso: mayo-2008
Mensajes: 1
Antigüedad: 16 años, 6 meses
Puntos: 0
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.
  #2 (permalink)  
Antiguo 15/05/2008, 10:56
 
Fecha de Ingreso: mayo-2008
Mensajes: 1
Antigüedad: 16 años, 6 meses
Puntos: 0
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
  #3 (permalink)  
Antiguo 05/07/2008, 08:33
 
Fecha de Ingreso: julio-2008
Mensajes: 1
Antigüedad: 16 años, 4 meses
Puntos: 0
De acuerdo 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).
  #4 (permalink)  
Antiguo 21/10/2008, 21:10
 
Fecha de Ingreso: octubre-2008
Mensajes: 1
Antigüedad: 16 años, 1 mes
Puntos: 0
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
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 2 personas (incluyéndote)




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