yazdmich

Untitled

Sep 6th, 2014
593
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.82 KB | None | 0 0
  1. serial = [x for x in range(32)]
  2. serial.reverse()
  3. class count:
  4.     def __init__(self, on_message_change=None):
  5.         self._message, self._on_message_change = 0, on_message_change
  6.  
  7.     @property
  8.     def count(self):
  9.         return self._message
  10.  
  11.     @count.setter
  12.     def count(self, value):
  13.         if self._on_message_change:
  14.             self._on_message_change(self._message, value)
  15.         self._message = value
  16.  
  17.  
  18.  
  19. def unpack(l, ltypes=(list, tuple)):
  20.     ltype = type(l)
  21.     l = list(l)
  22.     i = 0
  23.     while i < len(l):
  24.         while isinstance(l[i], ltypes):
  25.             if not l[i]:
  26.                 l.pop(i)
  27.                 i -= 1
  28.                 break
  29.             else:
  30.                 l[i:i + 1] = l[i]
  31.         i += 1
  32.     return ltype(l)
  33. class Node:
  34.     #init
  35.     def __init__(self, parent):
  36.         print('New!')
  37.         self.total_children = count()
  38.         if parent != 'root':
  39.             self.parent = parent
  40.             self.level = self.parent.level + 1
  41.             self.parent.total_children
  42.         else:
  43.             self.total_children.count += 1
  44.             self.parent = None
  45.             self.level = 0
  46.         self.children = {'left':None,'right':None}
  47.         self.id = serial.pop()
  48.         print(self.id)
  49.         self.data = 0
  50.         self.total_children.count += 1
  51.     def delete(self):
  52.         if self.parent == None:
  53.             return False
  54.         else:
  55.             for child in self.children:
  56.                 self.children[child].parent = self.parent
  57.                 return True
  58.     def branch(self):
  59.         for child in self.children:
  60.             self.children[child] = Node(self)
  61.     def find(self, level):
  62.         nodes = []
  63.         if self.level != level:
  64.             for child in self.children:
  65.                 if self.children[child] :
  66.                     self.data = 1
  67.                     nodes.append(self.children[child].find(level))
  68.         else:
  69.             nodes.append(self)
  70.             self.data = 2
  71.         return unpack(nodes)
  72.     def find_bottom(self, x=0):
  73.         nodes = []
  74.         for child in self.children:
  75.             if self.children[child] == None:
  76.                 nodes.append(self)
  77.                 self.parent()
  78.             else:
  79.                 nodes.append(self.children[child])
  80.                 self.find(self.level + 1)
  81.         return unpack(nodes)
  82.     def branch_at_bottom(self):
  83.         for node in self.find_bottom():
  84.             node.branch()
  85.     def status_updated(self, old_value, new_value):
  86.         print("status changed '%s' -> '%s'" % (old_value, new_value))
  87.         self.parent.total_children.count = new_value
  88.     def __call__(self):
  89.         if parent:
  90.             self.parent()
  91.         else:
  92.             return self.name+' Resumed'
  93. root = Node('root')
  94. root.branch()
  95. print(root.find_bottom())
  96. root.branch_at_bottom()
Advertisement
Add Comment
Please, Sign In to add comment