Guest User

Untitled

a guest
Jun 21st, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.79 KB | None | 0 0
  1. #!/usr/bin/env python3
  2.  
  3. def calc(n):
  4. a = [0]*n
  5. for i in range(1, n):
  6. a[i] = a[i-1]
  7. if i % 2 == 1:
  8. a[i] = min(a[i], a[i//2])
  9. if i % 3 == 2:
  10. a[i] = min(a[i], a[i//3])
  11. a[i] += 1
  12. return a[-1]
  13.  
  14. # def calc2(n):
  15. # a = [0]*(n//2)
  16. # for i in range(1, n//2):
  17. # a[i] = a[i-1]
  18. # if i % 2 == 1:
  19. # a[i] = min(a[i], a[i//2])
  20. # if i % 3 == 2:
  21. # a[i] = min(a[i], a[i//3])
  22. # a[i] += 1
  23. # b = [min(i % 2 == 1 and a[i//2] or n, i % 3 == 2 and a[i//3] or n) for i in range(n-3, n)]
  24. # return min(b[2], min(b[1], b[0] + 1) + 1) + 1
  25.  
  26. # def calcr(n):
  27. # a = {1: 0}
  28. # def _calc(n):
  29. # if n not in a:
  30. # a[n] = min(_calc(n-1), _calc(n//2) if n%2==0 else n, _calc(n//3) if n%3==0 else n) + 1
  31. # return a[n]
  32. # return _calc(n)
  33.  
  34. def calcr2(n): ### O(log(n)^2) (?)
  35. a = {0: 0, 1: 0}
  36. def _calc(n):
  37. if n not in a:
  38. a[n] = n
  39. for i in range(n-2, n+1):
  40. if i % 2 == 0: a[n] = min(a[n], _calc(i//2))
  41. if i % 3 == 0: a[n] = min(a[n], _calc(i//3))
  42. a[n] += 1
  43. # a[n] = min(a[n], _calc(i//2) if i%2==0 else n, _calc(i//3) if i%3==0 else n) + 1
  44. return a[n]
  45. return _calc(n)
  46. # r = _calc(n)
  47. # from math import log
  48. # print(len(a)/log(n, 2)**2)
  49. # return r
  50.  
  51. for i in range(1, 100):
  52. assert calc(i) == calcr2(i)
  53.  
  54. # print(calc2(10))
  55. # print(calcr2(110452311))
  56. print(calcr2(110452311110452311110452311110452311110452311110452311))
  57. # calcr2(110452311)
  58. # calcr2(110452311110452311110452311)
  59. # calcr2(110452311110452311110452311110452311110452311110452311)
  60. # calcr2(110452311110452311110452311110452311110452311110452311110452311110452311110452311110452311110452311110452311)
  61. # calcr2(110452311110452311110452311110452311110452311110452311110452311110452311110452311110452311110452311110452311110452311110452311110452311110452311110452311110452311110452311110452311110452311110452311110452311110452311)
  62. # print(calc(1104523))
Add Comment
Please, Sign In to add comment