diff options
| author | nekineki <nekineki@nekineki.net> | 2025-12-11 17:38:11 +0100 |
|---|---|---|
| committer | nekineki <nekineki@nekineki.net> | 2025-12-11 17:40:09 +0100 |
| commit | c245d85f3d488b0c580f7fe6b44147abb775ee20 (patch) | |
| tree | 773c885c213a623f368e5f4bf8a055224770becf /2025/day11.py | |
| parent | 93bbed1d8dae3bbbb785eeeb0732fa33a72a7acf (diff) | |
day11
Diffstat (limited to '2025/day11.py')
| -rwxr-xr-x | 2025/day11.py | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/2025/day11.py b/2025/day11.py new file mode 100755 index 0000000..5e9df65 --- /dev/null +++ b/2025/day11.py @@ -0,0 +1,51 @@ +#!/usr/bin/env python3 +from functools import reduce +from re import findall +from copy import deepcopy +import sys +# import numpy as np + +filename = sys.argv[1] if len(sys.argv) == 2 \ + else "in/" + sys.argv[0].split('/')[-1].rstrip(".py") + ".pzl" +data = open(filename).read() +lines = data.rstrip('\n').split('\n') + +D = dict() +for line in lines: + l, r = line.split(':') + r = r.strip().split(' ') + if l in D: + assert False + D[l] = r + +def dfs(start, end, visited, D, depth=0): + if start in visited: + return 0 + visited.add(start) + + if start == end: + return 1 + + s = 0 + if start in D: + for node in D[start]: + s += dfs(node, end, visited.copy(), D, depth+1) + else: + if start != 'out': + print('end of path', start) + return s +res1 = dfs('you', 'out', set(), D) + +# export graphviz +# for l in D: +# for r in D[l]: +# print(f"{l} -> {r}"); + +p1 = dfs('svr', 'fft' , set(['rmc', 'ibq', 'zdx', 'foc']), D) +p2 = dfs('fft', 'dac' , set(['iwg', 'kxp', 'fnk', 'you']), D) +p3 = dfs('dac', 'out' , set(), D) +res2 = p1 * p2 * p3 + +print('res1:', res1) +print('res2:', res2) + |
