Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- __author__ = 'jeff@bluebirdsol.com'
- class Dir:
- To, From = 'To', 'From'
- # Now with more closure goodness...
- def make_negabase(base=-2):
- def negaverter(dir=Dir.To):
- def to_nega(i):
- digits = []
- if not i:
- digits = [0]
- else:
- while i != 0:
- i, remainder = divmod(i, base)
- if remainder < 0:
- i, remainder = i + 1, remainder + abs(base)
- digits += [remainder]
- return digits
- def from_nega(arr):
- return sum([arr[i] * ((base) ** i) for i in range(len(arr))])
- return to_nega if dir == Dir.To else from_nega
- return negaverter
- if __name__ == "__main__":
- negabinary = make_negabase(-2)
- to_negabinary = negabinary(Dir.To)
- from_negabinary = negabinary(Dir.From)
- print(to_negabinary(10))
- print(from_negabinary([0, 1, 1, 1, 1]))
- for i in range(-10000, 10000):
- assert i == from_negabinary(to_negabinary(i))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement