Преглед изворни кода

Puntos 10, 12 y 8 en texto plano.

Martu пре 10 година
родитељ
комит
5b91eb1350
3 измењених фајлова са 75 додато и 0 уклоњено
  1. 13 0
      textoPlano/punto 10
  2. 14 0
      textoPlano/punto 12
  3. 48 0
      textoPlano/punto 8

+ 13 - 0
textoPlano/punto 10

@@ -0,0 +1,13 @@
+10.
+problema losMasFracasados (j: JJOO, p:Pais) = result:[Atleta]{
+	//Interpretación: Devuelve los atletas del país p que no
+	//ganaron medallas en las competencias acabadas hasta ahora,
+	//ordenados desde el que en más competencias participó hasta el que que menos.
+
+	asegura noGanaronMedallas: (paraTodo x <- [ciaNumber(ranking(comp)[0]) != ciaNumber(atl) && ciaNumber(ranking(comp)[1]) != ciaNumber(atl) && ciaNumber(ranking(comp)[2]) != ciaNumber(atl) | atl <- result, comp <- todasLasCompetencias(j), finalizada(comp)]) x;
+	asegura todosDelPais: (paraTodo x <- result) nacionalidad(x) == p;
+	asegura enOrden: (paraTodo i <- [0..|result|-2]) competenciasEnLasQueParticipó(j, result[i]) >= competenciasEnLasQueParticipó(j, result[i+1]);	
+}
+
+aux competenciasEnLasQueParticipó(j: JJOO, a:Atleta) : int =
+	long([z | z<- todasLasCompetencias(j), en(a, participantes(z))]);

+ 14 - 0
textoPlano/punto 12

@@ -0,0 +1,14 @@
+12.
+problema stevenBradbury (j: JJOO) = result : Atleta {
+	//Requiere que al menos una competencia ya haya finalizado (y, por lo tanto, se haya entregado un oro)
+	requiere algunOro: long([comp | comp <- todasLasCompetencias(j), finalizada(comp)])>0;
+
+	//Asegura que result haya ganado un oro
+	asegura ganoOro: existe(f <- [ranking(comp)[0] | comp <- todasLasCompetencias(j), finalizada(comp)]) ciaNumber(result)==ciaNumber(f);
+
+	//Asegura que entre todos los ganadores de oro, el result es el que tiene la menor habilidad en alguna de las medallas que ganó.	
+	asegura esElPeor: existe(dep <- deportesEnLosQueGano(j, result)) paraTodo(f <- [ranking(comp)[0] | comp <- todasLasCompetencias(j), finalizada(comp)]) capacidad(result, dep) <= capacidad(f, prm(categoria(comp));
+}
+
+aux deportesEnLosQueGanoOro(j: JJOO, a: Atleta) : [Deportes] =
+	[prm(categoria(comp)) | comp <- todasLasCompetencias(j), finalizada(comp), ciaNumber(ranking(comp)[0])==ciaNumber(a)];

+ 48 - 0
textoPlano/punto 8

@@ -0,0 +1,48 @@
+8.
+problema medallero (j: JJOO) = result : [(Pais, [Z])]{
+	//Se asegura que el resultado y el medallero sin repeticiones tengan los mismos elementos.
+	asegura mismos(result, sacarSinMedallas(crearMedallero(j)));
+	//Se asegura de que el medallero esté ordenado de mayor a menor.
+	asegura medalleroOrdenado(result);
+}
+
+aux listaNacionalidadesAtletas(j: JJOO) : [Pais] = [nacionalidad(at) | at <-- atletas(j)];
+//Crea una lista a partir de las nacionalidades de los atletas. Si hay dos atletas rusos, Rusia aparece dos veces.
+
+aux sacarRepeticiones(ls : [T]) : [T] = [ls[x] | x <- [0..|ls|-1], ¬en(ls[x], ls[0..x-1])];
+//Dada una lista cualquiera, describe una lista con una sola aparición de cada elemento de la lista original.
+
+aux listaPaises(j: JJOO) : [Pais] = sacarRepeticiones(listaNacionalidadesAtletas(j));
+//ListaPaises decribe la lista de los países participantes de los juegos, sin repeticiones.
+
+aux cuenta(x: T, a: [T]): Int = long([y | y <- a, y == x]);
+//Cuenta las apariciones del elemento x en la lista a.
+
+aux nacionalidadPrimerosTres(c:Competencia):[Pais] =
+[ifthenelse(i<=|ranking (c)|-1, nacionalidad(ranking(c)[i]), "Narnia")| i <- [0..2]];
+//Dada una competencia finalizada, describe una lista con los primeros tres países del ranking. Si el ranking tiene menos de tres elementos, rellena los otros con Narnia.
+
+aux ganadoresOroTotales (j: JJOO) : [Pais] =
+[nacionalidadPrimerosTres(c)[0] | dia <-- [1.. jornadaActual(j)], c <-- cronograma(j, dia), finalizada(c)];
+//Describe una lista de todos los países que ganaron oro hasta ahora. Si ganó varias veces, aparece varias veces en la lista.
+
+aux ganadoresPlataTotales (j: JJOO) : [Pais] =
+[nacionalidadPrimerosTres(c)[1] | dia <-- [1.. jornadaActual(j)], c <-- cronograma(j, dia), finalizada(c)];
+//Describe una lista de todos los países que ganaron plata hasta ahora. Si ganó varias veces, aparece varias veces en la lista.
+
+aux ganadoresBronceTotales (j: JJOO) : [Pais] =
+[nacionalidadPrimerosTres(c)[2] | dia <-- [1.. jornadaActual(j)], c <-- cronograma(j, dia), finalizada(c)];
+//Describe una lista de todos los países que ganaron bronce hasta ahora. Si ganó varias veces, aparece varias veces en la lista.
+
+aux crearMedallero (j: JJOO) : [(Pais, [Z])] =
+[(p, [cuenta(p, ganadoresOroTotales(j)), cuenta(p, ganadoresPlataTotales(j)), cuenta(p, ganadoresBronceTotales(j))]) | p <-- listaPaises(j)];
+//Para cada país participante en los juegos, describe una tupla con el nombre del país y una lista que consiste en tres ints, que son la cantidad de veces que el país aparece en la lista de ganadores de medallas de oro, de plata y de bronce respectivamente. Como Narnia no participa en los juegos, no aparece en la lista resultante.
+
+aux sacarSinMedallas(lista : [(Pais, [Z])]) : [(Pais, [Z])] = [x | x <-- lista, sgn(x)!=[0,0,0]];
+//Dada una lista de tuplas de países y listas de sus respectivas medallas, describe una lista subconjunto la anterior en la que solo aparecen los países que ganaron alguna medalla.
+
+aux medalleroOrdenado(lista : [(Pais, [Z])]) : Bool =
+paraTodo(x<--[0..|lista|-2]) ((sgd(lista[x])[0]>=sgd(lista[x+1])[0]) 
+|| ((sgd(lista[x])[0]==sgd(lista[x+1])[0])&&(sgd(lista[x])[1]>=sgd(lista[x+1])[1]))
+|| ((sgd(lista[x])[0]==sgd(lista[x+1])[0])&&(sgd(lista[x])[1]==sgd(lista[x+1])[1])&&(sgd(lista[x])[2]>=sgd(lista[x+1])[2])));
+//Dada una lista de paises con sus medallas [oro, plata, bronce], medalleroOrdenado vale true si todo elemento de la lista tiene más o igual medallas de oro que el siguiente, o tiene igual medallas de oro pero más o igual platas que el siguiente, o tiene igual medallas de oro y de plata pero más o igual de bronce que el siguiente.