/* * 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 ]) }