Ver Mensaje Individual
  #3 (permalink)  
Antiguo 18/02/2014, 11:49
sukoy
 
Fecha de Ingreso: febrero-2011
Mensajes: 54
Antigüedad: 8 años, 10 meses
Puntos: 18
Respuesta: Desafíos 2014 - Semana 4

Mucho mejor.
Código Python:
Ver original
  1. def max_cycle(a, b):
  2.  
  3.     cache = {1:1}
  4.    
  5.     def num(cache, n):
  6.         if not n in cache:
  7.             if n % 2:
  8.                 cache[n] = 1 + num(cache, 3 * n + 1)
  9.             else:
  10.                 cache[n] = 1 + num(cache, n / 2)
  11.         return cache[n]
  12.  
  13.     def sec(a, b):
  14.         maxim = 0
  15.         if a > b: a,b = b,a
  16.         for i in xrange(a, b+1):
  17.             tr = num(cache, i)
  18.             if tr > maxim:
  19.                 maxim = tr
  20.         return maxim
  21.  
  22.     return sec(a, b)
  23.  
  24.  
  25. if __name__ == '__main__':
  26.     from time import time
  27.     t1 = time()
  28.     assert max_cycle(1, 10) == 20
  29.     assert max_cycle(100, 200) == 125
  30.     assert max_cycle(201, 210) == 89
  31.     assert max_cycle(900, 1000) == 174
  32.     assert max_cycle(113383, 113383) == 248
  33.     assert max_cycle(999999, 1) == 525
  34.     assert max_cycle(20, 20) == 8
  35.     assert max_cycle(9999, 9999) == 92
  36.     assert max_cycle(1, 9999) == 262
  37.     assert max_cycle(340, 3000) == 217
  38.     assert max_cycle(3000, 340) == 217
  39.     assert max_cycle(500, 101) == 144
  40.     assert max_cycle(1, 1) == 1
  41.     assert max_cycle(9999, 9998) == 92
  42.     t2 = time()
  43.     print "Tiempo de ejecucion %.3f s" % (t2 - t1)
  44. #Tiempo de ejecucion 2.062 s

Saludos.