Guest User

Untitled

a guest
Oct 15th, 2018
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.64 KB | None | 0 0
  1. #!/usr/bin/python
  2.  
  3. from collections import defaultdict
  4.  
  5. def slow(num_immortals):
  6. stack = [1 << x for x in range(num_immortals)]
  7. seen = []
  8.  
  9. while stack:
  10. gene = stack.pop()
  11. for mate in seen:
  12. if not gene & mate:
  13. stack.append(gene | mate)
  14. seen.append(gene)
  15.  
  16. return len(seen)
  17.  
  18. def fast(num_immortals):
  19. seen = defaultdict(int)
  20. queue = defaultdict(int)
  21.  
  22. for x in range(num_immortals):
  23. queue[1 << x] = 1
  24.  
  25. while queue:
  26. gene, count = queue.popitem()
  27. for mate, mate_count in seen.items():
  28. if not gene & mate:
  29. queue[gene | mate] += count * mate_count
  30. seen[gene] += count
  31.  
  32. return sum(seen.values())
Add Comment
Please, Sign In to add comment