summaryrefslogtreecommitdiff
path: root/2025/day11.py
diff options
context:
space:
mode:
Diffstat (limited to '2025/day11.py')
-rwxr-xr-x2025/day11.py51
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)
+