From 4b5dde286b6129cb2d6f8b338438512d96f30655 Mon Sep 17 00:00:00 2001 From: Bruno BELANYI Date: Fri, 9 May 2025 22:38:19 +0100 Subject: [PATCH] 2017: d12: ex1: add solution --- 2017/d12/ex1/ex1.py | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100755 2017/d12/ex1/ex1.py diff --git a/2017/d12/ex1/ex1.py b/2017/d12/ex1/ex1.py new file mode 100755 index 0000000..fc720bb --- /dev/null +++ b/2017/d12/ex1/ex1.py @@ -0,0 +1,37 @@ +#!/usr/bin/env python + +import sys + + +def solve(input: str) -> int: + def parse_line(input: str) -> tuple[int, set[int]]: + origin, others = input.split(" <-> ") + return int(origin), {int(n) for n in others.split(", ")} + + def parse(input: str) -> dict[int, set[int]]: + return {n: children for n, children in map(parse_line, input.splitlines())} + + def reachable(graph: dict[int, set[int]]) -> int: + queue = [0] + seen: set[int] = set() + + while queue: + n = queue.pop() + if n in seen: + continue + seen.add(n) + queue.extend(graph[n]) + + return len(seen) + + graph = parse(input) + return reachable(graph) + + +def main() -> None: + input = sys.stdin.read() + print(solve(input)) + + +if __name__ == "__main__": + main()