From 7bebbf2ee0f324b8bcb0b338993d2f68ed5820a2 Mon Sep 17 00:00:00 2001 From: Bruno BELANYI Date: Thu, 11 Dec 2025 09:41:55 +0000 Subject: [PATCH] 2025: d11: ex1: add solution --- 2025/d11/ex1/ex1.py | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100755 2025/d11/ex1/ex1.py diff --git a/2025/d11/ex1/ex1.py b/2025/d11/ex1/ex1.py new file mode 100755 index 0000000..e08e34f --- /dev/null +++ b/2025/d11/ex1/ex1.py @@ -0,0 +1,34 @@ +#!/usr/bin/env python + +import functools +import sys + + +def solve(input: list[str]) -> int: + def parse(input: list[str]) -> dict[str, set[str]]: + return { + dev: set(outputs.split(" ")) + for dev, outputs in map(lambda s: s.split(": "), input) + } + + def count_paths(graph: dict[str, set[str]], start: str, end: str) -> int: + @functools.cache + def rec(start: str, end: str) -> int: + if start == end: + return 1 + return sum(rec(n, end) for n in graph[start]) + + # Input is assured to be a DAG, so a simple recursive count is enough + return rec(start, end) + + graph = parse(input) + return count_paths(graph, "you", "out") + + +def main() -> None: + input = sys.stdin.read().splitlines() + print(solve(input)) + + +if __name__ == "__main__": + main()