07.py
1 from lib import * 2 3 input = read_input(2020, 7) 4 5 lines = input.splitlines() 6 7 8 g = {} 9 for line in lines: 10 a, *b = re.findall(r"([a-z]+ [a-z]+) bags?", line) 11 for x in b: 12 g.setdefault(x, []).append(a) 13 14 cnt = -1 15 q = ["shiny gold"] 16 visited = set() 17 while q: 18 p = q.pop(0) 19 20 if p in visited: 21 continue 22 visited.add(p) 23 24 cnt += 1 25 q += g.get(p, []) 26 27 print(cnt) 28 29 30 g = {} 31 for line in lines: 32 a = re.match(r"^([a-z]+ [a-z]+) bags", line).group(1) 33 b = re.findall(r"(\d+) ([a-z]+ [a-z]+) bags?", line) 34 g.setdefault(a, []).extend(b) 35 36 cnt = -1 37 q = [(1, "shiny gold")] 38 while q: 39 n, p = q.pop(0) 40 cnt += n 41 q += [(n * int(a), b) for a, b in g.get(p, [])] 42 43 print(cnt)