diff options
Diffstat (limited to '2024/19/python.py')
| -rwxr-xr-x | 2024/19/python.py | 42 |
1 files changed, 0 insertions, 42 deletions
diff --git a/2024/19/python.py b/2024/19/python.py deleted file mode 100755 index efd3272..0000000 --- a/2024/19/python.py +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env python3 - -from fileinput import input -from functools import cache -from itertools import takewhile - -inp = map(str.strip, input()) -towels = [t.strip() for t in next(takewhile(bool, inp)).split(",")] -designs = [d for d in inp if d] - -# Construct trie -trie = {} -for towel in towels: - prev = None - curr = trie - for t in towel: - term, succ = curr.setdefault(t, (False, {})) - prev = curr - curr = succ - prev[towel[-1]] = (True, curr) - - -@cache -def steps(design, n=0): - if n == len(design): - return 1 - ways = 0 - curr = trie - for d, s in enumerate(design[n:], start=1): - if s not in curr: - return ways - term, curr = curr[s] - if term: - ways += steps(design, n + d) - return ways - - -silver = sum(map(bool, map(steps, designs))) -gold = sum(map(steps, designs)) - -print("silver:", silver) -print("gold:", gold) |
