diff options
-rw-r--r-- | 2023/12/solve.py | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/2023/12/solve.py b/2023/12/solve.py new file mode 100644 index 0000000..bd9da6d --- /dev/null +++ b/2023/12/solve.py @@ -0,0 +1,43 @@ +L = [ + (p := l.strip().split(" ")) and (p[0], [int(n) for n in p[1].split(",")]) + for l in open("input").readlines() +] + + +def groups(pat): + gs = [] + c = [] + for p in pat: + if p in "#?": + c.append(p) + elif c: + gs.append(c) + c = [] + return gs[::-1] + + +def arrangements(pat, sol): + arr = 1 + + gs = groups(pat) + for i, g in enumerate(gs): + if len(g) == sol[0]: # ???.[#??] 1,1,[3] + del sol[0] + continue + if g.count("#") == 0: + if len(g) == len(sol) + 1 and len(sol) == sum(sol): # [???].### [1,1],3 + break + # if len(g) > len(sol) + print(g, sol) + + return arr + + +def part1(): + res = 0 + for pat, sol in L: + res += arrangements(f".{pat}.", sol[::-1]) + print(res) + + +part1() |