/ Python / 2020 / 07.py
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)