rishiilluri

Untitled

Dec 29th, 2022
1,123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.18 KB | None | 0 0
  1. """
  2. Function signatures:
  3. __init__: (self, file_name) -> None
  4. add_stock: (self, new_inventory) -> None
  5. check_stock: (self, resource_name) -> int
  6. add_to_pool: (self, resource_name, team_id) -> None
  7. remove_from_pool: (self, resource_name, team_id) -> None
  8. check_pool: (self, team_id) -> Dict[str, int]
  9. """
  10.  
  11. import csv
  12. from collections import deque
  13. class TeamManager:
  14.     def __init__(self, file_name):
  15.         self.resource = {}
  16.         with open(file_name, 'r') as d:
  17.             for line in csv.DictReader(d):
  18.                 x = line['resource_name']
  19.                 y = line['quantity']
  20.                 self.resource[x] = int(y)
  21.         self.pool = {}
  22.         self.buffer = deque(maxlen=3)
  23.        
  24.     def add_to_buffer(self, resource_name, team_id):
  25.         self.buffer.append((resource_name, team_id))
  26.     def check_buffer(self):
  27.         for req in self.buffer:
  28.             if req[0]:
  29.                 if self.resource[req[0][0]] >= req[0][1]:
  30.                     self._add_to_pool(req[0], req[1])
  31.                    
  32.                
  33.        
  34.     def add_stock(self, new_inventory):
  35.         """
  36.        args:
  37.            new_inventory: tuple ("resource_name", quantity)
  38.        Return:
  39.            None
  40.        """
  41.         if new_inventory[0] not in self.resource:
  42.             self.resource[new_inventory[0]] = int(new_inventory[1])
  43.         else:
  44.             self.resource[new_inventory[0]] += int(new_inventory[1])
  45.         self.check_buffer()
  46.         self.add_to_buffer(None, None)
  47.    
  48.     def check_stock(self, resource_name):
  49.         """
  50.        args:
  51.            resource_name: string
  52.        Return:
  53.            quantity: integer
  54.        """
  55.         self.add_to_buffer(None, None)
  56.         return self.resource[resource_name]
  57.        
  58.     def _add_to_pool(self, resource_name, team_id):
  59.         """
  60.        args:
  61.            resource_name: tuple ("resource_name", quantity)
  62.            team_id: number
  63.        Return:
  64.            None
  65.        """
  66.         if team_id in self.pool:
  67.             if resource_name[0] in self.pool[team_id]:
  68.                 self.pool[team_id][resource_name[0]]+= resource_name[1]
  69.             else:
  70.                 self.pool[team_id][resource_name[0]] = resource_name[1]
  71.         else:
  72.             self.pool[team_id] = {}
  73.             self.pool[team_id][resource_name[0]] = resource_name[1]
  74.         self.resource[resource_name[0]]-=resource_name[1]
  75.  
  76.     def add_to_pool(self, resource_name, team_id):
  77.         """
  78.        args:
  79.            resource_name: tuple ("resource_name", quantity)
  80.            team_id: number
  81.        Return:
  82.            None
  83.        """
  84.         if self.resource[resource_name[0]] >= resource_name[1]:
  85.             if team_id in self.pool:
  86.                 if resource_name[0] in self.pool[team_id]:
  87.                     self.pool[team_id][resource_name[0]]+= resource_name[1]
  88.                 else:
  89.                     self.pool[team_id][resource_name[0]] = resource_name[1]
  90.             else:
  91.                 self.pool[team_id] = {}
  92.                 self.pool[team_id][resource_name[0]] = resource_name[1]
  93.             self.resource[resource_name[0]]-=resource_name[1]
  94.             self.add_to_buffer(None, None)
  95.         else:
  96.             self.add_to_buffer(resource_name, team_id)
  97.            
  98.                
  99.     def remove_from_pool(self, resource_name, team_id):
  100.         """
  101.        args:
  102.            resource_name: string
  103.            team_id: number
  104.        Return:
  105.            None
  106.        """
  107.         if team_id not in self.pool:
  108.             return
  109.         if resource_name not in self.pool[team_id]:
  110.             return
  111.         existing_count = int(self.pool[team_id][resource_name])
  112.         self.pool[team_id][resource_name] = 0
  113.         self.resource[resource_name]+=existing_count
  114.         self.check_buffer()
  115.         self.add_to_buffer(None, None)
  116.         return
  117.        
  118.     def check_pool(self, team_id):
  119.         """
  120.        args:
  121.            team_id: number
  122.        Return:
  123.            contents of pool in format { "item": quantity }
  124.        """
  125.         if team_id not in self.pool:
  126.             return {}
  127.         self.add_to_buffer(None, None)
  128.         return self.pool[team_id]
Advertisement
Add Comment
Please, Sign In to add comment