Retroceder   Foros del Web > Temas generales de computación > Programación

Respuesta
 
Herramientas Desplegado
Antiguo 02-may-2008, 08:38   #1 (permalink)
nandor ha deshabilitado el karma
 
Fecha de Ingreso: mayo-2008
Mensajes: 1
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.
nandor está desconectado   Responder Citando
Antiguo 15-may-2008, 10:56   #2 (permalink)
doomamer ha deshabilitado el karma
 
Fecha de Ingreso: mayo-2008
Mensajes: 1
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
doomamer está desconectado   Responder Citando
Antiguo 05-jul-2008, 08:33   #3 (permalink)
ealmeida ha deshabilitado el karma
 
Fecha de Ingreso: julio-2008
Mensajes: 1
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 ealmeida1225@gmail.com.

%% 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).
ealmeida está desconectado   Responder Citando
Respuesta
Calificación: Calificación de Tema: 2 votos, 4,50 de promedio.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 14:57.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93