diff --git a/day-18/day-18.py b/day-18/day-18.py index 458bfb7..3b1bd5b 100644 --- a/day-18/day-18.py +++ b/day-18/day-18.py @@ -2,6 +2,25 @@ from pathlib import Path +def parse(line): + if ',' not in line: + return int(line) + line = line[1:-1] + level = 0 + split_idx = 0 + for i, c in enumerate(line): + if '[' == c: + level += 1 + elif ']' == c: + level -= 1 + elif 0 == level and ',' == c: + split_idx = i + break + left = parse(line[:split_idx]) + right = parse(line[split_idx + 1:]) + return (left, right) + + def explode_to_left(n, l): (left, right) = n res = True @@ -104,11 +123,10 @@ def part_1(input): n = None for line in input: line = line.rstrip() - nn = eval(line.replace('[', '(').replace(']', ')')) if not n: - n = nn + n = parse(line) continue - n = (n, nn) + n = (n, parse(line)) res = True while res: while res: @@ -122,7 +140,8 @@ def part_2(input): result = 0 nbrs = set() for line in input: - nbrs.add(eval(line.rstrip().replace('[', '(').replace(']', ')'))) + line = line.rstrip() + nbrs.add(parse(line)) for n1 in nbrs: for n2 in nbrs: if n1 == n2: