From 53326d7598d523911bcc43dd7ee35011110a3b85 Mon Sep 17 00:00:00 2001 From: Bruno BELANYI Date: Wed, 21 May 2025 02:41:46 +0100 Subject: [PATCH] 2015: d09: ex1: add solution --- 2015/d09/ex1/ex1.py | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100755 2015/d09/ex1/ex1.py diff --git a/2015/d09/ex1/ex1.py b/2015/d09/ex1/ex1.py new file mode 100755 index 0000000..603897e --- /dev/null +++ b/2015/d09/ex1/ex1.py @@ -0,0 +1,34 @@ +#!/usr/bin/env python + +import collections +import itertools +import sys + + +def solve(input: str) -> int: + def parse_line(input: str) -> tuple[str, str, int]: + p1, _, p2, _, dist = input.split() + return p1, p2, int(dist) + + def parse(input: str) -> dict[str, dict[str, int]]: + res: dict[str, dict[str, int]] = collections.defaultdict(dict) + for p1, p2, dist in map(parse_line, input.splitlines()): + res[p1][p2] = dist + res[p2][p1] = dist + return res + + # Boring Traveling Salesman solution + distances = parse(input) + return min( + sum(distances[s][e] for s, e in itertools.pairwise(travel_plan)) + for travel_plan in itertools.permutations(distances.keys()) + ) + + +def main() -> None: + input = sys.stdin.read() + print(solve(input)) + + +if __name__ == "__main__": + main()