Advertisement
Guest User

Untitled

a guest
Dec 20th, 2020
273
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.00 KB | None | 0 0
  1. from adventlib import *
  2. from collections import defaultdict, deque
  3. import re
  4. import copy
  5.  
  6. def main(f):
  7. a2i = defaultdict(set)
  8. all_ingreds = set()
  9. for l in lines(f):
  10. ingreds, a = re.match(r'(.+?)\(contains (.+)\)', l).groups()
  11. ingreds = ingreds.split()
  12. a = a.split(', ')
  13. for s in a:
  14. if s not in a2i:
  15. a2i[s] = set(ingreds)
  16. else:
  17. a2i[s] &= set(ingreds)
  18. all_ingreds |= set(ingreds)
  19.  
  20. # part 1
  21. for i in a2i.values():
  22. for ii in i:
  23. all_ingreds.discard(ii)
  24.  
  25. # part 2
  26. final = {}
  27. while len(final) < len(a2i):
  28. for a, i in a2i.items():
  29. if len(i) == 1:
  30. e = next(iter(i))
  31. final[a] = e
  32. for l in a2i.values():
  33. l.discard(e)
  34.  
  35. final = {k: v for k, v in sorted(final.items(), key=lambda item: item[0])}
  36. print(final)
  37. print(','.join(final.values()))
  38.  
  39. run_main(main)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement