UTNianos

Versión completa: [Aporte][Paradigmas de Programación] Parcial lógico resuelto
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Es de la cursada de Scarcella. En la resolución falta el punto 4 nada más.

[attachment=9149]

[attachment=9150]

Spoiler: Mostrar

% 1-
permiteEntrar(Casa, Mago):-
casa(Casa),
mago(Mago, _, _),
Casa \= slytherin.
permiteEntrar(slytherin, Mago):-
mago(Mago, Sangre, _),
Sangre \= impura.

% 2-
tieneCaracter(Mago, Casa):-
casa(Casa),
mago(Mago, _, Caracteristicas),
forall(caracteriza(Casa, C), member(C, Caracteristicas)).

% 3-
casaPosible(Mago, Casa):-
casa(Casa),
mago(Mago, _, _),
tieneCaracter(Mago, Casa),
permiteEntrar(Casa, Mago),
not(odia(Mago, Casa)).

% 5-
esMala(fueraDeCama, 50).
esMala(irA(Lugar), Puntos):- lugarProhibido(Lugar, Puntos).

esBuena(_, buenaAccion(Motivo, Puntos), Puntos).
esBuena(Mago, responder(_, Puntos, Profesor), PuntosFinales):-
alumnoFavorito(Profesor, Mago),
PuntosFinales is Puntos * 2.
esBuena(Mago, responder(_, Puntos, Profesor), PuntosFinales):-
alumnoOdiado(Profesor, Mago),
PuntosFinales is 0.
esBuena(Mago, responder(_, Puntos, Profesor), PuntosFinales):-
not(alumnoFavorito(Profesor, Mago)),
not(alumnoOdiado(Profesor, Mago)),
PuntosFinales is Puntos.

acciones(Mago, Acciones, Cantidad):-
findall(Accion, hizo(Mago, Accion), Acciones),
length(Acciones, Cantidad).

accionesMalas(Mago, Acciones, AccionesMalas, Cantidad):-
findall(Accion, (member(Accion, Acciones),
esMala(Accion, _)),
AccionesMalas),
length(AccionesMalas, Cantidad).

esBuenAlumno(Mago):-
mago(Mago, _, _),
acciones(Mago, Acciones, CantidadAcciones),
CantidadAcciones > 0,
accionesMalas(Mago, Acciones, _, CantidadAccionesMalas),
CantidadAccionesMalas < 1.

% 6-
puntosDeCasa(Casa, Total):-
casa(Casa),
esDe(Mago, Casa),
acciones(Mago, Acciones, _),
puntosMalas(Mago, Acciones, PuntosMalas),
puntosBuenas(Mago, Acciones, PuntosBuenas),
Total is PuntosBuenas - PuntosMalas.

puntosMalas(Mago, Acciones, Total):-
findall(Punto, (member(Accion, Acciones),
esMala(Accion, Punto)),
Puntos),
sumlist(Puntos, Total).

puntosBuenas(Mago, Acciones, Total):-
findall(Punto, (member(Accion, Acciones),
esBuena(Mago, Accion, Punto)),
Puntos),
sumlist(Puntos, Total).

% 7-
casaGanadora(Casa):-
puntosDeCasa(Casa, Total),
forall((puntosDeCasa(OtraCasa, OtroTotal), Casa \= OtraCasa), Total > OtroTotal).

URLs de referencia