chore(tools): AD-vejnet-værktøjer (45°-kurver, parkering, reparationer) brugt på savegame2 30/9
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
"""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})")
|
||||
Reference in New Issue
Block a user