Files
advent_of_code/2023/25/part 1 solution.py
T
Jake Pullen 30baa85410 .
2024-03-15 09:51:06 +00:00

40 lines
1.2 KiB
Python

import networkx as nx
from collections import defaultdict
def read_file(file_path):
with open(file_path, 'r') as file:
data = file.read()
return data
def create_graph(edge_list):
graph = nx.DiGraph()
for node, edges in edge_list.items():
for edge in edges:
graph.add_edge(node, edge, capacity=1.0)
graph.add_edge(edge, node, capacity=1.0)
return graph
def find_minimum_cut(graph, nodes):
for source_node in [list(nodes.keys())[0]]:
for target_node in nodes.keys():
if source_node != target_node:
cut_value, (left, right) = nx.minimum_cut(graph, source_node, target_node)
if cut_value == 3:
print(len(left) * len(right))
break
data = read_file(r'advent_of_code\2023\25\input.txt')
lines = data.split('\n')
grid = [[char for char in row] for row in lines]
edges = defaultdict(set)
for line in lines:
start_node, end_nodes = line.split(':')
for end_node in end_nodes.split():
edges[start_node].add(end_node)
edges[end_node].add(start_node)
graph = create_graph(edges)
find_minimum_cut(graph, edges)