#!/usr/bin/env python3 """Машинная карта сдвигов, заказанная §2.5: set-diff по id и номеру, same/moved/gone/new.""" import json, sys def load(p): m = json.load(open(p, encoding="utf-8")) return {c["id"]: c["number"] for c in m["chapters"]}, m def diff(before_path, after_path, source): a, ma = load(before_path) b, mb = load(after_path) same = sorted(i for i in a if i in b and a[i] == b[i]) moved = sorted(i for i in a if i in b and a[i] != b[i]) gone = sorted(i for i in a if i not in b) new = sorted(i for i in b if i not in a) return { "source": source, "before": {"chapters": len(a), "structure": ma.get("structure"), "key": ma.get("key")}, "after": {"chapters": len(b), "structure": mb.get("structure"), "key": mb.get("key")}, "same": len(same), "moved": len(moved), "gone": len(gone), "new": len(new), "moved_detail": [{"id": i, "from": a[i], "to": b[i]} for i in moved][:200], "gone_ids": gone[:200], "new_ids": new[:200], "cut_unchanged": not moved and not gone and not new, } if __name__ == "__main__": out = [diff(*t) for t in (sys.argv[1:][i:i+3] for i in range(0, len(sys.argv)-1, 3))] json.dump(out, sys.stdout, ensure_ascii=False, indent=1) print()