Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from adventlib import *
- from collections import defaultdict, deque
- import re
- import copy
- def main(f):
- a2i = defaultdict(set)
- all_ingreds = set()
- for l in lines(f):
- ingreds, a = re.match(r'(.+?)\(contains (.+)\)', l).groups()
- ingreds = ingreds.split()
- a = a.split(', ')
- for s in a:
- if s not in a2i:
- a2i[s] = set(ingreds)
- else:
- a2i[s] &= set(ingreds)
- all_ingreds |= set(ingreds)
- # part 1
- for i in a2i.values():
- for ii in i:
- all_ingreds.discard(ii)
- # part 2
- final = {}
- while len(final) < len(a2i):
- for a, i in a2i.items():
- if len(i) == 1:
- e = next(iter(i))
- final[a] = e
- for l in a2i.values():
- l.discard(e)
- final = {k: v for k, v in sorted(final.items(), key=lambda item: item[0])}
- print(final)
- print(','.join(final.values()))
- run_main(main)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement