Completá la encuesta de profesores no oficial

Donar $20 Donar $50 Donar $100 Donar mensualmente


Enviar respuesta 
 
Calificación:
  • 0 votos - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Buscar en el tema
[PdeP] Parcial Lógico 2017 - Sueños - RESUELTO
Autor Mensaje
Apellidocomplicado Sin conexión
Militante
Sin estado :(
***

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 73
Agradecimientos dados: 22
Agradecimientos: 22 en 11 posts
Registro en: Sep 2015
Mensaje: #1
[PdeP] Parcial Lógico 2017 - Sueños - RESUELTO Parciales Paradigmas de Programación
Consigna:
Un consorcio internacional nos pidió que relevemos su negocio, que consiste en hacer el seguimiento de los sueños que tiene cada una de las personas y los personajes que están destinados a cumplir esos sueños.

Punto 1
Queremos reflejar que
  • Gabriel cree en Campanita, el Mago de Oz y Cavenaghi
  • Juan cree en el Conejo de Pascua
  • Macarena cree en los Reyes Magos, el Mago Capria y Campanita
  • Diego no cree en nadie
Conocemos tres tipos de sueño
  • ser un cantante y vender una cierta cantidad de “discos” (≅ bajadas)
  • ser un futbolista y jugar en algún equipo
  • ganar la lotería apostando una serie de números
Queremos reflejar entonces que
  • Gabriel quiere ganar la lotería apostando al 5 y al 9, y también quiere ser un futbolista de Arsenal
  • Juan quiere ser un cantante que venda 100.000 “discos”
  • Macarena no quiere ganar la lotería, sí ser cantante estilo “Eruca Sativa” y vender 10.000 discos
a. Generar la base de conocimientos inicial
b. Indicar qué conceptos entraron en juego para cada punto.

Punto 2
Queremos saber si una persona es ambiciosa, esto ocurre cuando la suma de dificultades de los sueños es mayor a 20. La dificultad de cada sueño se calcula como
  • 6 para ser un cantante que vende más de 500.000 ó 4 en caso contrario
  • ganar la lotería implica una dificultad de 10 * la cantidad de los números apostados
  • lograr ser un futbolista tiene una dificultad de 3 en equipo chico o 16 en caso contrario. Arsenal y Aldosivi son equipos chicos.
Puede agregar los predicados que sean necesarios. El predicado debe ser inversible para todos sus argumentos.
Gabriel es ambicioso, porque quiere ganar a la lotería con 2 números (20 puntos de dificultad) y quiere ser futbolista de Arsenal (3 puntos) = 23 que es mayor a 20. En cambio Juan y Macarena tienen 4 puntos de dificultad (cantantes con menos de 500.000 discos)

Punto 3
Queremos saber si un personaje tiene química con una persona. Esto se da si la persona cree en el personaje y...
  • para Campanita, la persona debe tener al menos un sueño de dificultad menor a 5.
  • para el resto,
    • todos los sueños deben ser puros (ser futbolista o cantante de menos de 200.000 discos)
    • y la persona no debe ser ambiciosa
No puede utilizar findall en este punto.
El predicado debe ser inversible para todos sus argumentos.
Campanita tiene química con Gabriel (porque tiene como sueño ser futbolista de Arsenal, que es un sueño de dificultad 3 - menor a 5), y los Reyes Magos, el Mago Capria y Campanita tienen química con Macarena porque no es ambiciosa.

Punto 4
Sabemos que
  • Campanita es amiga de los Reyes Magos y del Conejo de Pascua
  • el Conejo de Pascua es amigo de Cavenaghi, entre otras amistades
Necesitamos definir si un personaje puede alegrar a una persona, esto ocurre
  • si una persona tiene algún sueño
  • el personaje tiene química con la persona y...
    • el personaje no está enfermo
    • o algún personaje de backup no está enfermo. Un personaje de backup es un amigo directo o indirecto del personaje principal
Debe evitar repetición de lógica.
El predicado debe ser totalmente inversible.
Debe considerar cualquier nivel de amistad posible (la solución debe ser general).
Suponiendo que Campanita, los Reyes Magos y el Conejo de Pascua están enfermos,
  • el Mago Capria alegra a Macarena, ya que tiene química con ella y no está enfermo
  • Campanita alegra a Macarena; aunque está enferma es amiga del Conejo de Pascua, que aunque está enfermo es amigo de Cavenaghi que no está enfermo.

Resolución:
Spoiler: Mostrar


%1) BASE DE CONOCIMIENTO
%creeEn(Persona, Personaje)
creeEn(gabriel, campanita).
creeEn(gabriel, magoDeOz).
creeEn(gabriel, cavenaghi).
creeEn(juan, conejoDePascua).
creeEn(macarena, reyesMagos).
creeEn(macarena, magoCapria).
creeEn(macarena, campanita).

