from lib import get_data data = get_data(__file__) def max_joltage(xs: str, target_len: int) -> int: def dynamic(xs: str) -> dict[int, str]: if len(xs) == 0: return {0: ""} rs = dynamic(xs[1:]) for i in range(target_len, 0, -1): if not (i - 1) in rs: continue nv = int(xs[0] + rs[i - 1]) if not i in rs: rs[i] = str(nv) elif nv > int(rs[i]): rs[i] = str(nv) return rs rs = dynamic(xs) return int(rs[target_len]) r1 = 0 r2 = 0 for line in data.splitlines(): r1 += max_joltage(line, 2) r2 += max_joltage(line, 12) print(r1) print(r2)