% Examen de "Programación declarativa" (13 de Febrero de 2004) % Apellidos: % Nombre: %============================================================================== %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % En este examen consideramos la siguiente versión del conocido juego % del dominó: % * las fichas son triángulos equiláteros (en lugar de rectángulos), % * cada ficha contiene tres enteros no negativos distintos entre sí. % * no disponemos de fichas repetidas. % % Representaremos cada ficha por mediante una lista de tres elementos, por % ejemplo, representamos la siguiente ficha % / 6 \ % / 4 0 \ % mediante la lista [4,6,0] (o cualquier permutación de ella). % % El juego consiste en colocar el máximo número posible de fichas como se % indica a continuación: % / 6 \\ 6 7 // 7 \\ 7 2 // 2 \ % / 4 0 \\ 0 // 0 1 \\ 1 // 1 3 \ % % Representaremos dicha jugada mediante la siguiente lista de fichas: % [[4,6,0],[6,7,0],[0,1,7],[1,2,7],[1,2,3]] %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Ejercicio 1: Definir la relación fichas_equivalentes(+L1,+L2) que se % verifique si L1 y L2 son dos fichas válidas y equivalentes. Por ejemplo, % ?- fichas_equivalentes([0,3,4],[4,3,0]). % Yes % ?- fichas_equivalentes([2,2,4],[2,2,4]). % No % ?- fichas_equivalentes([1,-5,3],[3,-5,1]). % No %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Ejercicio 2: Definir la relación jugada_válida(+L) que se verifica si la % lista no vacía de fichas L representa una jugada válida del juego. Por % ejemplo, % ?- jugada_válida([[4,6,0],[6,7,0],[0,1,7],[1,2,7],[1,2,3]]). % Yes % ?- jugada_válida([[4,6,0],[6,7,0],[0,2,8]]). % No % ?- jugada_válida([[0,2,4],[0,2,5],[5,2,4],[4,2,0]]). % No %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Ejercicio 3: Definir la relación mayor_longitud(+L,?M) que se verifica si M % es la longitud mayor de una jugada válida del juego empleando las fichas del % conjunto de fichas L. Por ejemplo, % ?- mayor_longitud([[1,7,3],[2,3,4],[3,5,12],[2,3,5]],M) % M = 3 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Ejercicio 4: Definir la relación genera_fichas(+N,?L) que se verifique si L % es el conjunto de todas las fichas válidas que pueden formarse con enteros % menores que N. Por ejemplo, % ?- genera_fichas(3,L). % L = [[0,1,2]] % ?- genera_fichas(4,L). % L = [[0,1,2],[0,1,3],[0,2,3],[1,2,3]] %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Ejercicio 5: Definir la relación menor_cota(+N,?V) que se verifique si V es % el menor entero positivotal que es posible construir una jugada válida con N % fichas distintas en las que aparecen siempre enteros menores que V. Por % ejemplo, % ?- menor_cota(3,V). % V = 4 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%