% RA-99: practica-02-sol.pl
% Revisi\'on de Prolog
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Ejercicio 1:
% La sem\'antica declarativa de Prolog es una herrramienta muy potente para
% problemas de manipulacion simb\'olica. Vamos a desarrollar un programa
% que nos permita derivar cualquier expresi\'on algebraica respecto de una 
% variable dada. El sistema debe incorporar todas las reglas de
% derivaci\'on usuales y devolver\'a la derivada de la expresi\'on 
% suministrada por el usuario de la forma m\'as simple posible (i.e.: 
% devolvera 4x en lugar de x+x+x+x). Para ello usaremos los predicados
% auxiliares 
%             d(Exp,Var,Deriv)
% que toma como entrada una expresi\'on algebraica Exp, la variable Var respecto
% de la cual vamos a derivar y devuelve la expresi\'on algebraica Deriv que
% representa la derivada.
% Ademas definiremos el predicado auxiliar
%             simp(Deriv,Deriv_simp)
% que toma como entrada una expresi\'on algebraica Deriv y devuelve Dervi_simp,
% que es la misma expresi\'on simplificada.
% El predicado principal ser\'a
%                         dv
% que pedira al usuario una expresi\'on algebraica o la palabra stop
% (1) Si el usuario introduce stop, el programa para
% (2) Si el usuario introduce una expresi\'on algebraica, le preguntamos
%     respecto de qu\'e variable queremos derivar. La respuesta debe ser
%     " La derivada de ... respecto de ... es ..."
%     y volvemos a llama al predicado dv.  
%
%  Ejemplo de uso:
%
%    ?- dv.
%        Escriba una expresion algebraica o stop 
%        |: log(x) + 2*x.
%        Respecto de la variable: x.
%        La derivada de log(x) + 2 * x respecto de x es 1 / x + 2
%        Escriba una expresion algebraica o stop 
%        |: sin(x ^ 2 + x ^ 2).
%        Respecto de la variable: x.
%        La derivada de sin(x ^ 2 + x ^ 2) respecto de x es 
%        4 * x * cos(x ^ 2 + x ^ 2)
%        Escriba una expresion algebraica o stop 
%        |: stop.
%      Yes
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Ejercicio 2:
% Un cuadrado magico 3 por 3 es un cuadrado con formado por tres filas y
% tres columnas
%
%                +---+---+---+
%                | A | B | C |
%                +---+---+---+      
%                | D | E | F |
%                +---+---+---+
%                | G | H | I |
%                +---+---+---+
%
% tal que en cada casilla haya un n\'umero del uno al nueve y que adem\`as
% cumple la propiedad de que la suma de cada fila, cada columna y cada 
% diagonal suma 15.
%   (a) Definir un predicado
%          calcula_cuadrado_magico(S)
%       tal que S sea una soluci\'on del cuadrado magico.
%     (a.1) Usando "permutacion" (calcula_cuadrado_1).
%     (a.2) Si usar "permutacion" (calcula_cuadrado_2).
%   (b) Usar el predicado "time" para comparar cuadrado_magico_1 y
%       cuadrado_magico_2
%   (c) Definir "pinta_cuadrado(S)" que devuelva el cuadrado 
%       [2,7,6,9,5,1,4,3,8] con el formato
% 
%               +---+---+---+
%               | 2 | 7 | 6 |
%               +---+---+---+
%               | 9 | 5 | 1 |
%               +---+---+---+
%               | 4 | 3 | 8 |
%               +---+---+---+
%   (d) Definir el predicado "archiva_cuadrado" que cree el
%       fichero "cuadrado.sol" y escriba en el todos los posibles 
%       cuadrados magicos con el formato anterior.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Ejercicio 3:
% Tenemos que distribuir N trabajos entre N m\'aquinas. Cualquier m\'aquina
% puede hacer cualquier trabajo, pero los costes de producci\Žon son
% diferentes. Nuestro objetivo es encontrar una distribucion de los
% trabajos de forma que le coste sea m\'inimo.
%   COSTES:
%
%                                   TRABAJOS
%
%                              1     2     3     4
%                           +-----+-----+-----+-----+
%                        1  |  6  |  5  |  3  |  6  |
%                           +-----+-----+-----+-----+
%                        2  |  5  |  6  |  8  | 12  |
%           MAQUINAS        +-----+-----+-----+-----+
%                        3  |  8  |  6  |  8  |  9  |
%                           +-----+-----+-----+-----+
%                        4  |  3  |  6  |  5  |  8  |
%                           +-----+-----+-----+-----+
%
% Ejemplo de uso:
%         ?- asigna_trabajo(1,Trabajos_Asignados,Coste).
%         Trabajos_Asignados = [[1, 1]]
%         Coste = 6 ;
%         No
%         ?- asigna_trabajo(2,Trabajos_Asignados,Coste).
%         Trabajos_Asignados = [[1, 2], [2, 1]]
%         Coste = 10 
%         Yes
%         ?- asigna_trabajo(3,Trabajos_Asignados,Coste).
%         Trabajos_Asignados = [[1, 3], [2, 1], [3, 2]]
%         Coste = 14 
%         Yes
%         ?- asigna_trabajo(4,Trabajos_Asignados,Coste).
%         Trabajos_Asignados = [[1, 3], [2, 2], [3, 4], [4, 1]]
%         Coste = 21 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Ejercicio 4:
%  Tu nombre clave es Brosio, Am Brosio y a partir de ahora eres investigador 
%  privado. Anoche apareci\'o el director del Banco Pepe en su apartamento
%  con un picahielos clavado en el coraz\Žon. La polic\'ia anda despistada y
%  tu trabajo consiste en descubrir el m\'ovil, el objeto que implica 
%  a cada sospechoso, que hizo esa noche cada sospechoso que le relaciona
%  con la v\'ictima y por supuesto, qui\Žen cometi\'o el asesinato. 
%  Los objetos encontrados que no pertenecen al desaparecido son:
%  - Un picahielos 
%  - Un paraguas
%  - Un paquete de tabaco
%  - Un peri\'odico
%  - Una carta con amenazas
%    OBJETOS: picahielos,paraguas,tabaco,periodico,carta
%  Adem/Žas varios testigos afirman que:
%  - Alguien hab\'ia discutido con \'el 
%  - Alguien olvid\Žo algo en el apartamento de la v\'ictima
%  - Alguien lo llam\'o por tel\'efono
%  - Alguien merode\Žo por el  edificio poco despu\Žes del crimen
%  - Y por supuesto, alguien lo asesin\'o
%    ACCIONES: discusion, olvido, llamada, merodeo, asesinato
%  Los sospechosos son:
%  - Ataulfa
%  - Bernardino
%  - Ceferina
%  - Dionisia
%  - Eustaquio
%    SOSPECHOSOS: ataulfa,bernardino,ceferina,dionisia,eustaquio 
%  Cada sospechoso ten\'ia varios m\'oviles para el asesinato:
%  - Acoso
%  - Celos
%  - Despido del trabajo
%  - Ascenso profesional
%  - Odio
%    MOVILES: acoso, celos, despido, ascenso, odio
%  Otras pistas son:
%  - El paquete de tabaco es de Bernardino.
%  - Ceferina no era la autora de la carta con amenazas ni odiaba
%    a la v\'ictima.
%  - La persona que ascendio despues al puesto de director no era la
%    propietaria del picahielos. 
%  - De hecho, la mujer que odiaba a la v\'ictima era la 
%    propietaria del peri\Žodico.
%  - Quien llam\'o por tel\'efono tambi\'en escribi\'o la carta.
%  - La persona propietaria del paraguas se lo dej\'o olvidado 
%    en casa de la v\Žictima.
%  - La persona propietaria del picahielos no discut\'ia nunca. 
%  - Dionisia fue la que merode\'o por el edificio.
%  - Ceferina no es la propietaria del picahielos y no fue ascendida
%    tras el el crimen.
%  - La mujer que fue despedida no realiz\'o la llamada.
%  - Ataulfa hab\'ia sido acosada por la v\'ictima, pero ella no era
%    la propietaria del picahielos y no discuti\'o con la v\Žictima.
%  - Adem\Žas quien hab\'ia discutido con la v\Žictima, quien sali\Žo 
%    de su apartamento, quien le telefone\Žo y quien merode\Žo por el  
%    edificio poco despu\Žes del crimen, eran personas diferentes.
%  - Y cada objeto encontrado en el lugar del crimen pertenece a una
%    persona diferente.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
