diff options
Diffstat (limited to '2025')
| -rw-r--r-- | 2025/11/a.py | 8 | ||||
| -rw-r--r-- | 2025/11/b.py | 16 | ||||
| -rw-r--r-- | 2025/README.md | 14 |
3 files changed, 37 insertions, 1 deletions
diff --git a/2025/11/a.py b/2025/11/a.py index 5fdb11b..cf06b6a 100644 --- a/2025/11/a.py +++ b/2025/11/a.py | |||
| @@ -1,6 +1,12 @@ | |||
| 1 | import fileinput | 1 | import fileinput |
| 2 | 2 | ||
| 3 | a = {} | ||
| 3 | with fileinput.input() as lines: | 4 | with fileinput.input() as lines: |
| 4 | for line in lines: | 5 | for line in lines: |
| 5 | ... | 6 | v, l2 = line[:-1].split(': ') |
| 7 | a[v] = l2.split(' ') | ||
| 6 | 8 | ||
| 9 | def np(v): | ||
| 10 | return 1 if v == 'out' else sum(np(w) for w in a[v]) | ||
| 11 | |||
| 12 | print(np('you')) | ||
diff --git a/2025/11/b.py b/2025/11/b.py new file mode 100644 index 0000000..8fdcc8b --- /dev/null +++ b/2025/11/b.py | |||
| @@ -0,0 +1,16 @@ | |||
| 1 | import fileinput | ||
| 2 | from functools import cache | ||
| 3 | |||
| 4 | a = {} | ||
| 5 | with fileinput.input() as lines: | ||
| 6 | for line in lines: | ||
| 7 | v, l2 = line[:-1].split(': ') | ||
| 8 | a[v] = l2.split(' ') | ||
| 9 | |||
| 10 | @cache | ||
| 11 | def np(v, d, f): | ||
| 12 | if v == 'out': | ||
| 13 | return 1 if d and f else 0 | ||
| 14 | return sum(np(w, d or v == 'dac', f or v == 'fft') for w in a[v]) | ||
| 15 | |||
| 16 | print(np('svr', False, False)) | ||
diff --git a/2025/README.md b/2025/README.md index 09d97c1..951213c 100644 --- a/2025/README.md +++ b/2025/README.md | |||
| @@ -11,6 +11,7 @@ Example | |||
| 11 | 11 | ||
| 12 | ``` | 12 | ``` |
| 13 | Day -Part 1- -Part 2- | 13 | Day -Part 1- -Part 2- |
| 14 | 11 00:14:22 00:21:19 | ||
| 14 | 10 00:27:43 11:51:51 | 15 | 10 00:27:43 11:51:51 |
| 15 | 9 00:05:05 02:11:41 | 16 | 9 00:05:05 02:11:41 |
| 16 | 8 00:29:14 00:33:02 | 17 | 8 00:29:14 00:33:02 |
| @@ -213,3 +214,16 @@ AoC problem (see `../2023/24/24b.c`). | |||
| 213 | 214 | ||
| 214 | This time I left some comments in the code, so check out `10/b.py` if | 215 | This time I left some comments in the code, so check out `10/b.py` if |
| 215 | you want to know the details. | 216 | you want to know the details. |
| 217 | |||
| 218 | ### Day 11: Reactor | ||
| 219 | |||
| 220 | This is very easy, at least if you have ever worked with graphs. For | ||
| 221 | part 1I have implemented a recursive function `np(v)` that counts the | ||
| 222 | number of paths from a node `v` to `out`: it returns 1 if `v == out`, | ||
| 223 | or the sum of `np(w)` for all neighbors `w` of `v` otherwise. | ||
| 224 | |||
| 225 | For part 2 the function takes 2 extra parameters that denote whether | ||
| 226 | or not we have passed through the two required intermediate nodes. | ||
| 227 | |||
| 228 | The paths in part 1 are small enough that memoization is not required, | ||
| 229 | but in part 2 we need to cache the intermediate results. | ||
