s
óptimo previsto para cada n
¶n = 100
númeross
, por ejemplo, entre 2 y 30.s
calculamos los pasos necesarios por el procedimiento SEGUNDO.s
que consigue el número menor de pasos y lo anotamos en la lista s_optimos
s_optimos
será finalmente una lista de 200 valores de s
s_optimos
calculamos los valores:s
para n=100
.n
.n
el valor de s
aconsejadon
que nos den, sabremos cuál es el valor de s
aconsejado para que el procedimiento SEGUNDO efectúe sus cálculos obteniendo el número menor de operaciones necesarias, en términos estimados.###### FUNCIONES ######
from random import sample, seed
seed()
def lista_ordenada(lis, orden_inverso=False): # la función da True si ponemos lista_ordenada([4,3,2,1], orden_inverso=True)
ordenada = False
aux = lis[:]
aux.sort(reverse=orden_inverso)
if aux == lis:
ordenada = True
return ordenada
def sa(a,b):
if len(a) > 1: a[0],a[1] = a[1],a[0]
return a,b
def sb(a,b):
if len(b) > 1: b[0],b[1] = b[1],b[0]
return a,b
def ss(a,b):
sa(a,b)
sb(a,b)
return a,b
def pa(a,b):
if len(b) > 0:
a.insert(0, b[0])
b.pop(0)
return a,b
def pb(a,b):
if len(a) > 0:
b.insert(0, a[0])
a.pop(0)
return a,b
def ra(a,b):
if len(a) > 1: a.append(a.pop(0))
return a,b
def rb(a,b):
if len(b) > 1: b.append(b.pop(0))
return a,b
def rr(a,b):
ra(a,b)
rb(a,b)
return a,b
def rra(a,b):
if len(a) > 1: a.insert(0, a.pop())
return a,b
def rrb(a,b):
if len(b) > 1: b.insert(0, b.pop())
return a,b
def rrr(a,b):
rra(a,b)
rrb(a,b)
return a,b
def separa(tramo, n, s, a, b): # se llevan de la pila A a la B los números del tramo que toca
contador = 0
ancho = int(n/s)
fin = tramo * ancho # fin del tramo
inicio = (tramo-1)*ancho+1 # inicio del tramo
pasados = 0 # cuenta cuantos números se han pasado de la pila A a la B
while pasados < fin-inicio+1: # recorremos los elementos de la plia A hasta que pasemos todos los números de este tramo
if inicio <= a[0] <= fin:
pb(a,b)
contador += 1
pasados += 1
else:
ra(a,b)
contador += 1
return a, b, contador
def ordena(tramo, n, s, a, b): # Pasamos de B a A los del tramo que toca, comenzando por el nº mayor, que para el tramo 1 es 5.
# ordena los números recientemente separados y llevados a B
# el objetivo es que esos números queden en B ordenados de forma decreciente: 5,4,3,2,1
contador = 0
ancho = int(n/s)
fin = tramo * ancho # fin del tramo
inicio = (tramo-1)*ancho+1 # inicio del tramo
while not lista_ordenada(b, orden_inverso=True): # se repite hasta que B quede ordenada decrecientemente. Si solo queda un elemento en B es que está ordenada
while max(b) != b[0]: # buscamos el máximo y vamos haciendo ra o rra hasta que quede el primero
if b.index(max(b)) <= int(len(b)/2):
rb(a,b)
else:
rrb(a,b)
contador += 1
if not lista_ordenada(b, orden_inverso=True):
pa(a,b); contador += 1
while len(a) > n-fin: # llevamos de A a B los números del tramo que toca
pb(a,b); contador += 1
return a, b, contador
def ordena_final(tramo, n, s, a, b): # ordena los números del úlitmo tramo que están en "A" y el objetivo es que queden crecientes: ...,18,19,20.
contador = 0
ancho = int(n/s)
fin = n # en el último tramo se ajusta para que el último nº sea igual a n
inicio = (tramo-1)*ancho+1 # inicio del tramo
while not lista_ordenada(a): # se repite hasta que A quede ordenada en orden creciente. Si solo queda un elemento en A es que está ordenada
while min(a) != a[0]:
if a.index(min(a)) <= int(len(a)/2):
ra(a,b)
else:
rra(a,b)
contador += 1
if not lista_ordenada(a):
pb(a,b); contador += 1
while len(b) > 0: # llevamos de B a A todos los números que hay en B
pa(a,b); contador += 1
return a, b, contador
for n in range(100,101,10):
s_optimo = [] # lista que recoge el s que optimo para cada una de las tiradas que hagamos
lista_porcentaje_mejora = [] # lista con el porcentaje de mejora del procedimiento SEGUNDO sobre el PRIMERO
suma_primeros = 0
suma_segundos_optimos = 0
num_tiradas = 200 # número de tiradas que se hacen, por ejemplo 200 tiradas para cada n, para ver luego la media, moda,...
for tirada in range(num_tiradas): # nº de pilas A generadas pora cada n, cada una se llama "tirada"
#mejor_primero = 0 # inicializamos un contador que dice cuantas veces es mejor el procedimiento PRIMERO que el SEGUNDO
# Generación de la pila A
#n = 500 # número de elementos de la pila
a = sample(range(1, n+1), n)
a_original = a[:]
b = []
###### PROCEDIMIENTO PRIMERO ######
contador = 0
while not lista_ordenada(a): # se repite hasta que A quede ordenada. Si solo queda un elemento en A es que está ordenada
while min(a) != a[0]: # buscamos el mínimo y vamos haciendo ra o rra hasta que quede el primero
if a.index(min(a)) <= int(len(a)/2):
ra(a,b)
else:
rra(a,b)
contador += 1
if not lista_ordenada(a):
pb(a,b); contador += 1 #print(a,b) # luego hacemos pb
while len(b) > 0: # luego se hace pa pa pa pa hasta que no quede nadie en la pila b
pa(a,b); contador += 1
primero = contador # la variable primero recoge el número de instrucciones necesarias para resolver esta tirada por el procedimiento PRIMERO
suma_primeros += primero # se acumulan todos los pasos de los 200 (num_tiradas) que se han realizado para luego calcular la media
#### procedimiento SEGUNDO para varios valores de s en un cierto rango
#for s in range(max(2,int(-0.000003*n**2+0.0155*n+1.6253)-1), int(-0.000002*n**2+0.01544*n+6.8537)+3):
lista_pasos = [0,0] # en esta lista recogemos cuántos pasos (ordenes) se necesitan por el procedimiento SEGUNDO para cada s, ponemos dos cero pq s comienz en 2
for s in range(2,31):
#print("s:", s, end=" ")
###### PROCEDIMIENTO SEGUNDO ######
a = a_original[:]
n = len(a)
b = []
#s = 20 # número de grupos
contador = 0
for tramo in range(1, s): # tramo=1,2,...,s-1. El último tramo se trata de forma diferente
a, b, contador_separa = separa(tramo,n,s,a,b) # lleva de A a B los números correspondientes a ese tramo
contador += contador_separa
a, b, contador_ordena = ordena(tramo,n,s,a,b) # ordena los números recientemente separados y llevados a B
contador += contador_ordena
# tramo final donde los números de A ya se ordenan en A, ya no se usa la función separa
# la pila de trabajo es "A" y el objetivo es que sea creciente: ...,18,19,20.
a, b, contador_ordena_final = ordena_final(tramo,n,s,a,b)
contador += contador_ordena_final
#print("Al final:", a, b)
#print("PROCEDIMIENTO SEGUNDO contador: ", contador)
segundo=contador
lista_pasos.append(segundo)
#print(lista_pasos)
s_optimo.append(lista_pasos.index(min(lista_pasos[2:])))
lista_porcentaje_mejora.append(1-segundo/primero)
suma_segundos_optimos += min(lista_pasos[2:])
print("n:", n)
print("min_s:\t", min(s_optimo))
print("max_s:\t", max(s_optimo))
print("media_s:", int(sum(s_optimo)/len(s_optimo)))
print("moda_s:\t", max(set(s_optimo), key=s_optimo.count))
primero_medio = suma_primeros/num_tiradas
print("primero medio:", round(primero_medio)) # media de las 200 (num_tiradas) del procedimiento PRIMERO para el n en el que estemos
segundo_optimo_medio = suma_segundos_optimos/num_tiradas
print("segundo óptimo medio:", round(segundo_optimo_medio))
print(f"mejora: {round(100*(1-segundo_optimo_medio/primero_medio),0)}%" )
n: 100 min_s: 3 max_s: 8 media_s: 5 moda_s: 5 primero medio: 1465 segundo óptimo medio: 844 mejora: 42.0%
n=500
max(2,int(-0.000003*n**2+0.0155*n+1.6253)-1)
int(-0.000002*n**2+0.01544*n+6.8537)+2
16
print("n, min_s, max_s, moda_s, media_PRIMERO, media_optimo_SEGUNDO, Mejora")
for n in [6000]:
s_optimo = [] # lista que recoge el s que es óptimo para cada una de las tiradas que hagamos
lista_porcentaje_mejora = [] # lista con el porcentaje de mejora del procedimiento SEGUNDO sobre el PRIMERO
suma_primeros = 0
suma_segundos_optimos = 0
num_tiradas = 100 # número de tiradas que se hacen, por ejemplo 200 tiradas para cada n, para ver luego la media, moda,...
for tirada in range(num_tiradas): # nº de pilas A generadas pora cada n, cada una se llama "tirada"
#mejor_primero = 0 # inicializamos un contador que dice cuantas veces es mejor el procedimiento PRIMERO que el SEGUNDO
# Generación de la pila A
while True: # evita que se genere justo la lista a con los números ya ordenados
a = sample(range(1, n+1), n)
if not lista_ordenada(a):
break
a_original = a[:]
b = []
###### PROCEDIMIENTO PRIMERO ######
contador = 0
while not lista_ordenada(a): # se repite hasta que A quede ordenada. Si solo queda un elemento en A es que está ordenada
while min(a) != a[0]: # buscamos el mínimo y vamos haciendo ra o rra hasta que quede el primero
if a.index(min(a)) <= int(len(a)/2):
ra(a,b)
else:
rra(a,b)
contador += 1
if not lista_ordenada(a):
pb(a,b); contador += 1 #print(a,b) # luego hacemos pb
while len(b) > 0: # luego se hace pa pa pa pa hasta que no quede nadie en la pila b
pa(a,b); contador += 1
primero = contador # la variable primero recoge el número de instrucciones necesarias para resolver esta tirada por el procedimiento PRIMERO
suma_primeros += primero # se acumulan todos los pasos de los 200 (num_tiradas) que se han realizado para luego calcular la media
print("PRIMERO:", primero)
#### procedimiento SEGUNDO para varios valores de s en un cierto rango
#for s in range(max(2,int(-0.000003*n**2+0.0155*n+1.6253)-1), int(-0.000002*n**2+0.01544*n+6.8537)+3):
lista_pasos = [0,0] # en esta lista recogemos cuántos pasos (ordenes) se necesitan por el procedimiento SEGUNDO para cada s, ponemos dos cero pq s comienz en 2
inicio_s = 30 # round(0.0000000005*n**3-0.000004*n**2+0.015*n+2.6381)-2 # inicio_s es 2 para valores pequeños, hasta n=90
max_s_estimado = round(0.000000001*n**3-0.000008*n**2+0.0221*n+6.9178)
fin_s = 50 # round(max(2, max_s_estimado*1.5))
for s in range(inicio_s, fin_s):
#print("s:", s, end=" ")
###### PROCEDIMIENTO SEGUNDO ######
a = a_original[:]
n = len(a)
b = []
contador = 0
for tramo in range(1, s): # tramo=1,2,...,s-1. El último tramo se trata de forma diferente
a, b, contador_separa = separa(tramo,n,s,a,b) # lleva de A a B los números correspondientes a ese tramo
contador += contador_separa
a, b, contador_ordena = ordena(tramo,n,s,a,b) # ordena los números recientemente separados y llevados a B
contador += contador_ordena
# tramo final donde los números de A ya se ordenan en A, ya no se usa la función separa
# la pila de trabajo es "A" y el objetivo es que sea creciente: ...,18,19,20.
a, b, contador_ordena_final = ordena_final(tramo,n,s,a,b)
contador += contador_ordena_final
segundo=contador
lista_pasos.append(segundo)
print("s:", s, "SEGUNDO:",segundo)
s_optimo.append(lista_pasos.index(min(lista_pasos[2:]))+(inicio_s-2))
lista_porcentaje_mejora.append(1-segundo/primero)
suma_segundos_optimos += min(lista_pasos[2:])
# n, min_s, max_s, moda_s, media_PRIMERO, media_optimo_SEGUNDO, Mejora
primero_medio = suma_primeros/num_tiradas
segundo_optimo_medio = suma_segundos_optimos/num_tiradas
print(n, min(s_optimo), max(s_optimo), max(set(s_optimo), key=s_optimo.count), round(primero_medio), round(segundo_optimo_medio), str(int(round(100*(1-segundo_optimo_medio/primero_medio),0)))+"%")
#print("media_s:", int(sum(s_optimo)/len(s_optimo)))
n, min_s, max_s, moda_s, media_PRIMERO, media_optimo_SEGUNDO, Mejora PRIMERO: 4471198 s: 30 SEGUNDO: 309455 s: 31 SEGUNDO: 304153 s: 32 SEGUNDO: 302303 s: 33 SEGUNDO: 301163 s: 34 SEGUNDO: 299182 s: 35 SEGUNDO: 297533 s: 36 SEGUNDO: 295219 s: 37 SEGUNDO: 293774 s: 38 SEGUNDO: 293792 s: 39 SEGUNDO: 293910 s: 40 SEGUNDO: 291834 s: 41 SEGUNDO: 290294 s: 42 SEGUNDO: 289512 s: 43 SEGUNDO: 288194 s: 44 SEGUNDO: 289063 s: 45 SEGUNDO: 289279 s: 46 SEGUNDO: 289876 s: 47 SEGUNDO: 290999 s: 48 SEGUNDO: 292047 s: 49 SEGUNDO: 291673 PRIMERO: 4548852 s: 30 SEGUNDO: 306842 s: 31 SEGUNDO: 306723 s: 32 SEGUNDO: 302604 s: 33 SEGUNDO: 300130 s: 34 SEGUNDO: 299517 s: 35 SEGUNDO: 295489 s: 36 SEGUNDO: 297392 s: 37 SEGUNDO: 294671 s: 38 SEGUNDO: 293937 s: 39 SEGUNDO: 291214 s: 40 SEGUNDO: 291411 s: 41 SEGUNDO: 291807 s: 42 SEGUNDO: 290321 s: 43 SEGUNDO: 291165 s: 44 SEGUNDO: 288377 s: 45 SEGUNDO: 289600 s: 46 SEGUNDO: 289782 s: 47 SEGUNDO: 289670 s: 48 SEGUNDO: 289181 s: 49 SEGUNDO: 291077 PRIMERO: 4473332 s: 30 SEGUNDO: 308880 s: 31 SEGUNDO: 305546 s: 32 SEGUNDO: 301045 s: 33 SEGUNDO: 298935 s: 34 SEGUNDO: 297205 s: 35 SEGUNDO: 294474 s: 36 SEGUNDO: 295936 s: 37 SEGUNDO: 294907 s: 38 SEGUNDO: 296496 s: 39 SEGUNDO: 290871 s: 40 SEGUNDO: 289251 s: 41 SEGUNDO: 288959 s: 42 SEGUNDO: 288763 s: 43 SEGUNDO: 287322 s: 44 SEGUNDO: 288321 s: 45 SEGUNDO: 286001 s: 46 SEGUNDO: 288514 s: 47 SEGUNDO: 289699 s: 48 SEGUNDO: 286706 s: 49 SEGUNDO: 287800 PRIMERO: 4542952 s: 30 SEGUNDO: 312971 s: 31 SEGUNDO: 305711 s: 32 SEGUNDO: 302275 s: 33 SEGUNDO: 303825 s: 34 SEGUNDO: 299193 s: 35 SEGUNDO: 297655 s: 36 SEGUNDO: 292905 s: 37 SEGUNDO: 291993 s: 38 SEGUNDO: 290292 s: 39 SEGUNDO: 290816 s: 40 SEGUNDO: 288250 s: 41 SEGUNDO: 288302 s: 42 SEGUNDO: 290166 s: 43 SEGUNDO: 288617 s: 44 SEGUNDO: 289515 s: 45 SEGUNDO: 287955 s: 46 SEGUNDO: 287714 s: 47 SEGUNDO: 288723 s: 48 SEGUNDO: 291347 s: 49 SEGUNDO: 291853 PRIMERO: 4547850 s: 30 SEGUNDO: 313292 s: 31 SEGUNDO: 307102 s: 32 SEGUNDO: 304155 s: 33 SEGUNDO: 303340 s: 34 SEGUNDO: 298576 s: 35 SEGUNDO: 299010 s: 36 SEGUNDO: 295171 s: 37 SEGUNDO: 296351 s: 38 SEGUNDO: 295486 s: 39 SEGUNDO: 292704 s: 40 SEGUNDO: 294587 s: 41 SEGUNDO: 293036 s: 42 SEGUNDO: 292475 s: 43 SEGUNDO: 290569 s: 44 SEGUNDO: 292854 s: 45 SEGUNDO: 290812 s: 46 SEGUNDO: 291661 s: 47 SEGUNDO: 292469 s: 48 SEGUNDO: 289866 s: 49 SEGUNDO: 291959 PRIMERO: 4529364 s: 30 SEGUNDO: 309195 s: 31 SEGUNDO: 307188 s: 32 SEGUNDO: 303937 s: 33 SEGUNDO: 300568 s: 34 SEGUNDO: 297571 s: 35 SEGUNDO: 294771 s: 36 SEGUNDO: 295055 s: 37 SEGUNDO: 294741 s: 38 SEGUNDO: 293669 s: 39 SEGUNDO: 291812 s: 40 SEGUNDO: 290147 s: 41 SEGUNDO: 289046 s: 42 SEGUNDO: 290711 s: 43 SEGUNDO: 290484 s: 44 SEGUNDO: 289069 s: 45 SEGUNDO: 291349 s: 46 SEGUNDO: 290274 s: 47 SEGUNDO: 290772 s: 48 SEGUNDO: 288305 s: 49 SEGUNDO: 290520 PRIMERO: 4512031 s: 30 SEGUNDO: 307918 s: 31 SEGUNDO: 303953 s: 32 SEGUNDO: 300355 s: 33 SEGUNDO: 298824 s: 34 SEGUNDO: 296963 s: 35 SEGUNDO: 292563 s: 36 SEGUNDO: 292636 s: 37 SEGUNDO: 294147 s: 38 SEGUNDO: 292313 s: 39 SEGUNDO: 290536 s: 40 SEGUNDO: 289585 s: 41 SEGUNDO: 286642 s: 42 SEGUNDO: 286219 s: 43 SEGUNDO: 288409 s: 44 SEGUNDO: 289739 s: 45 SEGUNDO: 288330 s: 46 SEGUNDO: 288518 s: 47 SEGUNDO: 290928 s: 48 SEGUNDO: 289409 s: 49 SEGUNDO: 291737 PRIMERO: 4491131 s: 30 SEGUNDO: 310651 s: 31 SEGUNDO: 307242 s: 32 SEGUNDO: 304522 s: 33 SEGUNDO: 298878 s: 34 SEGUNDO: 298137 s: 35 SEGUNDO: 297333 s: 36 SEGUNDO: 294024 s: 37 SEGUNDO: 293885 s: 38 SEGUNDO: 292830 s: 39 SEGUNDO: 294479 s: 40 SEGUNDO: 292135 s: 41 SEGUNDO: 289585 s: 42 SEGUNDO: 291145 s: 43 SEGUNDO: 291323 s: 44 SEGUNDO: 286743 s: 45 SEGUNDO: 287036 s: 46 SEGUNDO: 291129 s: 47 SEGUNDO: 288585 s: 48 SEGUNDO: 292511 s: 49 SEGUNDO: 292525 PRIMERO: 4437580 s: 30 SEGUNDO: 311971 s: 31 SEGUNDO: 305910 s: 32 SEGUNDO: 306321 s: 33 SEGUNDO: 300470 s: 34 SEGUNDO: 297419 s: 35 SEGUNDO: 299564 s: 36 SEGUNDO: 296165 s: 37 SEGUNDO: 293359 s: 38 SEGUNDO: 293583 s: 39 SEGUNDO: 293075 s: 40 SEGUNDO: 290148 s: 41 SEGUNDO: 290883 s: 42 SEGUNDO: 289458 s: 43 SEGUNDO: 288912 s: 44 SEGUNDO: 289700 s: 45 SEGUNDO: 288492 s: 46 SEGUNDO: 288201 s: 47 SEGUNDO: 289532 s: 48 SEGUNDO: 289483 s: 49 SEGUNDO: 291151 PRIMERO: 4581277 s: 30 SEGUNDO: 308376 s: 31 SEGUNDO: 308126 s: 32 SEGUNDO: 307623 s: 33 SEGUNDO: 302465 s: 34 SEGUNDO: 299160 s: 35 SEGUNDO: 299735 s: 36 SEGUNDO: 296360 s: 37 SEGUNDO: 294437 s: 38 SEGUNDO: 296026 s: 39 SEGUNDO: 293105 s: 40 SEGUNDO: 294999 s: 41 SEGUNDO: 293543 s: 42 SEGUNDO: 291475 s: 43 SEGUNDO: 291574 s: 44 SEGUNDO: 289250 s: 45 SEGUNDO: 293646 s: 46 SEGUNDO: 290093 s: 47 SEGUNDO: 291246 s: 48 SEGUNDO: 291900 s: 49 SEGUNDO: 293434 PRIMERO: 4430539 s: 30 SEGUNDO: 305685 s: 31 SEGUNDO: 303490 s: 32 SEGUNDO: 300869 s: 33 SEGUNDO: 301219 s: 34 SEGUNDO: 295544 s: 35 SEGUNDO: 295536 s: 36 SEGUNDO: 295329 s: 37 SEGUNDO: 292474 s: 38 SEGUNDO: 290568 s: 39 SEGUNDO: 290529 s: 40 SEGUNDO: 289304 s: 41 SEGUNDO: 289177 s: 42 SEGUNDO: 286703 s: 43 SEGUNDO: 286010 s: 44 SEGUNDO: 287780 s: 45 SEGUNDO: 288359 s: 46 SEGUNDO: 289072 s: 47 SEGUNDO: 287645 s: 48 SEGUNDO: 287450 s: 49 SEGUNDO: 288722 PRIMERO: 4472450 s: 30 SEGUNDO: 308356 s: 31 SEGUNDO: 304205 s: 32 SEGUNDO: 300219 s: 33 SEGUNDO: 298001 s: 34 SEGUNDO: 297149 s: 35 SEGUNDO: 294231 s: 36 SEGUNDO: 293620 s: 37 SEGUNDO: 289596 s: 38 SEGUNDO: 288357 s: 39 SEGUNDO: 290407 s: 40 SEGUNDO: 289429 s: 41 SEGUNDO: 289441 s: 42 SEGUNDO: 287325 s: 43 SEGUNDO: 288607 s: 44 SEGUNDO: 287862 s: 45 SEGUNDO: 288385 s: 46 SEGUNDO: 285843 s: 47 SEGUNDO: 287682 s: 48 SEGUNDO: 288361 s: 49 SEGUNDO: 290519 PRIMERO: 4462798 s: 30 SEGUNDO: 309547 s: 31 SEGUNDO: 307165 s: 32 SEGUNDO: 305026 s: 33 SEGUNDO: 301417 s: 34 SEGUNDO: 298405 s: 35 SEGUNDO: 293722 s: 36 SEGUNDO: 296507 s: 37 SEGUNDO: 293772 s: 38 SEGUNDO: 293557 s: 39 SEGUNDO: 292355 s: 40 SEGUNDO: 289601 s: 41 SEGUNDO: 290464 s: 42 SEGUNDO: 289559 s: 43 SEGUNDO: 290343 s: 44 SEGUNDO: 288956 s: 45 SEGUNDO: 288776 s: 46 SEGUNDO: 287995 s: 47 SEGUNDO: 290882 s: 48 SEGUNDO: 289387 s: 49 SEGUNDO: 291853 PRIMERO: 4458885 s: 30 SEGUNDO: 310686 s: 31 SEGUNDO: 304459 s: 32 SEGUNDO: 301585 s: 33 SEGUNDO: 301920 s: 34 SEGUNDO: 298051 s: 35 SEGUNDO: 295358 s: 36 SEGUNDO: 293317 s: 37 SEGUNDO: 294004 s: 38 SEGUNDO: 292583 s: 39 SEGUNDO: 293989 s: 40 SEGUNDO: 290289 s: 41 SEGUNDO: 288675 s: 42 SEGUNDO: 291654 s: 43 SEGUNDO: 289261 s: 44 SEGUNDO: 289894 s: 45 SEGUNDO: 289734 s: 46 SEGUNDO: 289923 s: 47 SEGUNDO: 289323 s: 48 SEGUNDO: 290512 s: 49 SEGUNDO: 291961 PRIMERO: 4489365 s: 30 SEGUNDO: 308254 s: 31 SEGUNDO: 307518 s: 32 SEGUNDO: 301637 s: 33 SEGUNDO: 299684 s: 34 SEGUNDO: 296849 s: 35 SEGUNDO: 296254 s: 36 SEGUNDO: 298472 s: 37 SEGUNDO: 293716 s: 38 SEGUNDO: 292576 s: 39 SEGUNDO: 290552 s: 40 SEGUNDO: 292481 s: 41 SEGUNDO: 291860 s: 42 SEGUNDO: 290653 s: 43 SEGUNDO: 289919 s: 44 SEGUNDO: 291240 s: 45 SEGUNDO: 288130 s: 46 SEGUNDO: 288442 s: 47 SEGUNDO: 288217 s: 48 SEGUNDO: 287155 s: 49 SEGUNDO: 289450 PRIMERO: 4516041 s: 30 SEGUNDO: 309551 s: 31 SEGUNDO: 304076 s: 32 SEGUNDO: 303200 s: 33 SEGUNDO: 301017 s: 34 SEGUNDO: 296157 s: 35 SEGUNDO: 298590 s: 36 SEGUNDO: 293311 s: 37 SEGUNDO: 294027 s: 38 SEGUNDO: 293408 s: 39 SEGUNDO: 292117 s: 40 SEGUNDO: 289946 s: 41 SEGUNDO: 289670 s: 42 SEGUNDO: 290869 s: 43 SEGUNDO: 287022 s: 44 SEGUNDO: 288636 s: 45 SEGUNDO: 290648 s: 46 SEGUNDO: 286993 s: 47 SEGUNDO: 289173 s: 48 SEGUNDO: 287527 s: 49 SEGUNDO: 292640 PRIMERO: 4467790 s: 30 SEGUNDO: 308253 s: 31 SEGUNDO: 304833 s: 32 SEGUNDO: 300778 s: 33 SEGUNDO: 299022 s: 34 SEGUNDO: 295662 s: 35 SEGUNDO: 295688 s: 36 SEGUNDO: 294701 s: 37 SEGUNDO: 293350 s: 38 SEGUNDO: 293652 s: 39 SEGUNDO: 291681 s: 40 SEGUNDO: 287271 s: 41 SEGUNDO: 288426