binary-decision-diagram 1.4.0 → 2.0.1
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 +47 -52
- package/dist/lib/abstract-node.js.map +1 -1
- package/dist/lib/branches.js +20 -21
- package/dist/lib/branches.js.map +1 -1
- package/dist/lib/create-bdd-from-truth-table.js +23 -61
- package/dist/lib/create-bdd-from-truth-table.js.map +1 -1
- package/dist/lib/ensure-correct-bdd.js +26 -27
- package/dist/lib/ensure-correct-bdd.js.map +1 -1
- package/dist/lib/fill-truth-table.js +4 -4
- package/dist/lib/fill-truth-table.js.map +1 -1
- package/dist/lib/find-similar-node.js +3 -3
- package/dist/lib/find-similar-node.js.map +1 -1
- package/dist/lib/index.js +5 -1
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/internal-node.js +18 -37
- package/dist/lib/internal-node.js.map +1 -1
- package/dist/lib/leaf-node.js +17 -36
- package/dist/lib/leaf-node.js.map +1 -1
- package/dist/lib/minimal-string/bdd-to-minimal-string.js +17 -17
- package/dist/lib/minimal-string/bdd-to-minimal-string.js.map +1 -1
- package/dist/lib/minimal-string/bdd-to-simple-bdd.js +2 -2
- package/dist/lib/minimal-string/bdd-to-simple-bdd.js.map +1 -1
- package/dist/lib/minimal-string/index.js +5 -1
- package/dist/lib/minimal-string/index.js.map +1 -1
- package/dist/lib/minimal-string/minimal-string-to-simple-bdd.js +29 -29
- package/dist/lib/minimal-string/minimal-string-to-simple-bdd.js.map +1 -1
- package/dist/lib/minimal-string/resolve-with-simple-bdd.js +5 -5
- package/dist/lib/minimal-string/resolve-with-simple-bdd.js.map +1 -1
- package/dist/lib/minimal-string/string-format.js +5 -5
- 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 +90 -188
- package/dist/lib/optimize-brute-force.js.map +1 -1
- package/dist/lib/parents.js +19 -46
- package/dist/lib/parents.js.map +1 -1
- package/dist/lib/root-node.js +83 -136
- package/dist/lib/root-node.js.map +1 -1
- package/dist/lib/types.d.ts +9 -9
- package/dist/lib/util.js +21 -39
- package/dist/lib/util.js.map +1 -1
- package/package.json +9 -9
- package/tsconfig.json +2 -2
package/dist/lib/root-node.js
CHANGED
|
@@ -1,145 +1,104 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __extends = (this && this.__extends) || (function () {
|
|
3
|
-
var extendStatics = function (d, b) {
|
|
4
|
-
extendStatics = Object.setPrototypeOf ||
|
|
5
|
-
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
6
|
-
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
7
|
-
return extendStatics(d, b);
|
|
8
|
-
};
|
|
9
|
-
return function (d, b) {
|
|
10
|
-
if (typeof b !== "function" && b !== null)
|
|
11
|
-
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
12
|
-
extendStatics(d, b);
|
|
13
|
-
function __() { this.constructor = d; }
|
|
14
|
-
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
15
|
-
};
|
|
16
|
-
})();
|
|
17
|
-
var __values = (this && this.__values) || function(o) {
|
|
18
|
-
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
19
|
-
if (m) return m.call(o);
|
|
20
|
-
if (o && typeof o.length === "number") return {
|
|
21
|
-
next: function () {
|
|
22
|
-
if (o && i >= o.length) o = void 0;
|
|
23
|
-
return { value: o && o[i++], done: !o };
|
|
24
|
-
}
|
|
25
|
-
};
|
|
26
|
-
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
27
|
-
};
|
|
28
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
3
|
exports.RootNode = void 0;
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
_this.nodesByLevel.set(0, level0Set);
|
|
45
|
-
return _this;
|
|
4
|
+
const abstract_node_1 = require("./abstract-node");
|
|
5
|
+
const branches_1 = require("./branches");
|
|
6
|
+
const util_1 = require("./util");
|
|
7
|
+
const minimal_string_1 = require("./minimal-string");
|
|
8
|
+
class RootNode extends abstract_node_1.AbstractNode {
|
|
9
|
+
constructor() {
|
|
10
|
+
super(0, null, 'RootNode');
|
|
11
|
+
this.branches = new branches_1.Branches(this);
|
|
12
|
+
this.levels = [];
|
|
13
|
+
this.nodesByLevel = new Map();
|
|
14
|
+
this.levels.push(0);
|
|
15
|
+
const level0Set = new Set();
|
|
16
|
+
level0Set.add(this);
|
|
17
|
+
this.nodesByLevel.set(0, level0Set);
|
|
46
18
|
}
|
|
47
|
-
|
|
48
|
-
|
|
19
|
+
addNode(node) {
|
|
20
|
+
const level = node.level;
|
|
49
21
|
if (!this.levels.includes(level)) {
|
|
50
22
|
this.levels.push(level);
|
|
51
23
|
}
|
|
52
24
|
this.ensureLevelSetExists(level);
|
|
53
|
-
|
|
25
|
+
const set = this.nodesByLevel.get(level);
|
|
54
26
|
set === null || set === void 0 ? void 0 : set.add(node);
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
|
|
27
|
+
}
|
|
28
|
+
removeNode(node) {
|
|
29
|
+
const set = this.nodesByLevel.get(node.level);
|
|
58
30
|
if (!set.has(node)) {
|
|
59
31
|
throw new Error('removed non-existing node ' + node.id);
|
|
60
32
|
}
|
|
61
33
|
set.delete(node);
|
|
62
|
-
}
|
|
63
|
-
|
|
34
|
+
}
|
|
35
|
+
ensureLevelSetExists(level) {
|
|
64
36
|
if (!this.nodesByLevel.has(level)) {
|
|
65
37
|
this.nodesByLevel.set(level, new Set());
|
|
66
38
|
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
return Array.from(this.levels).sort(
|
|
70
|
-
}
|
|
71
|
-
|
|
39
|
+
}
|
|
40
|
+
getLevels() {
|
|
41
|
+
return Array.from(this.levels).sort((a, b) => a - b);
|
|
42
|
+
}
|
|
43
|
+
getNodesOfLevel(level) {
|
|
72
44
|
this.ensureLevelSetExists(level);
|
|
73
|
-
|
|
45
|
+
const set = this.nodesByLevel.get(level);
|
|
74
46
|
return Array.from(set);
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
var nodesAmount = _this.getNodesOfLevel(level).length;
|
|
47
|
+
}
|
|
48
|
+
countNodes() {
|
|
49
|
+
let ret = 0;
|
|
50
|
+
this.getLevels().forEach(level => {
|
|
51
|
+
const nodesAmount = this.getNodesOfLevel(level).length;
|
|
81
52
|
ret = ret + nodesAmount;
|
|
82
53
|
});
|
|
83
54
|
return ret;
|
|
84
|
-
}
|
|
55
|
+
}
|
|
85
56
|
/**
|
|
86
57
|
* applies the reduction rules to the whole bdd
|
|
87
58
|
*/
|
|
88
|
-
|
|
89
|
-
var e_1, _a;
|
|
90
|
-
if (logState === void 0) { logState = false; }
|
|
59
|
+
minimize(logState = false) {
|
|
91
60
|
// console.log('minimize(): START ###############');
|
|
92
|
-
|
|
61
|
+
let done = false;
|
|
93
62
|
while (!done) {
|
|
94
63
|
if (logState) {
|
|
95
64
|
console.log('minimize() itterate once');
|
|
96
65
|
}
|
|
97
|
-
|
|
98
|
-
|
|
66
|
+
let successCount = 0;
|
|
67
|
+
let lastLevel = (0, util_1.lastOfArray)(this.getLevels());
|
|
99
68
|
while (lastLevel > 0) {
|
|
100
|
-
|
|
69
|
+
const nodes = this.getNodesOfLevel(lastLevel);
|
|
101
70
|
if (logState) {
|
|
102
71
|
console.log('minimize() run for level ' + lastLevel +
|
|
103
72
|
' with ' + nodes.length + ' nodes');
|
|
104
73
|
// console.dir(nodes);
|
|
105
74
|
}
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
75
|
+
let nodeCount = 0;
|
|
76
|
+
for (const node of nodes) {
|
|
77
|
+
nodeCount++;
|
|
78
|
+
// do not run that often because it is expensive
|
|
79
|
+
if (logState && nodeCount % 4000 === 0) {
|
|
80
|
+
console.log('minimize() node #' + node.id);
|
|
81
|
+
}
|
|
82
|
+
if (node.isLeafNode()) {
|
|
83
|
+
// console.log('have leaf node ' + node.id);
|
|
84
|
+
const reductionDone = node.asLeafNode().applyEliminationRule();
|
|
85
|
+
if (reductionDone) {
|
|
86
|
+
successCount++;
|
|
114
87
|
}
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
88
|
+
}
|
|
89
|
+
if (!node.deleted && node.isInternalNode()) {
|
|
90
|
+
const useNode = node;
|
|
91
|
+
const reductionDone = useNode.applyReductionRule();
|
|
92
|
+
let eliminationDone = false;
|
|
93
|
+
if (!useNode.deleted) {
|
|
94
|
+
// not might now be deleted from reduction-rule
|
|
95
|
+
eliminationDone = useNode.applyEliminationRule(nodes);
|
|
121
96
|
}
|
|
122
|
-
if (
|
|
123
|
-
|
|
124
|
-
var reductionDone = useNode.applyReductionRule();
|
|
125
|
-
var eliminationDone = false;
|
|
126
|
-
if (!useNode.deleted) {
|
|
127
|
-
// not might now be deleted from reduction-rule
|
|
128
|
-
eliminationDone = useNode.applyEliminationRule(nodes);
|
|
129
|
-
}
|
|
130
|
-
if (reductionDone || eliminationDone) {
|
|
131
|
-
successCount++;
|
|
132
|
-
}
|
|
97
|
+
if (reductionDone || eliminationDone) {
|
|
98
|
+
successCount++;
|
|
133
99
|
}
|
|
134
100
|
}
|
|
135
101
|
}
|
|
136
|
-
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
137
|
-
finally {
|
|
138
|
-
try {
|
|
139
|
-
if (nodes_1_1 && !nodes_1_1.done && (_a = nodes_1.return)) _a.call(nodes_1);
|
|
140
|
-
}
|
|
141
|
-
finally { if (e_1) throw e_1.error; }
|
|
142
|
-
}
|
|
143
102
|
lastLevel--;
|
|
144
103
|
}
|
|
145
104
|
if (successCount === 0) {
|
|
@@ -153,59 +112,47 @@ var RootNode = /** @class */ (function (_super) {
|
|
|
153
112
|
}
|
|
154
113
|
}
|
|
155
114
|
}
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
115
|
+
}
|
|
116
|
+
getLeafNodes() {
|
|
117
|
+
const lastLevel = (0, util_1.lastOfArray)(this.getLevels());
|
|
118
|
+
const leafNodes = this.getNodesOfLevel(lastLevel).reverse();
|
|
160
119
|
return leafNodes;
|
|
161
|
-
}
|
|
120
|
+
}
|
|
162
121
|
/**
|
|
163
122
|
* strips all leaf-nodes
|
|
164
123
|
* with the given value
|
|
165
124
|
*/
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
var done = false;
|
|
125
|
+
removeIrrelevantLeafNodes(leafNodeValue) {
|
|
126
|
+
let done = false;
|
|
169
127
|
while (!done) {
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
if (removed) {
|
|
177
|
-
countRemoved++;
|
|
178
|
-
}
|
|
128
|
+
let countRemoved = 0;
|
|
129
|
+
const leafNodes = this.getLeafNodes();
|
|
130
|
+
for (const leafNode of leafNodes) {
|
|
131
|
+
const removed = leafNode.removeIfValueEquals(leafNodeValue);
|
|
132
|
+
if (removed) {
|
|
133
|
+
countRemoved++;
|
|
179
134
|
}
|
|
180
135
|
}
|
|
181
|
-
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
182
|
-
finally {
|
|
183
|
-
try {
|
|
184
|
-
if (leafNodes_1_1 && !leafNodes_1_1.done && (_a = leafNodes_1.return)) _a.call(leafNodes_1);
|
|
185
|
-
}
|
|
186
|
-
finally { if (e_2) throw e_2.error; }
|
|
187
|
-
}
|
|
188
136
|
this.minimize();
|
|
189
137
|
if (countRemoved === 0) {
|
|
190
138
|
done = true;
|
|
191
139
|
}
|
|
192
140
|
}
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
|
|
141
|
+
}
|
|
142
|
+
resolve(fns, booleanFunctionInput) {
|
|
143
|
+
let currentNode = this;
|
|
196
144
|
while (true) {
|
|
197
|
-
|
|
198
|
-
|
|
145
|
+
const booleanResult = fns[currentNode.level](booleanFunctionInput);
|
|
146
|
+
const branchKey = (0, util_1.booleanToBooleanString)(booleanResult);
|
|
199
147
|
currentNode = currentNode.branches.getBranch(branchKey);
|
|
200
148
|
if (currentNode.isLeafNode()) {
|
|
201
149
|
return currentNode.asLeafNode().value;
|
|
202
150
|
}
|
|
203
151
|
}
|
|
204
|
-
}
|
|
205
|
-
|
|
152
|
+
}
|
|
153
|
+
toSimpleBdd() {
|
|
206
154
|
return (0, minimal_string_1.bddToSimpleBdd)(this);
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
}(abstract_node_1.AbstractNode));
|
|
155
|
+
}
|
|
156
|
+
}
|
|
210
157
|
exports.RootNode = RootNode;
|
|
211
158
|
//# sourceMappingURL=root-node.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"root-node.js","sourceRoot":"","sources":["../../src/root-node.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"root-node.js","sourceRoot":"","sources":["../../src/root-node.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/types.d.ts
CHANGED
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
import { LeafNode } from './leaf-node';
|
|
2
2
|
import { InternalNode } from './internal-node';
|
|
3
3
|
import { RootNode } from './root-node';
|
|
4
|
-
export
|
|
5
|
-
export
|
|
6
|
-
export
|
|
7
|
-
export
|
|
8
|
-
export
|
|
9
|
-
export
|
|
10
|
-
export
|
|
4
|
+
export type NodeType = 'LeafNode' | 'InternalNode' | 'RootNode';
|
|
5
|
+
export type NonLeafNode = InternalNode | RootNode;
|
|
6
|
+
export type NonRootNode = InternalNode | LeafNode;
|
|
7
|
+
export type TruthTable = Map<string, number>;
|
|
8
|
+
export type BooleanString = '0' | '1';
|
|
9
|
+
export type ResolverFunction<T> = (i: T) => boolean;
|
|
10
|
+
export type ResolverFunctions<T = any> = {
|
|
11
11
|
[k: number]: ResolverFunction<T>;
|
|
12
12
|
};
|
|
13
|
-
export
|
|
13
|
+
export type SimpleBddLeafNode = number;
|
|
14
14
|
/**
|
|
15
15
|
* a simple bdd is a json-representation
|
|
16
16
|
* which could be parsed from the minimal string
|
|
17
17
|
* use this to have great performance
|
|
18
18
|
* when resolving values
|
|
19
19
|
*/
|
|
20
|
-
export
|
|
20
|
+
export type SimpleBdd = {
|
|
21
21
|
0: SimpleBdd | SimpleBddLeafNode;
|
|
22
22
|
1: SimpleBdd | SimpleBddLeafNode;
|
|
23
23
|
l: number;
|
package/dist/lib/util.js
CHANGED
|
@@ -1,20 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __read = (this && this.__read) || function (o, n) {
|
|
3
|
-
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
4
|
-
if (!m) return o;
|
|
5
|
-
var i = m.call(o), r, ar = [], e;
|
|
6
|
-
try {
|
|
7
|
-
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
8
|
-
}
|
|
9
|
-
catch (error) { e = { error: error }; }
|
|
10
|
-
finally {
|
|
11
|
-
try {
|
|
12
|
-
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
13
|
-
}
|
|
14
|
-
finally { if (e) throw e.error; }
|
|
15
|
-
}
|
|
16
|
-
return ar;
|
|
17
|
-
};
|
|
18
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
3
|
exports.splitStringToChunks = exports.lastOfArray = exports.shuffleArray = exports.firstKeyOfMap = exports.getNextStateSet = exports.maxBinaryWithLength = exports.minBinaryWithLength = exports.binaryToDecimal = exports.oppositeBinary = exports.decimalToPaddedBinary = exports.nextNodeId = exports.lastChar = exports.oppositeBoolean = exports.booleanToBooleanString = exports.booleanStringToBoolean = void 0;
|
|
20
4
|
function booleanStringToBoolean(str) {
|
|
@@ -51,20 +35,19 @@ exports.lastChar = lastChar;
|
|
|
51
35
|
/**
|
|
52
36
|
* @link https://stackoverflow.com/a/1349426
|
|
53
37
|
*/
|
|
54
|
-
function makeid(length) {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
for (var i = 0; i < length; i++) {
|
|
38
|
+
function makeid(length = 6) {
|
|
39
|
+
let result = '';
|
|
40
|
+
const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
|
|
41
|
+
const charactersLength = characters.length;
|
|
42
|
+
for (let i = 0; i < length; i++) {
|
|
60
43
|
result += characters.charAt(Math.floor(Math.random() * charactersLength));
|
|
61
44
|
}
|
|
62
45
|
return result;
|
|
63
46
|
}
|
|
64
|
-
|
|
65
|
-
|
|
47
|
+
const nodeIdPrefix = makeid(4);
|
|
48
|
+
let lastIdGen = 0;
|
|
66
49
|
function nextNodeId() {
|
|
67
|
-
|
|
50
|
+
const ret = 'node_' + nodeIdPrefix + '_' + lastIdGen;
|
|
68
51
|
lastIdGen++;
|
|
69
52
|
return ret;
|
|
70
53
|
}
|
|
@@ -73,8 +56,8 @@ exports.nextNodeId = nextNodeId;
|
|
|
73
56
|
* @link https://stackoverflow.com/a/16155417
|
|
74
57
|
*/
|
|
75
58
|
function decimalToPaddedBinary(decimal, padding) {
|
|
76
|
-
|
|
77
|
-
|
|
59
|
+
const binary = (decimal >>> 0).toString(2);
|
|
60
|
+
const padded = binary.padStart(padding, '0');
|
|
78
61
|
return padded;
|
|
79
62
|
}
|
|
80
63
|
exports.decimalToPaddedBinary = decimalToPaddedBinary;
|
|
@@ -95,22 +78,22 @@ function binaryToDecimal(binary) {
|
|
|
95
78
|
}
|
|
96
79
|
exports.binaryToDecimal = binaryToDecimal;
|
|
97
80
|
function minBinaryWithLength(length) {
|
|
98
|
-
return new Array(length).fill(0).map(
|
|
81
|
+
return new Array(length).fill(0).map(() => '0').join('');
|
|
99
82
|
}
|
|
100
83
|
exports.minBinaryWithLength = minBinaryWithLength;
|
|
101
84
|
function maxBinaryWithLength(length) {
|
|
102
|
-
return new Array(length).fill(0).map(
|
|
85
|
+
return new Array(length).fill(0).map(() => '1').join('');
|
|
103
86
|
}
|
|
104
87
|
exports.maxBinaryWithLength = maxBinaryWithLength;
|
|
105
88
|
function getNextStateSet(stateSet) {
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
89
|
+
const decimal = binaryToDecimal(stateSet);
|
|
90
|
+
const increase = decimal + 1;
|
|
91
|
+
const binary = decimalToPaddedBinary(increase, stateSet.length);
|
|
109
92
|
return binary;
|
|
110
93
|
}
|
|
111
94
|
exports.getNextStateSet = getNextStateSet;
|
|
112
95
|
function firstKeyOfMap(map) {
|
|
113
|
-
|
|
96
|
+
const iterator1 = map.keys();
|
|
114
97
|
return iterator1.next().value;
|
|
115
98
|
}
|
|
116
99
|
exports.firstKeyOfMap = firstKeyOfMap;
|
|
@@ -119,10 +102,9 @@ exports.firstKeyOfMap = firstKeyOfMap;
|
|
|
119
102
|
* @link https://stackoverflow.com/a/6274381
|
|
120
103
|
*/
|
|
121
104
|
function shuffleArray(a) {
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
_a = __read([a[j], a[i]], 2), a[i] = _a[0], a[j] = _a[1];
|
|
105
|
+
for (let i = a.length - 1; i > 0; i--) {
|
|
106
|
+
const j = Math.floor(Math.random() * (i + 1));
|
|
107
|
+
[a[i], a[j]] = [a[j], a[i]];
|
|
126
108
|
}
|
|
127
109
|
return a;
|
|
128
110
|
}
|
|
@@ -135,8 +117,8 @@ exports.lastOfArray = lastOfArray;
|
|
|
135
117
|
* @link https://stackoverflow.com/a/6259536
|
|
136
118
|
*/
|
|
137
119
|
function splitStringToChunks(str, chunkSize) {
|
|
138
|
-
|
|
139
|
-
for (
|
|
120
|
+
const chunks = [];
|
|
121
|
+
for (let i = 0, charsLength = str.length; i < charsLength; i += chunkSize) {
|
|
140
122
|
chunks.push(str.substring(i, i + chunkSize));
|
|
141
123
|
}
|
|
142
124
|
return chunks;
|
package/dist/lib/util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "binary-decision-diagram",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.1",
|
|
4
4
|
"description": "A library to create, minimize and optimize binary decision diagrams",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"binary decision diagram",
|
|
@@ -31,20 +31,20 @@
|
|
|
31
31
|
"scripts": {
|
|
32
32
|
"lint": "tslint --project .",
|
|
33
33
|
"lint:fix": "tslint --project . --fix",
|
|
34
|
-
"transpile": "tsc -p ./ && echo '# transpile es5 (require) sucess!'",
|
|
35
|
-
"transpile:es": "tsc -p ./ --
|
|
34
|
+
"transpile": "tsc -p ./ --module commonjs && echo '# transpile es5 (require) sucess!'",
|
|
35
|
+
"transpile:es": "tsc -p ./ --outDir ./dist/es && echo '# transpile es (modules) sucess!'",
|
|
36
36
|
"build": "rimraf -r ./dist && npm run transpile && npm run transpile:es",
|
|
37
37
|
"test": "mocha -r ts-node/register test/unit/index.test.ts --timeout 40000 --bail"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
|
-
"@types/mocha": "
|
|
41
|
-
"@types/node": "
|
|
40
|
+
"@types/mocha": "10.0.1",
|
|
41
|
+
"@types/node": "18.11.18",
|
|
42
42
|
"assert": "2.0.0",
|
|
43
|
-
"async-test-util": "
|
|
44
|
-
"mocha": "
|
|
43
|
+
"async-test-util": "2.0.0",
|
|
44
|
+
"mocha": "10.2.0",
|
|
45
45
|
"rimraf": "3.0.2",
|
|
46
|
-
"ts-node": "10.
|
|
46
|
+
"ts-node": "10.9.1",
|
|
47
47
|
"tslint": "6.1.3",
|
|
48
|
-
"typescript": "4.4
|
|
48
|
+
"typescript": "4.9.4"
|
|
49
49
|
}
|
|
50
50
|
}
|
package/tsconfig.json
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"moduleResolution": "node",
|
|
13
13
|
"esModuleInterop": true,
|
|
14
14
|
"declaration": true,
|
|
15
|
-
"target": "
|
|
15
|
+
"target": "ES2017",
|
|
16
16
|
"outDir": "./dist/lib",
|
|
17
17
|
"lib": [
|
|
18
18
|
"es7",
|
|
@@ -35,4 +35,4 @@
|
|
|
35
35
|
"**.json"
|
|
36
36
|
],
|
|
37
37
|
"compileOnSave": false
|
|
38
|
-
}
|
|
38
|
+
}
|