aboutsummaryrefslogtreecommitdiff
path: root/2025/11/puzzle-2.py
blob: 629c10c035db9fa932822c0d7d9648f2aa7e5118 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#!/usr/bin/python3

import functools


paths: dict[str, list[str]] = {}

def main() -> None:
	with open('input', 'r') as f:
		for line in f.readlines():
			x, *xs = line.split()
			paths[x[:-1]] = xs

	print(npaths('svr', 'out'))


@functools.cache
def npaths(
	src: str,
	dst: str,
	dacp: bool = False,
	fftp: bool = False,
) -> bool | int:
	return (
		dacp and fftp
		if src == dst else
		sum(npaths(
			nsrc,
			dst,
			dacp or src == 'dac',
			fftp or src == 'fft',
		) for nsrc in paths[src])
	)


if __name__ == '__main__':
	main()