diff --git a/2023/day25.py b/2023/day25.py new file mode 100755 index 0000000..b512448 --- /dev/null +++ b/2023/day25.py @@ -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() \ No newline at end of file