from collections import defaultdict with open("input/day12.txt") as f: input = f.read() neighbors = defaultdict(set) for line in input.splitlines(): a, bs = line.split(" <-> ") for b in bs.split(", "): neighbors[a].add(b) neighbors[b].add(a) def connected(start, neighbors): queue = [start] seen = set() while queue: node = queue.pop(0) if node in seen: continue seen.add(node) queue.extend(neighbors[node]) return seen def groups(neighbors) -> int: seeds = set(neighbors.keys()) count = 0 while seeds: start = seeds.pop() seen = connected(start, neighbors) seeds.difference_update(seen) count += 1 return count print(len(connected("0", neighbors))) print(groups(neighbors))