Advertisement
Guest User

Untitled

a guest
Apr 30th, 2025
24
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.02 KB | None | 0 0
  1. from itertools import product, chain
  2.  
  3. class DynamicProduct:
  4.  
  5. def __init__(self, n):
  6. self.pools = [[] for _ in range(n)]
  7. self.gen = (x for x in [])
  8. self.exclusions = []
  9.  
  10. def next(self):
  11. while True:
  12. res = next(self.gen, None)
  13. if res is None:
  14. return None
  15. bad = any(predicate(res) for predicate in self.exclusions)
  16. if not bad:
  17. return res
  18.  
  19. def add(self, index, elem):
  20. self.pools[index].append(elem)
  21. gens = []
  22. for i in range(len(self.pools)):
  23. if i != index:
  24. gen = (x for x in self.pools[i])
  25. else:
  26. gen = [elem]
  27. gens.append(gen)
  28. prod = product(*gens)
  29. self.gen = chain(self.gen, prod)
  30.  
  31. def delete(self, index, elem):
  32. self.pools[index].remove(elem)
  33. self.exclude(lambda x: x[index] == elem)
  34.  
  35. def exclude(self, predicate):
  36. self.exclusions.append(predicate)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement