Solve day 25. Only d21 part 2 left o.O
This commit is contained in:
60
d25.py
Normal file
60
d25.py
Normal file
@@ -0,0 +1,60 @@
|
||||
from lib import *
|
||||
|
||||
|
||||
def plot(graph):
|
||||
import networkx as nx
|
||||
import matplotlib
|
||||
import matplotlib.pyplot as plt
|
||||
G = nx.Graph()
|
||||
for node, connected_nodes in graph.items():
|
||||
for connected_node in connected_nodes:
|
||||
G.add_edge(node, connected_node)
|
||||
# pos = nx.spring_layout(G, k=2.0, iterations=20) # Adjust k as needed
|
||||
pos = nx.shell_layout(G)
|
||||
nx.draw(G, with_labels=True, node_color='lightblue', edge_color='gray', node_size=2000, font_size=15, font_weight='bold')
|
||||
matplotlib.use('qtagg')
|
||||
plt.show()
|
||||
|
||||
|
||||
def solve_non_hands_free(input: Input, second=False):
|
||||
graph = {}
|
||||
for line in input.lines():
|
||||
source, targets = line.split(":")
|
||||
targets = targets.strip()
|
||||
targets = targets.split(" ")
|
||||
|
||||
for target in targets:
|
||||
if not source in graph:
|
||||
graph[source] = [target]
|
||||
else:
|
||||
graph[source].append(target)
|
||||
if not target in graph:
|
||||
graph[target] = [source]
|
||||
else:
|
||||
graph[target].append(source)
|
||||
|
||||
# plot(graph) # I used this to find the nodes that have to be removed.
|
||||
to_remove = (("plt", "mgb"), ("jxm", "qns"), ("dbt", "tjd"))
|
||||
for a, b in to_remove:
|
||||
graph[a].remove(b)
|
||||
graph[b].remove(a)
|
||||
|
||||
to_visit = ["plt"]
|
||||
seen = set(to_visit)
|
||||
while to_visit:
|
||||
node = to_visit.pop()
|
||||
for nb in graph[node]:
|
||||
if not nb in seen:
|
||||
seen.add(nb)
|
||||
to_visit.append(nb)
|
||||
|
||||
return len(seen) * (len(graph) - len(seen))
|
||||
|
||||
|
||||
def main():
|
||||
DAY_INPUT = "i25.txt"
|
||||
print("Solution 1:", solve_non_hands_free(Input(DAY_INPUT)))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user