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

El mejor resultado que obtengo, teniendo en cuenta las optimizaciones de CalgaryCorpus, es sacando el cache de la función, de esta forma no se destruye en cada llamada.

Código Python:
Ver original
  1. cache = {1:1}
  2. def max_cycle(a, b):
  3.  
  4.     def num(cache, n):
  5.         if n in cache: return cache[n]
  6.         if n % 2:
  7.             r = cache[n] = 1 + num(cache, 3 * n + 1)
  8.         else:
  9.             r = cache[n] = 1 + num(cache, n >> 1 )
  10.         return r
  11.  
  12.     def sec(a, b):
  13.         maxim = 0
  14.         if a > b: a,b = b,a
  15.         lowlimit = max(a,b >> 1)
  16.         for i in xrange(lowlimit, b+1):
  17.             tr = num(cache, i)
  18.             if tr > maxim:
  19.                 maxim = tr
  20.         return maxim
  21.  
  22.     return sec(a, b)

Saludos.