Revert last commit
All checks were successful
continuous-integration/drone/push Build is passing

eval() is slow and not safe to use against not previously checked input.
This commit is contained in:
2021-12-18 15:16:03 +01:00
parent a6a56cb319
commit 3de570f27f

View File

@@ -2,6 +2,25 @@
from pathlib import Path 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): def explode_to_left(n, l):
(left, right) = n (left, right) = n
res = True res = True
@@ -104,11 +123,10 @@ def part_1(input):
n = None n = None
for line in input: for line in input:
line = line.rstrip() line = line.rstrip()
nn = eval(line.replace('[', '(').replace(']', ')'))
if not n: if not n:
n = nn n = parse(line)
continue continue
n = (n, nn) n = (n, parse(line))
res = True res = True
while res: while res:
while res: while res:
@@ -122,7 +140,8 @@ def part_2(input):
result = 0 result = 0
nbrs = set() nbrs = set()
for line in input: for line in input:
nbrs.add(eval(line.rstrip().replace('[', '(').replace(']', ')'))) line = line.rstrip()
nbrs.add(parse(line))
for n1 in nbrs: for n1 in nbrs:
for n2 in nbrs: for n2 in nbrs:
if n1 == n2: if n1 == n2: