Advertisement
Guest User

Untitled

a guest
Oct 6th, 2015
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.01 KB | None | 0 0
  1. __author__ = 'jeff@bluebirdsol.com'
  2.  
  3.  
  4. class Dir:
  5. To, From = 'To', 'From'
  6.  
  7. # Now with more closure goodness...
  8. def make_negabase(base=-2):
  9. def negaverter(dir=Dir.To):
  10. def to_nega(i):
  11. digits = []
  12. if not i:
  13. digits = [0]
  14. else:
  15. while i != 0:
  16. i, remainder = divmod(i, base)
  17. if remainder < 0:
  18. i, remainder = i + 1, remainder + abs(base)
  19. digits += [remainder]
  20. return digits
  21.  
  22. def from_nega(arr):
  23. return sum([arr[i] * ((base) ** i) for i in range(len(arr))])
  24.  
  25. return to_nega if dir == Dir.To else from_nega
  26.  
  27. return negaverter
  28.  
  29.  
  30. if __name__ == "__main__":
  31. negabinary = make_negabase(-2)
  32. to_negabinary = negabinary(Dir.To)
  33. from_negabinary = negabinary(Dir.From)
  34.  
  35. print(to_negabinary(10))
  36. print(from_negabinary([0, 1, 1, 1, 1]))
  37.  
  38. for i in range(-10000, 10000):
  39. assert i == from_negabinary(to_negabinary(i))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement