David 10 years atrás
parent
commit
368874a9aa
1 changed files with 57 additions and 0 deletions
  1. 57 0
      textoPlano/punto 13

+ 57 - 0
textoPlano/punto 13

@@ -0,0 +1,57 @@
+/*
+ * Por cada dı́a, el mejor paı́s es aquél que más medallas de oro ganó.
+ * En caso de haber un empate, nos quedaremos con el menor paı́s comparando lexicográficamente (pais mejor < pais otro).
+ * Si un dı́a nadie ganó una medalla de oro, ese dı́a se saltea y no aparece en la lista.
+ */
+
+Problema 13 uyOrdenadoAsíHayUnPatrón(j:JJOO) = res : Bool
+
+//??
+asegura res == True IF |mejoresPaises(j)|==|sinRepes(mejoresPaises(j)))|
+//Si el primero esta 1 vez y alguno de los otros se repite => explota a la mierda
+asegura res == False IF contar(primero...)==1 && |mejoresPaises(j)|>|sinRepes(mejoresPaises(j)))|
+
+
+asegura res == 
+IF |mejoresPaises(j)|==|sinRepes(mejoresPaises(j)))| then
+	true
+else
+	IF contar(primero...)==1 && |mejoresPaises(j)|>|sinRepes(mejoresPaises(j)))| then
+		false
+		else
+(paratodo i←[0..|mejorespaises(j)|-1], 
+                         k←[0..|mejoresPaises(j)|-1],
+i mod |patron(mejoresPaises(j))| == k mod |patron(mejoresPaises(j))| )
+s[i] == s[k]
+
+//Caso borde: nunca repite el primero => valido siempre?
+aux mejoresPaises(j :JJOO) : [Paises] =
+[ cab(ordenar(masOrosDelDia(j,d) ) | d ←  [1.. jornadaActual(j) - 1], cronograma(j,d) != [ ], masOrosDelDia(j,d) != [] ]
+
+aux patron(ls: [T]) : [T] = 
+	if |ls|==1 then
+		ls
+	else
+	sub(ls, 0, min ( [ i | i <- [1..|ls|-1], ls[i] == ls[0] ] ) )
+
+
+aux masOrosDelDia( j:JJOO, d: dia) : [pais] =
+		filtrarTuplaPorPrmMax(j, uniqSgdLista( tuplasMedallOroComaPais(j,d) ), d)
+
+aux tuplasMedallaOroComaPais(j : JJOO, d: Dia) : [(int, Pais)]
+[ ( contar(pais,PaisesConOroTalDia(j,d)), pais ) | pais <- paisesConOroTalDia(j,d) ]
+
+aux paisesConOroTalDia(j:JJOO, d: Dia) : [Pais]
+[ pais (cab(ranking(c)) | c ← cronograma (j,d), finalizada(c) && |ranking(c)|>0 ]
+
+\aux{uniqSgdLista}{ls:[(\ent,\ent)]}{[(\ent,\ent)]}
+         {[ ls(i) | i \leftarrow [0..|ls|-1], j\leftarrow [0..|ls|-1], i \neq j, sgd(ls[i]) \neq sgd(ls[j]) ]}
+
+	aux filtrarTuplaPorPrmMax(j:JJOO, ls:[(\ent,Pais)], d:Dia) : [Pais]
+	[ sgd(tupla) | tupla <- tuplasMedallaOroComaPais(j,d), prm(tupla) >= maxListaTuplas(tuplasMedallaOroComaPais(j,d)) ]
+
+aux maxListaTuplas( ls: [(ent, Pais)]) : ent =
+		max([ prm(tupla) | tupla <- ls ])
+
+}
+