Add 2023 day 25
This commit is contained in:
parent
5d67709ab0
commit
aec31cd762
77
2023/day25.py
Executable file
77
2023/day25.py
Executable file
@ -0,0 +1,77 @@
|
||||
#!/usr/bin/python3
|
||||
"""
|
||||
Jour 25 du défi Advent Of Code pour l'année 2023
|
||||
"""
|
||||
import os
|
||||
|
||||
import networkx as nx
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
from aoc_utils import graph
|
||||
|
||||
def read_sample():
|
||||
"""récupère les entrées depuis le fichier texte correspondant"""
|
||||
filename = os.path.join(os.path.dirname(__file__ ), "inputs", "day25.txt")
|
||||
with open(filename, 'r') as f:
|
||||
sample = f.read().split('\n')
|
||||
sample = [ i for i in sample if i != '' ]
|
||||
return sample
|
||||
|
||||
def create_graph(sample):
|
||||
g = graph.Graph()
|
||||
for line in sample:
|
||||
node = line.split(": ")[0]
|
||||
dests = line.split(": ")[1].split()
|
||||
if node not in g:
|
||||
g.add_node(node)
|
||||
|
||||
for dest in dests:
|
||||
if dest not in [i[0] for i in g[node]]:
|
||||
g.add_edge(node, dest)
|
||||
|
||||
return g
|
||||
|
||||
|
||||
|
||||
def part1(sample):
|
||||
"""Partie 1 du défi"""
|
||||
g = create_graph(sample)
|
||||
|
||||
ng = g.networkx()
|
||||
cut, parts = nx.stoer_wagner(ng)
|
||||
|
||||
assert cut == 3
|
||||
assert len(parts) == 2
|
||||
|
||||
return len(parts[0])*len(parts[1])
|
||||
|
||||
#* Initial code:
|
||||
"""
|
||||
ng = g.networkx()
|
||||
nx.draw(ng, with_labels=True)
|
||||
plt.savefig("path.png")
|
||||
|
||||
to_delete = [("vqj", "szh"), ("jbx", "sml"), ("zhb", "vxr")]
|
||||
#to_delete = [("hfx", "pzl"), ("bvb", "cmg"), ("nvd", "jqt")]
|
||||
for edge in to_delete:
|
||||
g.remove_edges(*edge)
|
||||
|
||||
|
||||
ccs = g.connexes()
|
||||
print([len(i) for i in ccs])
|
||||
return len(ccs[0])*len(ccs[1])
|
||||
"""
|
||||
|
||||
def part2(sample):
|
||||
"""Partie 2 du défi"""
|
||||
return "Go push the big red button"
|
||||
|
||||
|
||||
def main():
|
||||
"""Fonction principale"""
|
||||
sample = read_sample()
|
||||
print(f"part1: {part1(sample)}")
|
||||
print(f"part2: {part2(sample)}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
Loading…
Reference in New Issue
Block a user