Files

37 lines
1.3 KiB
Python

"""Fjern kurver som ingen markør-rute bruger, og omnummerér nye noder fortløbende."""
import sys, json, re, collections
sys.path.insert(0, __file__.rsplit("/", 1)[0])
import adfix
from adsmooth import read, write
from adroutes import transit, dijkstra
src, dst, n0 = sys.argv[1], sys.argv[2], int(sys.argv[3])
logs = sys.argv[4:]
doc = read(src); N = doc["N"]
mks = [m for m in adfix.markers(doc) if m in N]
T = transit(N); used = collections.Counter()
for st in mks:
best, pre = dijkstra(N, T, st)
for tg in mks:
if tg != st and tg in best:
for x in adfix.node_path(best, pre, tg):
if x > n0:
used[x] += 1
drop = set()
for lp in logs:
for p in json.load(open(lp))["plans"]:
inner = p["nodes"][1:-1]
if inner and not any(used[x] for x in inner):
drop.update(inner)
for i in drop:
del N[i]
for n in N.values():
n["out"] = [o for o in n["out"] if o not in drop]
n["inc"] = [o for o in n["inc"] if o not in drop]
old_new = sorted(i for i in N if i > n0)
remap = {o: n0 + 1 + k for k, o in enumerate(old_new)}
f = lambda i: remap.get(i, i)
doc["N"] = {f(i): dict(n, out=[f(o) for o in n["out"]], inc=[f(o) for o in n["inc"]]) for i, n in N.items()}
write(doc, dst)
print(f"fjernet {len(drop)} ubrugte kurvenoder; noder nu {len(doc['N'])} (nye: {len(doc['N']) - n0})")