|
|
@@ -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 ])
|
|
|
+
|
|
|
+}
|
|
|
+
|