37 lines
1.3 KiB
Python
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})")
|