51 lines
1.2 KiB
Python
51 lines
1.2 KiB
Python
from collections import defaultdict
|
|
from lib import get_data
|
|
|
|
data = get_data(__file__)
|
|
|
|
algs_to_ings = defaultdict(set)
|
|
ings_counts = defaultdict(int)
|
|
|
|
for line in data.splitlines():
|
|
a, b = line.split(" (contains ")
|
|
ings = a.split(" ")
|
|
algs = b[:-1].split(", ")
|
|
for ing in ings:
|
|
ings_counts[ing] += 1
|
|
|
|
for a in algs:
|
|
if a not in algs_to_ings:
|
|
algs_to_ings[a] = set(ings)
|
|
else:
|
|
algs_to_ings[a] &= set(ings)
|
|
|
|
|
|
for ings in algs_to_ings.values():
|
|
for ing in ings:
|
|
if ing in ings_counts:
|
|
del ings_counts[ing]
|
|
t = sum(ings_counts.values())
|
|
print(t)
|
|
|
|
|
|
algs_to_ings = {a: list(ing) for a, ing in algs_to_ings.items()}
|
|
|
|
handled = set()
|
|
while True:
|
|
to_remove = None
|
|
for alg, ings in algs_to_ings.items():
|
|
if len(ings) == 1 and ings[0] not in handled:
|
|
to_remove = ings[0]
|
|
break
|
|
else:
|
|
break
|
|
assert to_remove is not None
|
|
handled.add(to_remove)
|
|
for ings in algs_to_ings.values():
|
|
if len(ings) > 1 and to_remove in ings:
|
|
ings.remove(to_remove)
|
|
|
|
xs = sorted([(a, i[0]) for a, i in algs_to_ings.items()])
|
|
xs = ",".join([x[1] for x in xs])
|
|
print(xs)
|