!7 cprint { start-thread { S rule = "revealing secret opening preparation => he reveals his secret opening preparation"; LS sides = splitAtDoubleArrow(rule); SS data = listToMapWithKeyMaker(sides, i -> str(i+1)); new LineCompCompressor comp; comp.byteMode = true; comp.loadTexts(data); comp.run(); //print(comp.asText()); lcPrintSubstrings(comp); // find pairs appearing on both sides //print(multiSetDuplicates(multiSetMapToMultiSet(lcPairsToFiles(comp))); print("top-level encodings", values(comp.finalEncodings)); print("expanded encodings", mapValuesToList(comp.finalEncodings, l -> join("|", map(l, i -> comp.itemToString(i))))); // simpler version: just take items appearing in both top-level encodings LL encodings = valuesList(comp.finalEncodings); Set inBoth = intersectSets(asLinkedHashSet(first(encodings)), second(encodings)); print(+inBoth); print("renumbered", lcRenumberTopLevelEncodings(comp)); print("simplified & renumbered", lcRenumberTopLevelEncodings(lcRenumberTopLevelEncodings_simplify(comp.finalEncodings)); } }