diff options
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) + |