%suenio(Persona, Suenio)
suenio(gabriel, loteria([5,9])).
suenio(gabriel, futbolista(arsenal)).
suenio(juan, cantante(100000)).
suenio(macarena, cantante(10000)).

%amigo(Personaje1, Personaje2)
amigo(campanita, reyesMagos).
amigo(campanita, conejoDePascua).
amigo(conejoDePascua, cavenaghi).

%2) Ambicioso
ambicioso(Persona):- persona(Persona), cumpleCondicionAmbicioso(Persona).
cumpleCondicionAmbicioso(Persona):- dificultadDeTodosLosSueniosDeAlguien(Persona, ListaSuenios), sumlist(ListaSuenios, Sumatoria), Sumatoria > 20.
dificultadDeTodosLosSueniosDeAlguien(Persona, Lista):- findall(DificultadSuenio, (suenio(Persona, Suenio), dificultad(Suenio, DificultadSuenio)), Lista).

persona(Persona):- suenio(Persona, _).
persona(Persona):- creeEn(Persona, _).

%dificultad(suenio, valor)
dificultad(cantante(Discos), 6):- Discos > 500000.
dificultad(cantante(Discos), 4):- Discos =< 500000.
dificultad(loteria(ListaNros), Valor):- length(ListaNros, CantNros), Valor is (10 * CantNros).
dificultad(futbolista(Equipo), 3):- equipoChico(Equipo).
dificultad(futbolista(Equipo), 16):- not(equipoChico(Equipo)).

equipoChico(arsenal).
equipoChico(aldosivi).

%3) tieneQuimica(Personaje, Persona)
tieneQuimica(Persona, Personaje):- persona(Persona), personaje(Personaje), creeEn(Persona, Personaje), condicionQuimica(Persona, Personaje).

personaje(Personaje):- creeEn(_, Personaje).

condicionQuimica(Persona, campanita):- not(forall(suenio(Persona, Suenio), (dificultad(Suenio, DificultadSuenio), DificultadSuenio > 5))).
condicionQuimica(Persona, _):- not(ambicioso(Persona)), forall(suenio(Persona, Suenio), suenioPuro(Suenio)).

suenioPuro(futbolista(_)).
suenioPuro(cantante(Discos)):- Discos < 200000.

%4) puedeAlegrar(Personaje, Persona)
puedeAlegrar(Personaje, Persona):- persona(Persona), personaje(Personaje), personaTieneSuenios(Persona), tieneQuimica(Persona, Personaje), cumpleCondicionAlegrar(Personaje, Persona).

personaTieneSuenios(Persona):- suenio(Persona, _).

cumpleCondicionAlegrar(Personaje, _):- not(enfermo(Personaje)).
cumpleCondicionAlegrar(Personaje, _):- enfermo(Personaje), sonAmigos(Personaje, PersonajeBackup), not(enfermo(PersonajeBackup)).

%enfermo(Personaje)
enfermo(campanita).
enfermo(reyesMagos).
enfermo(conejoDePascua).

%sonAmigos(Personaje1, Personaje2)
sonAmigos(Personaje1, Personaje2):- amigo(Personaje1, Personaje2).
sonAmigos(Personaje1, Personaje2):- amigo(Personaje1, PersonajeIntermedio), amigo(PersonajeIntermedio, Personaje2), PersonajeIntermedio \= Personaje2, PersonajeIntermedio \= Personaje1.

:- begin_tests( suenios ).

% Punto 1 - base de conocimiento
test( diegoNoCreeEnNadie , nondet ):- not(creeEn(diego, _)).

% Punto 2 - persona ambiciosa
test( gabrielEsAmbicioso , nondet ):- ambicioso(gabriel).

test( juanNoEsAmbicioso , nondet ):- not(ambicioso(juan)).

test( macarenaNoEsAmbiciosa , nondet ):- not(ambicioso(macarena)).

% Punto 3 - tieneQuimica
test( campanitaTieneQuimicaConGabriel , nondet):- tieneQuimica(gabriel, campanita).

test( reyesMagosMagoCapriaYCampanitaTienenQuimicaConMacarena , set( Personajes == [ reyesMagos, magoCapria, campanita ])):- tieneQuimica(macarena, Personajes ).

% Punto 4 - puedeAlegrar
test( elMagroCapriaAlegraAMacarena, nondet):- puedeAlegrar(magoCapria, macarena).

test( campanitaAlegraAMacarena, nondet):- puedeAlegrar(campanita, macarena).

:- end_tests( suenios ).


(Este mensaje fue modificado por última vez en: 09-12-2018 12:34 por Apellidocomplicado.)
09-12-2018 12:28
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Buscar en el tema
Enviar respuesta 




Usuario(s) navegando en este tema: 1 invitado(s)



    This forum uses Lukasz Tkacz MyBB addons.