07.py
1 from lib import * 2 3 input = read_input(2017, 7) 4 5 lines = input.splitlines() 6 7 8 names = set() 9 subs = set() 10 for line in lines: 11 name = line.split()[0] 12 sub = [] if "->" not in line else line.split("-> ")[1].split(", ") 13 names.add(name) 14 subs.update(sub) 15 16 print(next(iter(names - subs))) 17 18 19 progs = {} 20 names = set() 21 subs = set() 22 for line in lines: 23 name = line.split()[0] 24 weight = int(line.split("(")[1].split(")")[0]) 25 sub = [] if "->" not in line else line.split("-> ")[1].split(", ") 26 progs[name] = weight, sub 27 names.add(name) 28 subs.update(sub) 29 30 root = next(iter(names - subs)) 31 32 33 def check_sum(p): 34 s = progs[p][0] 35 w = {} 36 for q in progs[p][1]: 37 a, b = check_sum(q) 38 if a is not None: 39 return a, None 40 s += b 41 w[q] = b 42 43 x = max(w.values(), key=list(w.values()).count, default=None) 44 45 for k, v in w.items(): 46 if v != x: 47 return x - (v - progs[k][0]), None 48 49 return None, s 50 51 52 print(check_sum(root)[0])