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()
|