binary-decision-diagram 1.4.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/main.yml +2 -2
- package/dist/es/abstract-node.js +45 -51
- package/dist/es/abstract-node.js.map +1 -1
- package/dist/es/branches.js +20 -22
- package/dist/es/branches.js.map +1 -1
- package/dist/es/create-bdd-from-truth-table.js +19 -57
- package/dist/es/create-bdd-from-truth-table.js.map +1 -1
- package/dist/es/ensure-correct-bdd.js +26 -27
- package/dist/es/ensure-correct-bdd.js.map +1 -1
- package/dist/es/fill-truth-table.js +3 -3
- package/dist/es/fill-truth-table.js.map +1 -1
- package/dist/es/find-similar-node.js +3 -3
- package/dist/es/find-similar-node.js.map +1 -1
- package/dist/es/internal-node.js +15 -35
- package/dist/es/internal-node.js.map +1 -1
- package/dist/es/leaf-node.js +14 -34
- package/dist/es/leaf-node.js.map +1 -1
- package/dist/es/minimal-string/bdd-to-minimal-string.js +15 -15
- package/dist/es/minimal-string/bdd-to-minimal-string.js.map +1 -1
- package/dist/es/minimal-string/bdd-to-simple-bdd.js +2 -2
- package/dist/es/minimal-string/bdd-to-simple-bdd.js.map +1 -1
- package/dist/es/minimal-string/minimal-string-to-simple-bdd.js +27 -27
- package/dist/es/minimal-string/minimal-string-to-simple-bdd.js.map +1 -1
- package/dist/es/minimal-string/resolve-with-simple-bdd.js +4 -4
- package/dist/es/minimal-string/resolve-with-simple-bdd.js.map +1 -1
- package/dist/es/minimal-string/string-format.js +7 -7
- package/dist/es/minimal-string/string-format.js.map +1 -1
- package/dist/es/optimize-brute-force.d.ts +4 -4
- package/dist/es/optimize-brute-force.js +88 -186
- package/dist/es/optimize-brute-force.js.map +1 -1
- package/dist/es/parents.js +19 -47
- package/dist/es/parents.js.map +1 -1
- package/dist/es/root-node.js +79 -133
- package/dist/es/root-node.js.map +1 -1
- package/dist/es/types.d.ts +9 -9
- package/dist/es/util.js +21 -39
- package/dist/es/util.js.map +1 -1
- package/dist/lib/abstract-node.js +48 -57
- package/dist/lib/abstract-node.js.map +1 -1
- package/dist/lib/branches.js +21 -27
- package/dist/lib/branches.js.map +1 -1
- package/dist/lib/create-bdd-from-truth-table.js +24 -66
- package/dist/lib/create-bdd-from-truth-table.js.map +1 -1
- package/dist/lib/ensure-correct-bdd.js +27 -33
- package/dist/lib/ensure-correct-bdd.js.map +1 -1
- package/dist/lib/fill-truth-table.js +6 -10
- package/dist/lib/fill-truth-table.js.map +1 -1
- package/dist/lib/find-similar-node.js +4 -8
- package/dist/lib/find-similar-node.js.map +1 -1
- package/dist/lib/index.js +13 -25
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/internal-node.js +18 -41
- package/dist/lib/internal-node.js.map +1 -1
- package/dist/lib/leaf-node.js +17 -40
- package/dist/lib/leaf-node.js.map +1 -1
- package/dist/lib/minimal-string/bdd-to-minimal-string.js +21 -26
- package/dist/lib/minimal-string/bdd-to-minimal-string.js.map +1 -1
- package/dist/lib/minimal-string/bdd-to-simple-bdd.js +4 -9
- package/dist/lib/minimal-string/bdd-to-simple-bdd.js.map +1 -1
- package/dist/lib/minimal-string/index.js +5 -17
- package/dist/lib/minimal-string/index.js.map +1 -1
- package/dist/lib/minimal-string/minimal-string-to-simple-bdd.js +30 -34
- package/dist/lib/minimal-string/minimal-string-to-simple-bdd.js.map +1 -1
- package/dist/lib/minimal-string/resolve-with-simple-bdd.js +6 -10
- package/dist/lib/minimal-string/resolve-with-simple-bdd.js.map +1 -1
- package/dist/lib/minimal-string/string-format.js +12 -19
- package/dist/lib/minimal-string/string-format.js.map +1 -1
- package/dist/lib/optimize-brute-force.d.ts +4 -4
- package/dist/lib/optimize-brute-force.js +93 -199
- package/dist/lib/optimize-brute-force.js.map +1 -1
- package/dist/lib/parents.js +19 -50
- package/dist/lib/parents.js.map +1 -1
- package/dist/lib/root-node.js +84 -141
- package/dist/lib/root-node.js.map +1 -1
- package/dist/lib/types.d.ts +9 -9
- package/dist/lib/types.js +1 -2
- package/dist/lib/util.js +36 -72
- package/dist/lib/util.js.map +1 -1
- package/package.json +8 -8
- package/tsconfig.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"string-format.js","sourceRoot":"","sources":["../../../src/minimal-string/string-format.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"string-format.js","sourceRoot":"","sources":["../../../src/minimal-string/string-format.ts"],"names":[],"mappings":"AAAA;;;;;;;EAOE;AAEF;;;;;;;;;;;;;;;;;;EAkBE;AAEF,6DAA6D;AAC7D,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC,CAAC,kCAAkC;AAGtE,MAAM,UAAU,cAAc,CAAC,KAAa;IACxC,MAAM,QAAQ,GAAG,gBAAgB,GAAG,KAAK,CAAC;IAC1C,OAAO,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAY;IACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACpC,OAAO,QAAQ,GAAG,gBAAgB,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAa;IACxC,MAAM,QAAQ,GAAG,gBAAgB,GAAG,KAAK,CAAC;IAC1C,OAAO,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;AACzC,CAAC;AAGD,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,CAAC,CAAC,kCAAkC;AAE5E,MAAM,UAAU,aAAa,CAAC,QAAgB;IAK1C,6CAA6C;IAC7C,IAAI,QAAQ,IAAI,GAAG,IAAI,QAAQ,IAAI,GAAG,EAAE;QACpC,QAAQ,GAAG,GAAG,CAAC;KAClB;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC3C,OAAO;QACH,IAAI;QACJ,QAAQ,EAAE,QAAQ,GAAG,CAAC;KACzB,CAAC;AACN,CAAC"}
|
|
@@ -4,12 +4,12 @@ import { RootNode } from './root-node';
|
|
|
4
4
|
* a function that is called each time
|
|
5
5
|
* a 'better' bdd was found
|
|
6
6
|
*/
|
|
7
|
-
export
|
|
7
|
+
export type OptmisiationCallback = (bdd: OptimisationResult) => void;
|
|
8
8
|
export interface OptimisationResult {
|
|
9
9
|
bdd: RootNode;
|
|
10
10
|
truthTable: TruthTable;
|
|
11
11
|
}
|
|
12
|
-
export
|
|
12
|
+
export type CompareResultsFunction = (a: RootNode, b: RootNode) => RootNode | Promise<RootNode>;
|
|
13
13
|
/**
|
|
14
14
|
* returns the bdd with less nodes
|
|
15
15
|
*/
|
|
@@ -28,10 +28,10 @@ export interface OptimizeBruteForceInput {
|
|
|
28
28
|
* and checking the resulting bdd
|
|
29
29
|
*/
|
|
30
30
|
export declare function optimizeBruteForce({ truthTable, iterations, onBetterBdd, compareResults, afterBddCreation, log }: OptimizeBruteForceInput): Promise<OptimisationResult>;
|
|
31
|
-
export
|
|
31
|
+
export type BooleanFunctionReorderMapping = {
|
|
32
32
|
[indexAfter: number]: number;
|
|
33
33
|
};
|
|
34
|
-
export
|
|
34
|
+
export type BooleanFunctionReorderMappingReverse = {
|
|
35
35
|
[indexBefore: number]: number;
|
|
36
36
|
};
|
|
37
37
|
export declare function shuffleBooleanOrdering(truthTable: TruthTable): {
|
|
@@ -1,75 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
-
function step(op) {
|
|
16
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
-
while (_) try {
|
|
18
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
-
switch (op[0]) {
|
|
21
|
-
case 0: case 1: t = op; break;
|
|
22
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
-
default:
|
|
26
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
-
if (t[2]) _.ops.pop();
|
|
31
|
-
_.trys.pop(); continue;
|
|
32
|
-
}
|
|
33
|
-
op = body.call(thisArg, _);
|
|
34
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
var __values = (this && this.__values) || function(o) {
|
|
39
|
-
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
40
|
-
if (m) return m.call(o);
|
|
41
|
-
if (o && typeof o.length === "number") return {
|
|
42
|
-
next: function () {
|
|
43
|
-
if (o && i >= o.length) o = void 0;
|
|
44
|
-
return { value: o && o[i++], done: !o };
|
|
45
|
-
}
|
|
46
|
-
};
|
|
47
|
-
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
48
|
-
};
|
|
49
|
-
var __read = (this && this.__read) || function (o, n) {
|
|
50
|
-
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
51
|
-
if (!m) return o;
|
|
52
|
-
var i = m.call(o), r, ar = [], e;
|
|
53
|
-
try {
|
|
54
|
-
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
55
|
-
}
|
|
56
|
-
catch (error) { e = { error: error }; }
|
|
57
|
-
finally {
|
|
58
|
-
try {
|
|
59
|
-
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
60
|
-
}
|
|
61
|
-
finally { if (e) throw e.error; }
|
|
62
|
-
}
|
|
63
|
-
return ar;
|
|
64
|
-
};
|
|
65
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
66
|
-
exports.getArrayWithIndexes = exports.changeKeyOrder = exports.shuffleBooleanOrdering = exports.optimizeBruteForce = exports.defaultCompareResults = void 0;
|
|
67
|
-
var create_bdd_from_truth_table_1 = require("./create-bdd-from-truth-table");
|
|
68
|
-
var util_1 = require("./util");
|
|
1
|
+
import { createBddFromTruthTable } from './create-bdd-from-truth-table';
|
|
2
|
+
import { firstKeyOfMap, shuffleArray, lastOfArray } from './util';
|
|
69
3
|
/**
|
|
70
4
|
* returns the bdd with less nodes
|
|
71
5
|
*/
|
|
72
|
-
|
|
6
|
+
export const defaultCompareResults = function (a, b) {
|
|
73
7
|
if (a.countNodes() <= b.countNodes()) {
|
|
74
8
|
return a;
|
|
75
9
|
}
|
|
@@ -77,162 +11,122 @@ var defaultCompareResults = function (a, b) {
|
|
|
77
11
|
return b;
|
|
78
12
|
}
|
|
79
13
|
};
|
|
80
|
-
exports.defaultCompareResults = defaultCompareResults;
|
|
81
14
|
/**
|
|
82
15
|
* optimises the ordering of the boolean functions
|
|
83
16
|
* by randomly sorting the array
|
|
84
17
|
* and checking the resulting bdd
|
|
85
18
|
*/
|
|
86
|
-
function optimizeBruteForce(
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
.forEach(function (level) {
|
|
123
|
-
var newLevel = shuffledOrdering.mappingBeforeToAfter[level];
|
|
124
|
-
newSortedLevels.push(newLevel);
|
|
125
|
-
var levelSet = new Set();
|
|
126
|
-
newNodesByLevel.set(newLevel, levelSet);
|
|
127
|
-
nextBdd.getNodesOfLevel(level).forEach(function (node) {
|
|
128
|
-
node.level = newLevel;
|
|
129
|
-
levelSet.add(node);
|
|
130
|
-
});
|
|
131
|
-
});
|
|
132
|
-
lastLevelSet = new Set();
|
|
133
|
-
nextBdd.getNodesOfLevel(lastLevel).forEach(function (node) { return lastLevelSet.add(node); });
|
|
134
|
-
newNodesByLevel.set(lastLevel, lastLevelSet);
|
|
135
|
-
newSortedLevels.push(lastLevel);
|
|
136
|
-
nextBdd.nodesByLevel = newNodesByLevel;
|
|
137
|
-
nextBdd.levels = newSortedLevels;
|
|
138
|
-
afterBddCreation(nextBdd);
|
|
139
|
-
nextBdd.minimize();
|
|
140
|
-
if (log) {
|
|
141
|
-
console.log('got new bdd with nodes amount of ' + nextBdd.countNodes());
|
|
142
|
-
// nextBdd.log();
|
|
143
|
-
console.dir(shuffledOrdering.mappingBeforeToAfter);
|
|
144
|
-
}
|
|
145
|
-
return [4 /*yield*/, compareResults(currentBestResult.bdd, nextBdd)];
|
|
146
|
-
case 1:
|
|
147
|
-
betterBdd = _h.sent();
|
|
148
|
-
if (betterBdd.type !== 'RootNode') {
|
|
149
|
-
throw new Error('compareResults did not return a bdd');
|
|
150
|
-
}
|
|
151
|
-
if (betterBdd === nextBdd) {
|
|
152
|
-
if (log) {
|
|
153
|
-
console.log('#'.repeat(50));
|
|
154
|
-
console.log('found better bdd ' + nextBdd.countNodes());
|
|
155
|
-
}
|
|
156
|
-
currentBestResult = {
|
|
157
|
-
bdd: nextBdd,
|
|
158
|
-
truthTable: shuffledOrdering.newTable
|
|
159
|
-
};
|
|
160
|
-
onBetterBdd(currentBestResult);
|
|
161
|
-
}
|
|
162
|
-
return [2 /*return*/];
|
|
163
|
-
}
|
|
164
|
-
});
|
|
165
|
-
};
|
|
166
|
-
_g.label = 1;
|
|
167
|
-
case 1:
|
|
168
|
-
if (!(t < iterations)) return [3 /*break*/, 3];
|
|
169
|
-
return [5 /*yield**/, _loop_1()];
|
|
170
|
-
case 2:
|
|
171
|
-
_g.sent();
|
|
172
|
-
return [3 /*break*/, 1];
|
|
173
|
-
case 3: return [2 /*return*/, currentBestResult];
|
|
174
|
-
}
|
|
19
|
+
export async function optimizeBruteForce({ truthTable, iterations = Infinity, onBetterBdd = () => null, compareResults = defaultCompareResults, afterBddCreation = () => null, log = false }) {
|
|
20
|
+
const initialBdd = createBddFromTruthTable(truthTable);
|
|
21
|
+
afterBddCreation(initialBdd);
|
|
22
|
+
initialBdd.minimize();
|
|
23
|
+
let currentBestResult = {
|
|
24
|
+
truthTable,
|
|
25
|
+
bdd: initialBdd
|
|
26
|
+
};
|
|
27
|
+
if (log) {
|
|
28
|
+
initialBdd.log();
|
|
29
|
+
console.log('initial nodes amount: ' + initialBdd.countNodes());
|
|
30
|
+
}
|
|
31
|
+
let t = 0;
|
|
32
|
+
while (t < iterations) {
|
|
33
|
+
t++;
|
|
34
|
+
if (log) {
|
|
35
|
+
console.log('-'.repeat(50));
|
|
36
|
+
console.log('optimizeBruteForce() itterate once');
|
|
37
|
+
}
|
|
38
|
+
const shuffledOrdering = shuffleBooleanOrdering(truthTable);
|
|
39
|
+
const nextBdd = createBddFromTruthTable(shuffledOrdering.newTable);
|
|
40
|
+
// change the levels of each node
|
|
41
|
+
const newNodesByLevel = new Map();
|
|
42
|
+
const lastLevel = lastOfArray(nextBdd.getLevels());
|
|
43
|
+
const newSortedLevels = [];
|
|
44
|
+
nextBdd.getLevels()
|
|
45
|
+
.filter(level => level !== lastLevel)
|
|
46
|
+
.forEach(level => {
|
|
47
|
+
const newLevel = shuffledOrdering.mappingBeforeToAfter[level];
|
|
48
|
+
newSortedLevels.push(newLevel);
|
|
49
|
+
const levelSet = new Set();
|
|
50
|
+
newNodesByLevel.set(newLevel, levelSet);
|
|
51
|
+
nextBdd.getNodesOfLevel(level).forEach(node => {
|
|
52
|
+
node.level = newLevel;
|
|
53
|
+
levelSet.add(node);
|
|
54
|
+
});
|
|
175
55
|
});
|
|
176
|
-
|
|
56
|
+
const lastLevelSet = new Set();
|
|
57
|
+
nextBdd.getNodesOfLevel(lastLevel).forEach(node => lastLevelSet.add(node));
|
|
58
|
+
newNodesByLevel.set(lastLevel, lastLevelSet);
|
|
59
|
+
newSortedLevels.push(lastLevel);
|
|
60
|
+
nextBdd.nodesByLevel = newNodesByLevel;
|
|
61
|
+
nextBdd.levels = newSortedLevels;
|
|
62
|
+
afterBddCreation(nextBdd);
|
|
63
|
+
nextBdd.minimize();
|
|
64
|
+
if (log) {
|
|
65
|
+
console.log('got new bdd with nodes amount of ' + nextBdd.countNodes());
|
|
66
|
+
// nextBdd.log();
|
|
67
|
+
console.dir(shuffledOrdering.mappingBeforeToAfter);
|
|
68
|
+
}
|
|
69
|
+
const betterBdd = await compareResults(currentBestResult.bdd, nextBdd);
|
|
70
|
+
if (betterBdd.type !== 'RootNode') {
|
|
71
|
+
throw new Error('compareResults did not return a bdd');
|
|
72
|
+
}
|
|
73
|
+
if (betterBdd === nextBdd) {
|
|
74
|
+
if (log) {
|
|
75
|
+
console.log('#'.repeat(50));
|
|
76
|
+
console.log('found better bdd ' + nextBdd.countNodes());
|
|
77
|
+
}
|
|
78
|
+
currentBestResult = {
|
|
79
|
+
bdd: nextBdd,
|
|
80
|
+
truthTable: shuffledOrdering.newTable
|
|
81
|
+
};
|
|
82
|
+
onBetterBdd(currentBestResult);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return currentBestResult;
|
|
177
86
|
}
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
var mappingBeforeToAfter = {};
|
|
186
|
-
shuffled.forEach(function (indexBefore, indexAfter) {
|
|
87
|
+
export function shuffleBooleanOrdering(truthTable) {
|
|
88
|
+
const firstKey = firstKeyOfMap(truthTable);
|
|
89
|
+
const arrayWithIndexes = getArrayWithIndexes(firstKey.length);
|
|
90
|
+
const shuffled = shuffleArray(arrayWithIndexes);
|
|
91
|
+
const mapping = {};
|
|
92
|
+
const mappingBeforeToAfter = {};
|
|
93
|
+
shuffled.forEach((indexBefore, indexAfter) => {
|
|
187
94
|
mapping[indexAfter] = indexBefore;
|
|
188
95
|
mappingBeforeToAfter[indexBefore] = indexAfter;
|
|
189
96
|
});
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
var newKey = changeKeyOrder(key, mapping);
|
|
195
|
-
newTable.set(newKey, value);
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
199
|
-
finally {
|
|
200
|
-
try {
|
|
201
|
-
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
202
|
-
}
|
|
203
|
-
finally { if (e_1) throw e_1.error; }
|
|
97
|
+
const newTable = new Map();
|
|
98
|
+
for (const [key, value] of truthTable.entries()) {
|
|
99
|
+
const newKey = changeKeyOrder(key, mapping);
|
|
100
|
+
newTable.set(newKey, value);
|
|
204
101
|
}
|
|
205
102
|
return {
|
|
206
|
-
newTable
|
|
207
|
-
mapping
|
|
208
|
-
mappingBeforeToAfter
|
|
103
|
+
newTable,
|
|
104
|
+
mapping,
|
|
105
|
+
mappingBeforeToAfter
|
|
209
106
|
};
|
|
210
107
|
}
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
var chars = oldKey
|
|
108
|
+
export function changeKeyOrder(oldKey, mappingBeforeToAfter) {
|
|
109
|
+
const chars = oldKey
|
|
214
110
|
.split('')
|
|
215
|
-
.map(
|
|
111
|
+
.map((char, indexBefore) => {
|
|
216
112
|
return {
|
|
217
|
-
char
|
|
218
|
-
indexBefore
|
|
113
|
+
char,
|
|
114
|
+
indexBefore,
|
|
219
115
|
indexAfter: mappingBeforeToAfter[indexBefore]
|
|
220
116
|
};
|
|
221
117
|
})
|
|
222
|
-
.sort(
|
|
223
|
-
.map(
|
|
118
|
+
.sort((a, b) => a.indexAfter - b.indexAfter)
|
|
119
|
+
.map(charObj => charObj.char)
|
|
224
120
|
.join('');
|
|
225
121
|
return chars;
|
|
226
122
|
}
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
var last = 0;
|
|
123
|
+
export function getArrayWithIndexes(size) {
|
|
124
|
+
const ret = [];
|
|
125
|
+
let last = 0;
|
|
231
126
|
while (last < size) {
|
|
232
127
|
ret.push(last);
|
|
233
128
|
last++;
|
|
234
129
|
}
|
|
235
130
|
return ret;
|
|
236
131
|
}
|
|
237
|
-
exports.getArrayWithIndexes = getArrayWithIndexes;
|
|
238
132
|
//# sourceMappingURL=optimize-brute-force.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"optimize-brute-force.js","sourceRoot":"","sources":["../../src/optimize-brute-force.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"optimize-brute-force.js","sourceRoot":"","sources":["../../src/optimize-brute-force.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/parents.js
CHANGED
|
@@ -1,69 +1,38 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __values = (this && this.__values) || function(o) {
|
|
3
|
-
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
4
|
-
if (m) return m.call(o);
|
|
5
|
-
if (o && typeof o.length === "number") return {
|
|
6
|
-
next: function () {
|
|
7
|
-
if (o && i >= o.length) o = void 0;
|
|
8
|
-
return { value: o && o[i++], done: !o };
|
|
9
|
-
}
|
|
10
|
-
};
|
|
11
|
-
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
12
|
-
};
|
|
13
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
-
exports.Parents = void 0;
|
|
15
1
|
/**
|
|
16
2
|
* represents the parents of a single node
|
|
17
3
|
*/
|
|
18
|
-
|
|
19
|
-
|
|
4
|
+
export class Parents {
|
|
5
|
+
constructor(node) {
|
|
20
6
|
this.node = node;
|
|
21
7
|
this.parents = new Set();
|
|
22
8
|
}
|
|
23
|
-
|
|
9
|
+
remove(node) {
|
|
24
10
|
this.parents.delete(node);
|
|
25
11
|
if (this.parents.size === 0) {
|
|
26
12
|
this.node.remove();
|
|
27
13
|
}
|
|
28
|
-
}
|
|
29
|
-
|
|
14
|
+
}
|
|
15
|
+
getAll() {
|
|
30
16
|
return Array.from(this.parents);
|
|
31
|
-
}
|
|
32
|
-
|
|
17
|
+
}
|
|
18
|
+
add(node) {
|
|
33
19
|
if (this.node.level === node.level) {
|
|
34
20
|
throw new Error('a node cannot be parent of a node with the same level');
|
|
35
21
|
}
|
|
36
22
|
this.parents.add(node);
|
|
37
|
-
}
|
|
38
|
-
|
|
23
|
+
}
|
|
24
|
+
has(node) {
|
|
39
25
|
return this.parents.has(node);
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
for (var _b = __values(this.parents), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
46
|
-
var parent_1 = _c.value;
|
|
47
|
-
ret.push(parent_1.id);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
51
|
-
finally {
|
|
52
|
-
try {
|
|
53
|
-
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
54
|
-
}
|
|
55
|
-
finally { if (e_1) throw e_1.error; }
|
|
26
|
+
}
|
|
27
|
+
toString() {
|
|
28
|
+
const ret = [];
|
|
29
|
+
for (const parent of this.parents) {
|
|
30
|
+
ret.push(parent.id);
|
|
56
31
|
}
|
|
57
32
|
return ret.join(', ');
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
enumerable: false,
|
|
64
|
-
configurable: true
|
|
65
|
-
});
|
|
66
|
-
return Parents;
|
|
67
|
-
}());
|
|
68
|
-
exports.Parents = Parents;
|
|
33
|
+
}
|
|
34
|
+
get size() {
|
|
35
|
+
return this.parents.size;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
69
38
|
//# sourceMappingURL=parents.js.map
|
package/dist/lib/parents.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parents.js","sourceRoot":"","sources":["../../src/parents.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"parents.js","sourceRoot":"","sources":["../../src/parents.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,MAAM,OAAO,OAAO;IAIhB,YACW,IAAiB;QAAjB,SAAI,GAAJ,IAAI,CAAa;QAHpB,YAAO,GAAqB,IAAI,GAAG,EAAE,CAAC;IAI1C,CAAC;IAEE,MAAM,CAAC,IAAiB;QAC3B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAE1B,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,EAAE;YACzB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;SACtB;IACL,CAAC;IAEM,MAAM;QACT,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IAEM,GAAG,CAAC,IAAiB;QACxB,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE;YAChC,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;SAC5E;QACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAEM,GAAG,CAAC,IAAiB;QACxB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,QAAQ;QACJ,MAAM,GAAG,GAAa,EAAE,CAAC;QACzB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE;YAC/B,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;SACvB;QACD,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,IAAI,IAAI;QACJ,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC7B,CAAC;CACJ"}
|