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

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

Hice lo que pude...
Cachear los resultados de cada numero no parece que sirva de mucho...

Saludos y gracias.