Initial tries to use a while loop instead of
recursion gave a classic AoC situation: test cases
worked, but not actual AoC puzzle input.
Turns out I only considererd removing the longest
pattern form the design, rather than consider all
possible removals.
Some Python goodies in here:
- `"abcdefgh".startswith("abc")` instead of regexp.
- removeprefix() is nice, and in some cases more
readable. `"abcdefgh".removeprefix("abc")` vs
`"abcdefgh[3:]"
- To speed things up for pt 2, functools is used
which requires a dict to be hashed as a tuple.
If one wish to solve this without recursion, a
BFS solution is most likely the way to go.
def ispossible(design, patterns):
Q = [design]
possible = 0
while Q:
remaining = Q.pop(0)
if not remaining:
possible += 1
continue
for pattern in patterns[remaining[0]]:
if remaining.startswith(pattern):
Q.append(remaining.removeprefix(pattern))
return possible