Day 19 (glamorized)
This commit is contained in:
@@ -16,19 +16,18 @@ def yield_rule(line, rule):
|
|||||||
|
|
||||||
def check(line, idx):
|
def check(line, idx):
|
||||||
rs = rules[idx]
|
rs = rules[idx]
|
||||||
if isinstance(rs, str):
|
if not isinstance(rs, str):
|
||||||
if line.startswith(rs):
|
|
||||||
yield line[len(rs):]
|
|
||||||
else:
|
|
||||||
for rule in rules[idx]:
|
for rule in rules[idx]:
|
||||||
yield from yield_rule(line, rule)
|
yield from yield_rule(line, rule)
|
||||||
|
elif line.startswith(rs):
|
||||||
|
yield line[len(rs):]
|
||||||
|
|
||||||
|
|
||||||
for line in lines:
|
for line in lines:
|
||||||
if ":" in line:
|
if ":" in line:
|
||||||
idx, r = line.split(": ")
|
idx, r = line.split(": ")
|
||||||
idx = int(idx)
|
idx = int(idx)
|
||||||
r = r[1:len(r)-1] if r.startswith('"') else [[int(num) for num in x.split()] for x in r.split(" | ")]
|
r = r[1:len(r)-1] if r.startswith('"') else [list(map(int, x.split())) for x in r.split(" | ")]
|
||||||
rules[idx] = r
|
rules[idx] = r
|
||||||
elif line != "":
|
elif line != "":
|
||||||
for rest in check(line, 0):
|
for rest in check(line, 0):
|
||||||
|
|||||||
@@ -18,12 +18,11 @@ def check(line, idx, depth):
|
|||||||
if depth < 0:
|
if depth < 0:
|
||||||
return
|
return
|
||||||
rs = rules[idx]
|
rs = rules[idx]
|
||||||
if isinstance(rs, str):
|
if not isinstance(rs, str):
|
||||||
if line.startswith(rs):
|
|
||||||
yield line[len(rs):]
|
|
||||||
else:
|
|
||||||
for rule in rules[idx]:
|
for rule in rules[idx]:
|
||||||
yield from yield_rule(line, rule, depth)
|
yield from yield_rule(line, rule, depth)
|
||||||
|
elif line.startswith(rs):
|
||||||
|
yield line[len(rs):]
|
||||||
|
|
||||||
|
|
||||||
for line in lines:
|
for line in lines:
|
||||||
@@ -32,7 +31,7 @@ for line in lines:
|
|||||||
if ":" in line:
|
if ":" in line:
|
||||||
idx, r = line.split(": ")
|
idx, r = line.split(": ")
|
||||||
idx = int(idx)
|
idx = int(idx)
|
||||||
r = r[1:len(r)-1] if r.startswith('"') else [[int(num) for num in x.split()] for x in r.split(" | ")]
|
r = r[1:len(r)-1] if r.startswith('"') else [list(map(int, x.split())) for x in r.split(" | ")]
|
||||||
rules[idx] = r
|
rules[idx] = r
|
||||||
elif line != "":
|
elif line != "":
|
||||||
for rest in check(line, 0, len(line)):
|
for rest in check(line, 0, len(line)):
|
||||||
|
|||||||
Reference in New Issue
Block a user