47 lines
1.2 KiB
Python
47 lines
1.2 KiB
Python
input = open("input", 'r').read().split("\n\n")
|
|
|
|
# d = [line for line in input]
|
|
rl = [line.split("|") for line in input[0].split("\n")]
|
|
d = [[int(v) for v in line.split(",") if v != ""] for line in input[1].split("\n") if line != ""]
|
|
|
|
r = {}
|
|
|
|
for rule in rl:
|
|
f,s = rule
|
|
f,s = int(f),int(s)
|
|
if s in r:
|
|
r[s].add(f)
|
|
else:
|
|
r[s] = {f}
|
|
|
|
def run(p2=False):
|
|
sm = 0
|
|
for p in d:
|
|
sp = set(p)
|
|
seen = set()
|
|
if p2:
|
|
while len(seen) != len(sp):
|
|
seen = set()
|
|
for i, v in enumerate(p):
|
|
reqs = sp & (r[v] if v in r else set())
|
|
if reqs > seen:
|
|
ind = max([p.index(j) for j in reqs])
|
|
p[i], p[ind] = p[ind], p[i]
|
|
break
|
|
seen.add(v)
|
|
sm += p[(len(p)//2)]
|
|
else:
|
|
for v in p:
|
|
reqs = sp & (r[v] if v in r else set())
|
|
if reqs > seen:
|
|
break
|
|
seen.add(v)
|
|
if len(seen) == len(sp):
|
|
sm += p[(len(p)//2)]
|
|
return sm
|
|
|
|
|
|
p1 = run()
|
|
p2 = run(True)
|
|
print(p1)
|
|
print(p2 - p1)
|