aocpy/2017/d12.py

57 lines
1.1 KiB
Python
Raw Normal View History

2024-05-22 02:53:55 +02:00
from lib import str_to_ints
from collections import defaultdict
def get_graph(data):
g = defaultdict(set)
for line in data.splitlines():
fs = str_to_ints(line)
l = fs[0]
for r in fs[1:]:
g[l].add(r)
g[r].add(l)
return g
def part_1(data):
g = get_graph(data)
to_visit = [0]
seen = set()
while to_visit:
c = to_visit.pop()
if c in seen:
continue
seen.add(c)
for nb in g[c]:
to_visit.append(nb)
print(len(seen))
def part_2(data):
g = get_graph(data)
group_count = 0
seen = set()
for c in g.keys():
if c in seen:
continue
group_count += 1
to_visit = [c]
while to_visit:
c = to_visit.pop()
if c in seen:
continue
seen.add(c)
for nb in g[c]:
to_visit.append(nb)
print(group_count)
def main():
data = open(0).read().strip()
part_1(data)
part_2(data)
if __name__ == "__main__":
main()