@raikuxq/alg-ds 1.1.5 → 1.1.6
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/README.md +0 -14
- package/package.json +1 -1
- package/lib/algorithms/binary-search.d.ts +0 -5
- package/lib/algorithms/binary-search.js +0 -27
- package/lib/algorithms/factorial.d.ts +0 -9
- package/lib/algorithms/factorial.js +0 -17
- package/lib/algorithms/fibonacci.d.ts +0 -9
- package/lib/algorithms/fibonacci.js +0 -17
- package/lib/algorithms/memoize.d.ts +0 -5
- package/lib/algorithms/memoize.js +0 -22
- package/lib/algorithms/sorts/bubble-sort.d.ts +0 -9
- package/lib/algorithms/sorts/bubble-sort.js +0 -23
- package/lib/algorithms/sorts/insertion-sort.d.ts +0 -9
- package/lib/algorithms/sorts/insertion-sort.js +0 -25
- package/lib/algorithms/sorts/merge-sort.d.ts +0 -9
- package/lib/algorithms/sorts/merge-sort.js +0 -61
- package/lib/algorithms/sorts/quick-sort.d.ts +0 -9
- package/lib/algorithms/sorts/quick-sort.js +0 -45
- package/lib/algorithms/sorts/select-sort.d.ts +0 -9
- package/lib/algorithms/sorts/select-sort.js +0 -20
- package/lib/algorithms/transpose-matrix.d.ts +0 -5
- package/lib/algorithms/transpose-matrix.js +0 -20
- package/lib/constants.d.ts +0 -2
- package/lib/constants.js +0 -6
- package/lib/data-structures/BinaryTree/AbstractBinaryTree/AbstractBinaryNode.d.ts +0 -15
- package/lib/data-structures/BinaryTree/AbstractBinaryTree/AbstractBinaryNode.js +0 -53
- package/lib/data-structures/BinaryTree/AbstractBinaryTree/AbstractBinaryTree.d.ts +0 -60
- package/lib/data-structures/BinaryTree/AbstractBinaryTree/AbstractBinaryTree.js +0 -36
- package/lib/data-structures/BinaryTree/BinarySearchTree/BinarySearchNode.d.ts +0 -13
- package/lib/data-structures/BinaryTree/BinarySearchTree/BinarySearchNode.js +0 -59
- package/lib/data-structures/BinaryTree/BinarySearchTree/BinarySearchTree.d.ts +0 -70
- package/lib/data-structures/BinaryTree/BinarySearchTree/BinarySearchTree.js +0 -268
- package/lib/data-structures/BinaryTree/RandBinarySearchTree/RandBinarySearchNode.d.ts +0 -16
- package/lib/data-structures/BinaryTree/RandBinarySearchTree/RandBinarySearchNode.js +0 -70
- package/lib/data-structures/BinaryTree/RandBinarySearchTree/RandBinarySearchTree.d.ts +0 -57
- package/lib/data-structures/BinaryTree/RandBinarySearchTree/RandBinarySearchTree.js +0 -234
- package/lib/data-structures/Graph/AbstractGraph.d.ts +0 -84
- package/lib/data-structures/Graph/AbstractGraph.js +0 -141
- package/lib/data-structures/Graph/DirectedGraph.d.ts +0 -24
- package/lib/data-structures/Graph/DirectedGraph.js +0 -85
- package/lib/data-structures/Graph/GraphEdge.d.ts +0 -16
- package/lib/data-structures/Graph/GraphEdge.js +0 -43
- package/lib/data-structures/Graph/UndirectedGraph.d.ts +0 -28
- package/lib/data-structures/Graph/UndirectedGraph.js +0 -102
- package/lib/data-structures/Graph/demo/generateRandomGraph.d.ts +0 -4
- package/lib/data-structures/Graph/demo/generateRandomGraph.js +0 -72
- package/lib/data-structures/Graph/iterator/AbstractGraphIterator.d.ts +0 -35
- package/lib/data-structures/Graph/iterator/AbstractGraphIterator.js +0 -90
- package/lib/data-structures/Graph/iterator/GraphIteratorBFS.d.ts +0 -28
- package/lib/data-structures/Graph/iterator/GraphIteratorBFS.js +0 -70
- package/lib/data-structures/Graph/iterator/GraphIteratorDFS.d.ts +0 -28
- package/lib/data-structures/Graph/iterator/GraphIteratorDFS.js +0 -70
- package/lib/data-structures/Graph/iterator/GraphIteratorDijkstra.d.ts +0 -32
- package/lib/data-structures/Graph/iterator/GraphIteratorDijkstra.js +0 -99
- package/lib/data-structures/Graph/presenter/presenterAdjacencyLists.d.ts +0 -19
- package/lib/data-structures/Graph/presenter/presenterAdjacencyLists.js +0 -28
- package/lib/data-structures/Graph/presenter/presenterAdjacencyMatrix.d.ts +0 -32
- package/lib/data-structures/Graph/presenter/presenterAdjacencyMatrix.js +0 -48
- package/lib/data-structures/Graph/searching/hasPath.d.ts +0 -9
- package/lib/data-structures/Graph/searching/hasPath.js +0 -29
- package/lib/data-structures/Graph/searching/shortestPath.d.ts +0 -9
- package/lib/data-structures/Graph/searching/shortestPath.js +0 -29
- package/lib/data-structures/Graph/strategy/BFSIterationStrategy.d.ts +0 -6
- package/lib/data-structures/Graph/strategy/BFSIterationStrategy.js +0 -13
- package/lib/data-structures/Graph/strategy/DFSIterationStrategy.d.ts +0 -6
- package/lib/data-structures/Graph/strategy/DFSIterationStrategy.js +0 -13
- package/lib/data-structures/Graph/strategy/DijkstraIterationStrategy.d.ts +0 -6
- package/lib/data-structures/Graph/strategy/DijkstraIterationStrategy.js +0 -13
- package/lib/data-structures/Graph/transposing/transposeDirectedGraph.d.ts +0 -2
- package/lib/data-structures/Graph/transposing/transposeDirectedGraph.js +0 -14
- package/lib/data-structures/HashTable/HashTable.d.ts +0 -73
- package/lib/data-structures/HashTable/HashTable.js +0 -169
- package/lib/data-structures/HashTable/HashTableNode.d.ts +0 -11
- package/lib/data-structures/HashTable/HashTableNode.js +0 -39
- package/lib/data-structures/LinkedList/AbstractLinkedList/AbstractLinkedList.d.ts +0 -125
- package/lib/data-structures/LinkedList/AbstractLinkedList/AbstractLinkedList.js +0 -236
- package/lib/data-structures/LinkedList/AbstractLinkedList/AbstractLinkedNode.d.ts +0 -20
- package/lib/data-structures/LinkedList/AbstractLinkedList/AbstractLinkedNode.js +0 -41
- package/lib/data-structures/LinkedList/DoubleLinkedList/DoubleLinkedList.d.ts +0 -48
- package/lib/data-structures/LinkedList/DoubleLinkedList/DoubleLinkedList.js +0 -150
- package/lib/data-structures/LinkedList/DoubleLinkedList/DoubleLinkedNode.d.ts +0 -25
- package/lib/data-structures/LinkedList/DoubleLinkedList/DoubleLinkedNode.js +0 -65
- package/lib/data-structures/LinkedList/SingleLinkedList/SingleLinkedList.d.ts +0 -52
- package/lib/data-structures/LinkedList/SingleLinkedList/SingleLinkedList.js +0 -137
- package/lib/data-structures/LinkedList/SingleLinkedList/SingleLinkedNode.d.ts +0 -7
- package/lib/data-structures/LinkedList/SingleLinkedList/SingleLinkedNode.js +0 -29
- package/lib/data-structures/LoopedArray/LoopedArray.d.ts +0 -86
- package/lib/data-structures/LoopedArray/LoopedArray.js +0 -161
- package/lib/data-structures/Queue/Queue.d.ts +0 -50
- package/lib/data-structures/Queue/Queue.js +0 -83
- package/lib/data-structures/Stack/Stack.d.ts +0 -50
- package/lib/data-structures/Stack/Stack.js +0 -83
- package/lib/exports/algorithms.d.ts +0 -16
- package/lib/exports/algorithms.js +0 -36
- package/lib/exports/constants.d.ts +0 -2
- package/lib/exports/constants.js +0 -7
- package/lib/exports/data-structures.d.ts +0 -11
- package/lib/exports/data-structures.js +0 -24
- package/lib/exports/helpers.d.ts +0 -6
- package/lib/exports/helpers.js +0 -14
- package/lib/exports/sorts.d.ts +0 -6
- package/lib/exports/sorts.js +0 -14
- package/lib/exports/utils.d.ts +0 -3
- package/lib/exports/utils.js +0 -14
- package/lib/exports.d.ts +0 -44
- package/lib/exports.js +0 -89
- package/lib/helpers/createBinaryTree.d.ts +0 -6
- package/lib/helpers/createBinaryTree.js +0 -22
- package/lib/helpers/createGraph.d.ts +0 -6
- package/lib/helpers/createGraph.js +0 -24
- package/lib/helpers/createGraphFromMatrix.d.ts +0 -7
- package/lib/helpers/createGraphFromMatrix.js +0 -37
- package/lib/helpers/createLinkedList.d.ts +0 -3
- package/lib/helpers/createLinkedList.js +0 -21
- package/lib/index.d.ts +0 -3
- package/lib/index.js +0 -6
- package/lib/types/ArrayMatrix.d.ts +0 -1
- package/lib/types/ArrayMatrix.js +0 -3
- package/lib/types/EnumBinarySearchTreeType.d.ts +0 -4
- package/lib/types/EnumBinarySearchTreeType.js +0 -9
- package/lib/types/EnumGraphType.d.ts +0 -4
- package/lib/types/EnumGraphType.js +0 -9
- package/lib/types/EnumLinkedListType.d.ts +0 -4
- package/lib/types/EnumLinkedListType.js +0 -9
- package/lib/types/EnumRandomGenerationFormat.d.ts +0 -4
- package/lib/types/EnumRandomGenerationFormat.js +0 -9
- package/lib/types/EnumTreeTraversalType.d.ts +0 -5
- package/lib/types/EnumTreeTraversalType.js +0 -10
- package/lib/types/FnCompareTwo.d.ts +0 -1
- package/lib/types/FnCompareTwo.js +0 -3
- package/lib/types/FnToMemoize.d.ts +0 -1
- package/lib/types/FnToMemoize.js +0 -3
- package/lib/types/IArrayFacade.d.ts +0 -4
- package/lib/types/IArrayFacade.js +0 -3
- package/lib/types/IBiDirectIterable.d.ts +0 -5
- package/lib/types/IBiDirectIterable.js +0 -3
- package/lib/types/IBiDirectIterator.d.ts +0 -11
- package/lib/types/IBiDirectIterator.js +0 -3
- package/lib/types/IBinaryTree.d.ts +0 -12
- package/lib/types/IBinaryTree.js +0 -3
- package/lib/types/IConvertableToArray.d.ts +0 -4
- package/lib/types/IConvertableToArray.js +0 -3
- package/lib/types/IGraph.d.ts +0 -14
- package/lib/types/IGraph.js +0 -3
- package/lib/types/IGraphIterationStrategy.d.ts +0 -5
- package/lib/types/IGraphIterationStrategy.js +0 -3
- package/lib/types/IGraphIterator.d.ts +0 -11
- package/lib/types/IGraphIterator.js +0 -3
- package/lib/types/IIterable.d.ts +0 -4
- package/lib/types/IIterable.js +0 -3
- package/lib/types/IIterator.d.ts +0 -14
- package/lib/types/IIterator.js +0 -3
- package/lib/types/IKeyValueStorage.d.ts +0 -8
- package/lib/types/IKeyValueStorage.js +0 -3
- package/lib/types/ILinearStorage.d.ts +0 -11
- package/lib/types/ILinearStorage.js +0 -3
- package/lib/types/ILinearStorageRA.d.ts +0 -13
- package/lib/types/ILinearStorageRA.js +0 -3
- package/lib/types/ILinkedList.d.ts +0 -4
- package/lib/types/ILinkedList.js +0 -3
- package/lib/utils.d.ts +0 -29
- package/lib/utils.js +0 -95
|
@@ -1,102 +0,0 @@
|
|
|
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
|
-
extendStatics(d, b);
|
|
11
|
-
function __() { this.constructor = d; }
|
|
12
|
-
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
13
|
-
};
|
|
14
|
-
})();
|
|
15
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
-
var AbstractGraph_1 = require("./AbstractGraph");
|
|
17
|
-
var GraphEdge_1 = require("./GraphEdge");
|
|
18
|
-
/**
|
|
19
|
-
* Undirected graph - data structure where edges with same pair of vertices are equal
|
|
20
|
-
* @example A-B is same as B-A
|
|
21
|
-
*/
|
|
22
|
-
var UndirectedGraph = /** @class */ (function (_super) {
|
|
23
|
-
__extends(UndirectedGraph, _super);
|
|
24
|
-
/**
|
|
25
|
-
* @inheritDoc
|
|
26
|
-
*/
|
|
27
|
-
function UndirectedGraph() {
|
|
28
|
-
return _super.call(this) || this;
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* @inheritDoc
|
|
32
|
-
*/
|
|
33
|
-
UndirectedGraph.prototype.getEdgeByValue = function (from, to) {
|
|
34
|
-
var edge = this._edges.find(function (edge) {
|
|
35
|
-
return (edge.fromVertex === from && edge.toVertex === to) ||
|
|
36
|
-
(edge.fromVertex === to && edge.toVertex === from);
|
|
37
|
-
});
|
|
38
|
-
if (!edge) {
|
|
39
|
-
throw new Error("Edge not found");
|
|
40
|
-
}
|
|
41
|
-
return edge;
|
|
42
|
-
};
|
|
43
|
-
/**
|
|
44
|
-
* @inheritDoc
|
|
45
|
-
*/
|
|
46
|
-
UndirectedGraph.prototype.hasEdge = function (from, to) {
|
|
47
|
-
return Boolean(this._edges.find(function (edge) {
|
|
48
|
-
return ((edge.fromVertex === from && edge.toVertex === to) ||
|
|
49
|
-
(edge.fromVertex === to && edge.toVertex === from));
|
|
50
|
-
}));
|
|
51
|
-
};
|
|
52
|
-
/**
|
|
53
|
-
* @inheritDoc
|
|
54
|
-
*/
|
|
55
|
-
UndirectedGraph.prototype.addEdge = function (from, to, weight) {
|
|
56
|
-
var _a, _b;
|
|
57
|
-
try {
|
|
58
|
-
var fromVertex = this.tryFindVertex(from);
|
|
59
|
-
var toVertex = this.tryFindVertex(to);
|
|
60
|
-
/** When edge is already exist, we should only update its weight */
|
|
61
|
-
if (this.hasEdge(fromVertex, toVertex)) {
|
|
62
|
-
if (typeof weight === "number") {
|
|
63
|
-
this.updateEdgeWeight(fromVertex, toVertex, weight);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
else {
|
|
67
|
-
var edge = new GraphEdge_1.default(fromVertex, toVertex, weight);
|
|
68
|
-
this._edges.push(edge);
|
|
69
|
-
(_a = this._vertices.get(fromVertex)) === null || _a === void 0 ? void 0 : _a.push(toVertex);
|
|
70
|
-
(_b = this._vertices.get(toVertex)) === null || _b === void 0 ? void 0 : _b.push(fromVertex);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
catch (_c) {
|
|
74
|
-
throw new Error("Edge cannot be added because one of vertices was not found");
|
|
75
|
-
}
|
|
76
|
-
return this;
|
|
77
|
-
};
|
|
78
|
-
/**
|
|
79
|
-
* @inheritDoc
|
|
80
|
-
*/
|
|
81
|
-
UndirectedGraph.prototype.removeEdge = function (from, to) {
|
|
82
|
-
try {
|
|
83
|
-
var fromVertex_1 = this.tryFindVertex(from);
|
|
84
|
-
var toVertex_1 = this.tryFindVertex(to);
|
|
85
|
-
var edgeToRemove_1 = this.getEdgeByValue(fromVertex_1, toVertex_1);
|
|
86
|
-
var fromVertexNeighbors = this._vertices.get(fromVertex_1) || [];
|
|
87
|
-
var toVertexNeighbors = this._vertices.get(toVertex_1) || [];
|
|
88
|
-
var fromNewNeighbors = fromVertexNeighbors.filter(function (vertex) { return toVertex_1 !== vertex; });
|
|
89
|
-
var toNewNeighbors = toVertexNeighbors.filter(function (vertex) { return fromVertex_1 !== vertex; });
|
|
90
|
-
this._vertices.set(fromVertex_1, fromNewNeighbors);
|
|
91
|
-
this._vertices.set(toVertex_1, toNewNeighbors);
|
|
92
|
-
this._edges = this._edges.filter(function (edge) { return edge !== edgeToRemove_1; });
|
|
93
|
-
}
|
|
94
|
-
catch (_a) {
|
|
95
|
-
throw new Error("Edge cannot be removed because one of vertices was not found");
|
|
96
|
-
}
|
|
97
|
-
return this;
|
|
98
|
-
};
|
|
99
|
-
return UndirectedGraph;
|
|
100
|
-
}(AbstractGraph_1.default));
|
|
101
|
-
exports.default = UndirectedGraph;
|
|
102
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVW5kaXJlY3RlZEdyYXBoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2RhdGEtc3RydWN0dXJlcy9HcmFwaC9VbmRpcmVjdGVkR3JhcGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsaURBQTRDO0FBQzVDLHlDQUFvQztBQUVwQzs7O0dBR0c7QUFDSDtJQUFnRCxtQ0FBZ0I7SUFDOUQ7O09BRUc7SUFDSDtlQUNFLGlCQUFPO0lBQ1QsQ0FBQztJQUVEOztPQUVHO0lBQ08sd0NBQWMsR0FBeEIsVUFBeUIsSUFBTyxFQUFFLEVBQUs7UUFDckMsSUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQzNCLFVBQUMsSUFBa0I7WUFDakIsT0FBQSxDQUFDLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssRUFBRSxDQUFDO2dCQUNsRCxDQUFDLElBQUksQ0FBQyxVQUFVLEtBQUssRUFBRSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDO1FBRGxELENBQ2tELENBQ3JELENBQUM7UUFFRixJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1QsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1NBQ25DO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxpQ0FBTyxHQUFkLFVBQWUsSUFBTyxFQUFFLEVBQUs7UUFDM0IsT0FBTyxPQUFPLENBQ1osSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBQyxJQUFJO1lBQ3BCLE9BQU8sQ0FDTCxDQUFDLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssRUFBRSxDQUFDO2dCQUNsRCxDQUFDLElBQUksQ0FBQyxVQUFVLEtBQUssRUFBRSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxD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
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import IGraph from "../../../types/IGraph";
|
|
2
|
-
import { EnumGraphType } from "../../../types/EnumGraphType";
|
|
3
|
-
import { EnumRandomGenerationFormat } from "../../../types/EnumRandomGenerationFormat";
|
|
4
|
-
export declare const generateRandomGraph: (verticesCount: number, edgesCount: number, type?: EnumGraphType, format?: EnumRandomGenerationFormat) => IGraph<string>;
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.generateRandomGraph = void 0;
|
|
4
|
-
var EnumGraphType_1 = require("../../../types/EnumGraphType");
|
|
5
|
-
var createGraph_1 = require("../../../helpers/createGraph");
|
|
6
|
-
var utils_1 = require("../../../utils");
|
|
7
|
-
var EnumRandomGenerationFormat_1 = require("../../../types/EnumRandomGenerationFormat");
|
|
8
|
-
var getRandomVertex = function () {
|
|
9
|
-
return "_" + Math.random().toString(36).substr(2, 9);
|
|
10
|
-
};
|
|
11
|
-
var getPossibleEdgesCount = function (type, verticesCount) {
|
|
12
|
-
var possibleEdgesCount = verticesCount * (verticesCount - 1);
|
|
13
|
-
switch (type) {
|
|
14
|
-
case EnumGraphType_1.EnumGraphType.Directed: {
|
|
15
|
-
break;
|
|
16
|
-
}
|
|
17
|
-
case EnumGraphType_1.EnumGraphType.Undirected: {
|
|
18
|
-
possibleEdgesCount = Math.floor(possibleEdgesCount / 2);
|
|
19
|
-
break;
|
|
20
|
-
}
|
|
21
|
-
default: {
|
|
22
|
-
throw new Error("Wrong random generation format");
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
return possibleEdgesCount;
|
|
26
|
-
};
|
|
27
|
-
var fillGraphRandomly = function (graph, format, verticesCount) {
|
|
28
|
-
switch (format) {
|
|
29
|
-
case EnumRandomGenerationFormat_1.EnumRandomGenerationFormat.Hash: {
|
|
30
|
-
for (var i = 0; i < verticesCount; i++) {
|
|
31
|
-
graph.addVertex(getRandomVertex());
|
|
32
|
-
}
|
|
33
|
-
break;
|
|
34
|
-
}
|
|
35
|
-
case EnumRandomGenerationFormat_1.EnumRandomGenerationFormat.Numbers: {
|
|
36
|
-
for (var i = 0; i < verticesCount; i++) {
|
|
37
|
-
graph.addVertex((i + 1).toString());
|
|
38
|
-
}
|
|
39
|
-
break;
|
|
40
|
-
}
|
|
41
|
-
default: {
|
|
42
|
-
throw new Error("Wrong random generation format");
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
};
|
|
46
|
-
exports.generateRandomGraph = function (verticesCount, edgesCount, type, format) {
|
|
47
|
-
if (type === void 0) { type = EnumGraphType_1.EnumGraphType.Undirected; }
|
|
48
|
-
if (format === void 0) { format = EnumRandomGenerationFormat_1.EnumRandomGenerationFormat.Numbers; }
|
|
49
|
-
var graph = createGraph_1.createGraph(type);
|
|
50
|
-
var possibleEdgesCount = getPossibleEdgesCount(type, verticesCount);
|
|
51
|
-
if (edgesCount <= 0 || edgesCount > possibleEdgesCount) {
|
|
52
|
-
throw new Error("Edges count must be in range between 0 and " + possibleEdgesCount);
|
|
53
|
-
}
|
|
54
|
-
fillGraphRandomly(graph, format, verticesCount);
|
|
55
|
-
var addedVertices = graph.vertices();
|
|
56
|
-
var addedEdgesCount = 0;
|
|
57
|
-
while (addedEdgesCount < edgesCount) {
|
|
58
|
-
var randomizeIndex = function () {
|
|
59
|
-
return utils_1.randomizeNumberInRange(0, addedVertices.length);
|
|
60
|
-
};
|
|
61
|
-
var randomVertexFrom = addedVertices[randomizeIndex()];
|
|
62
|
-
var randomVertexTo = addedVertices[randomizeIndex()];
|
|
63
|
-
var isEdgeAlreadyExists = graph.hasEdge(randomVertexFrom, randomVertexTo);
|
|
64
|
-
var isTheSameVertex = randomVertexFrom === randomVertexTo;
|
|
65
|
-
if (!isTheSameVertex && !isEdgeAlreadyExists) {
|
|
66
|
-
graph.addEdge(randomVertexFrom, randomVertexTo);
|
|
67
|
-
addedEdgesCount++;
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
return graph;
|
|
71
|
-
};
|
|
72
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGVSYW5kb21HcmFwaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kYXRhLXN0cnVjdHVyZXMvR3JhcGgvZGVtby9nZW5lcmF0ZVJhbmRvbUdyYXBoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLDhEQUE2RDtBQUM3RCw0REFBMkQ7QUFDM0Qsd0NBQXdEO0FBQ3hELHdGQUF1RjtBQUV2RixJQUFNLGVBQWUsR0FBRztJQUN0QixPQUFPLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdkQsQ0FBQyxDQUFDO0FBRUYsSUFBTSxxQkFBcUIsR0FBRyxVQUM1QixJQUFtQixFQUNuQixhQUFxQjtJQUVyQixJQUFJLGtCQUFrQixHQUFHLGFBQWEsR0FBRyxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUU3RCxRQUFRLElBQUksRUFBRTtRQUNaLEtBQUssNkJBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMzQixNQUFNO1NBQ1A7UUFDRCxLQUFLLDZCQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDN0Isa0JBQWtCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN4RCxNQUFNO1NBQ1A7UUFDRCxPQUFPLENBQUMsQ0FBQztZQUNQLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztTQUNuRDtLQUNGO0lBRUQsT0FBTyxrQkFBa0IsQ0FBQztBQUM1QixDQUFDLENBQUM7QUFFRixJQUFNLGlCQUFpQixHQUFHLFVBQ3hCLEtBQXFCLEVBQ3JCLE1BQWtDLEVBQ2xDLGFBQXFCO0lBRXJCLFFBQVEsTUFBTSxFQUFFO1FBQ2QsS0FBSyx1REFBMEIsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNwQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsYUFBYSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUN0QyxLQUFLLENBQUMsU0FBUyxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUM7YUFDcEM7WUFDRCxNQUFNO1NBQ1A7UUFDRCxLQUFLLHVEQUEwQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3ZDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxhQUFhLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3RDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQzthQUNyQztZQUNELE1BQU07U0FDUDtRQUNELE9BQU8sQ0FBQyxDQUFDO1lBQ1AsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1NBQ25EO0tBQ0Y7QUFDSCxDQUFDLENBQUM7QUFFVyxRQUFBLG1CQUFtQixHQUFHLFVBQ2pDLGFBQXFCLEVBQ3JCLFVBQWtCLEVBQ2xCLElBQThDLEVBQzlDLE1BQXVFO0lBRHZFLHFCQUFBLEVBQUEsT0FBc0IsNkJBQWEsQ0FBQyxVQUFVO0lBQzlDLHVCQUFBLEVBQUEsU0FBcUMsdURBQTBCLENBQUMsT0FBTztJQUV2RSxJQUFNLEtBQUssR0FBRyx5QkFBVyxDQUFTLElBQUksQ0FBQyxDQUFDO0lBQ3hDLElBQU0sa0JBQWtCLEdBQUcscUJBQXFCLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBRXRFLElBQUksVUFBVSxJQUFJLENBQUMsSUFBSSxVQUFVLEdBQUcsa0JBQWtCLEVBQUU7UUFDdEQsTUFBTSxJQUFJLEtBQUssQ0FDYixnREFBOEMsa0JBQW9CLENBQ25FLENBQUM7S0FDSDtJQUVELGlCQUFpQixDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDaEQsSUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3ZDLElBQUksZUFBZSxHQUFHLENBQUMsQ0FBQztJQUV4QixPQUFPLGVBQWUsR0FBRyxVQUFVLEVBQUU7UUFDbkMsSUFBTSxjQUFjLEdBQUc7WUFDckIsT0FBTyw4QkFBc0IsQ0FBQyxDQUFDLEVBQUUsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pELENBQUMsQ0FBQztRQUNGLElBQU0sZ0JBQWdCLEdBQUcsYUFBYSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7UUFDekQsSUFBTSxjQUFjLEdBQUcsYUFBYSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7UUFFdkQsSUFBTSxtQkFBbUIsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQzVFLElBQU0sZUFBZSxHQUFHLGdCQUFnQixLQUFLLGNBQWMsQ0FBQztRQUU1RCxJQUFJLENBQUMsZUFBZSxJQUFJLENBQUMsbUJBQW1CLEVBQUU7WUFDNUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxjQUFjLENBQUMsQ0FBQztZQUNoRCxlQUFlLEVBQUUsQ0FBQztTQUNuQjtLQUNGO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDLENBQUMifQ==
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import IGraphIterator from "../../../types/IGraphIterator";
|
|
2
|
-
import IGraph from "../../../types/IGraph";
|
|
3
|
-
export default abstract class AbstractGraphIterator<T> implements IGraphIterator<T> {
|
|
4
|
-
protected readonly graph: IGraph<T>;
|
|
5
|
-
protected readonly visited: Map<T, boolean>;
|
|
6
|
-
protected readonly parents: Map<T, T>;
|
|
7
|
-
/**
|
|
8
|
-
* Creates empty instance
|
|
9
|
-
*/
|
|
10
|
-
protected constructor(graph: IGraph<T>);
|
|
11
|
-
protected abstract currentImpl(): T;
|
|
12
|
-
protected abstract nextImpl(): T;
|
|
13
|
-
protected abstract initIteratorImpl(from: T): void;
|
|
14
|
-
protected abstract hasNextImpl(): boolean;
|
|
15
|
-
/**
|
|
16
|
-
* @inheritDoc
|
|
17
|
-
*/
|
|
18
|
-
initIterator(from: T): void;
|
|
19
|
-
/**
|
|
20
|
-
* @inheritDoc
|
|
21
|
-
*/
|
|
22
|
-
hasNext(): boolean;
|
|
23
|
-
/**
|
|
24
|
-
* @inheritDoc
|
|
25
|
-
*/
|
|
26
|
-
next(): T;
|
|
27
|
-
/**
|
|
28
|
-
* @inheritDoc
|
|
29
|
-
*/
|
|
30
|
-
current(): T;
|
|
31
|
-
/**
|
|
32
|
-
* @inheritDoc
|
|
33
|
-
*/
|
|
34
|
-
getPath(from: T, to: T): Array<T>;
|
|
35
|
-
}
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __spreadArrays = (this && this.__spreadArrays) || function () {
|
|
3
|
-
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
|
|
4
|
-
for (var r = Array(s), k = 0, i = 0; i < il; i++)
|
|
5
|
-
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
|
|
6
|
-
r[k] = a[j];
|
|
7
|
-
return r;
|
|
8
|
-
};
|
|
9
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
var AbstractGraphIterator = /** @class */ (function () {
|
|
11
|
-
/**
|
|
12
|
-
* Creates empty instance
|
|
13
|
-
*/
|
|
14
|
-
function AbstractGraphIterator(graph) {
|
|
15
|
-
this.graph = graph;
|
|
16
|
-
this.visited = new Map();
|
|
17
|
-
this.parents = new Map();
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* @inheritDoc
|
|
21
|
-
*/
|
|
22
|
-
AbstractGraphIterator.prototype.initIterator = function (from) {
|
|
23
|
-
if (!this.graph.hasVertex(from)) {
|
|
24
|
-
throw new Error("Start vertex does not exist");
|
|
25
|
-
}
|
|
26
|
-
this.initIteratorImpl(from);
|
|
27
|
-
};
|
|
28
|
-
/**
|
|
29
|
-
* @inheritDoc
|
|
30
|
-
*/
|
|
31
|
-
AbstractGraphIterator.prototype.hasNext = function () {
|
|
32
|
-
return this.hasNextImpl();
|
|
33
|
-
};
|
|
34
|
-
/**
|
|
35
|
-
* @inheritDoc
|
|
36
|
-
*/
|
|
37
|
-
AbstractGraphIterator.prototype.next = function () {
|
|
38
|
-
try {
|
|
39
|
-
if (!this.hasNext()) {
|
|
40
|
-
throw new Error();
|
|
41
|
-
}
|
|
42
|
-
return this.nextImpl();
|
|
43
|
-
}
|
|
44
|
-
catch (e) {
|
|
45
|
-
throw new Error("Next element does not exist");
|
|
46
|
-
}
|
|
47
|
-
};
|
|
48
|
-
/**
|
|
49
|
-
* @inheritDoc
|
|
50
|
-
*/
|
|
51
|
-
AbstractGraphIterator.prototype.current = function () {
|
|
52
|
-
try {
|
|
53
|
-
var current = this.currentImpl();
|
|
54
|
-
if (current === null) {
|
|
55
|
-
throw new Error();
|
|
56
|
-
}
|
|
57
|
-
return current;
|
|
58
|
-
}
|
|
59
|
-
catch (e) {
|
|
60
|
-
throw new Error("Current element does not exist");
|
|
61
|
-
}
|
|
62
|
-
};
|
|
63
|
-
/**
|
|
64
|
-
* @inheritDoc
|
|
65
|
-
*/
|
|
66
|
-
AbstractGraphIterator.prototype.getPath = function (from, to) {
|
|
67
|
-
var path = new Array();
|
|
68
|
-
var isLinkedDirectly = this.graph.hasEdge(from, to);
|
|
69
|
-
var currentVertex = this.parents.get(to);
|
|
70
|
-
if (isLinkedDirectly) {
|
|
71
|
-
return [from, to];
|
|
72
|
-
}
|
|
73
|
-
else {
|
|
74
|
-
while (currentVertex) {
|
|
75
|
-
if (currentVertex === from) {
|
|
76
|
-
break;
|
|
77
|
-
}
|
|
78
|
-
path.push(currentVertex);
|
|
79
|
-
currentVertex = this.parents.get(currentVertex);
|
|
80
|
-
}
|
|
81
|
-
if (path.length === 0) {
|
|
82
|
-
throw new Error("There is no path found");
|
|
83
|
-
}
|
|
84
|
-
return __spreadArrays([from], path.reverse(), [to]);
|
|
85
|
-
}
|
|
86
|
-
};
|
|
87
|
-
return AbstractGraphIterator;
|
|
88
|
-
}());
|
|
89
|
-
exports.default = AbstractGraphIterator;
|
|
90
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RHcmFwaEl0ZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2RhdGEtc3RydWN0dXJlcy9HcmFwaC9pdGVyYXRvci9BYnN0cmFjdEdyYXBoSXRlcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBR0E7SUFNRTs7T0FFRztJQUNILCtCQUFzQixLQUFnQjtRQUNwQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFPRDs7T0FFRztJQUNJLDRDQUFZLEdBQW5CLFVBQW9CLElBQU87UUFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQy9CLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztTQUNoRDtRQUNELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQ7O09BRUc7SUFDSSx1Q0FBTyxHQUFkO1FBQ0UsT0FBTyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksb0NBQUksR0FBWDtRQUNFLElBQUk7WUFDRixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUNuQixNQUFNLElBQUksS0FBSyxFQUFFLENBQUM7YUFDbkI7WUFFRCxPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUN4QjtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1YsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1NBQ2hEO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ksdUNBQU8sR0FBZDtRQUNFLElBQUk7WUFDRixJQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFFbkMsSUFBSSxPQUFPLEtBQUssSUFBSSxFQUFFO2dCQUNwQixNQUFNLElBQUksS0FBSyxFQUFFLENBQUM7YUFDbkI7WUFDRCxPQUFPLE9BQU8sQ0FBQztTQUNoQjtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1YsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1NBQ25EO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ksdUNBQU8sR0FBZCxVQUFlLElBQU8sRUFBRSxFQUFLO1FBQzNCLElBQU0sSUFBSSxHQUFhLElBQUksS0FBSyxFQUFLLENBQUM7UUFDdEMsSUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDdEQsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFekMsSUFBSSxnQkFBZ0IsRUFBRTtZQUNwQixPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQ25CO2FBQU07WUFDTCxPQUFPLGFBQWEsRUFBRTtnQkFDcEIsSUFBSSxhQUFhLEtBQUssSUFBSSxFQUFFO29CQUMxQixNQUFNO2lCQUNQO2dCQUVELElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ3pCLGFBQWEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUNqRDtZQUVELElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7Z0JBQ3JCLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQzthQUMzQztZQUVELHVCQUFRLElBQUksR0FBSyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUUsRUFBRSxHQUFFO1NBQ3RDO0lBQ0gsQ0FBQztJQUNILDRCQUFDO0FBQUQsQ0FBQyxBQS9GRCxJQStGQyJ9
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import IGraph from "../../../types/IGraph";
|
|
2
|
-
import AbstractGraphIterator from "./AbstractGraphIterator";
|
|
3
|
-
/**
|
|
4
|
-
* Breadth first graph traversal
|
|
5
|
-
*/
|
|
6
|
-
export default class GraphIteratorBFS<T> extends AbstractGraphIterator<T> {
|
|
7
|
-
private readonly queue;
|
|
8
|
-
/**
|
|
9
|
-
* @inheritDoc
|
|
10
|
-
*/
|
|
11
|
-
constructor(graph: IGraph<T>);
|
|
12
|
-
/**
|
|
13
|
-
* @inheritDoc
|
|
14
|
-
*/
|
|
15
|
-
protected currentImpl(): T;
|
|
16
|
-
/**
|
|
17
|
-
@inheritDoc
|
|
18
|
-
*/
|
|
19
|
-
initIteratorImpl(startVertex: T): void;
|
|
20
|
-
/**
|
|
21
|
-
* @inheritDoc
|
|
22
|
-
*/
|
|
23
|
-
hasNextImpl(): boolean;
|
|
24
|
-
/**
|
|
25
|
-
* @inheritDoc
|
|
26
|
-
*/
|
|
27
|
-
protected nextImpl(): T;
|
|
28
|
-
}
|
|
@@ -1,70 +0,0 @@
|
|
|
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
|
-
extendStatics(d, b);
|
|
11
|
-
function __() { this.constructor = d; }
|
|
12
|
-
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
13
|
-
};
|
|
14
|
-
})();
|
|
15
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
-
var Queue_1 = require("../../Queue/Queue");
|
|
17
|
-
var AbstractGraphIterator_1 = require("./AbstractGraphIterator");
|
|
18
|
-
/**
|
|
19
|
-
* Breadth first graph traversal
|
|
20
|
-
*/
|
|
21
|
-
var GraphIteratorBFS = /** @class */ (function (_super) {
|
|
22
|
-
__extends(GraphIteratorBFS, _super);
|
|
23
|
-
/**
|
|
24
|
-
* @inheritDoc
|
|
25
|
-
*/
|
|
26
|
-
function GraphIteratorBFS(graph) {
|
|
27
|
-
var _this = _super.call(this, graph) || this;
|
|
28
|
-
_this.queue = new Queue_1.default();
|
|
29
|
-
return _this;
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* @inheritDoc
|
|
33
|
-
*/
|
|
34
|
-
GraphIteratorBFS.prototype.currentImpl = function () {
|
|
35
|
-
return this.queue.peek();
|
|
36
|
-
};
|
|
37
|
-
/**
|
|
38
|
-
@inheritDoc
|
|
39
|
-
*/
|
|
40
|
-
GraphIteratorBFS.prototype.initIteratorImpl = function (startVertex) {
|
|
41
|
-
this.queue.push(startVertex);
|
|
42
|
-
this.visited.set(startVertex, true);
|
|
43
|
-
};
|
|
44
|
-
/**
|
|
45
|
-
* @inheritDoc
|
|
46
|
-
*/
|
|
47
|
-
GraphIteratorBFS.prototype.hasNextImpl = function () {
|
|
48
|
-
return !this.queue.isEmpty();
|
|
49
|
-
};
|
|
50
|
-
/**
|
|
51
|
-
* @inheritDoc
|
|
52
|
-
*/
|
|
53
|
-
GraphIteratorBFS.prototype.nextImpl = function () {
|
|
54
|
-
var _this = this;
|
|
55
|
-
var next = this.queue.pop();
|
|
56
|
-
var nextNeighbors = this.graph.getVertexNeighbors(next);
|
|
57
|
-
nextNeighbors.forEach(function (neighbor) {
|
|
58
|
-
var isNotVisited = !_this.visited.get(neighbor);
|
|
59
|
-
if (isNotVisited) {
|
|
60
|
-
_this.queue.push(neighbor);
|
|
61
|
-
_this.visited.set(neighbor, true);
|
|
62
|
-
_this.parents.set(neighbor, next);
|
|
63
|
-
}
|
|
64
|
-
});
|
|
65
|
-
return next;
|
|
66
|
-
};
|
|
67
|
-
return GraphIteratorBFS;
|
|
68
|
-
}(AbstractGraphIterator_1.default));
|
|
69
|
-
exports.default = GraphIteratorBFS;
|
|
70
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhJdGVyYXRvckJGUy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kYXRhLXN0cnVjdHVyZXMvR3JhcGgvaXRlcmF0b3IvR3JhcGhJdGVyYXRvckJGUy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQ0FBc0M7QUFFdEMsaUVBQTREO0FBRTVEOztHQUVHO0FBQ0g7SUFBaUQsb0NBQXdCO0lBR3ZFOztPQUVHO0lBQ0gsMEJBQW1CLEtBQWdCO1FBQW5DLFlBQ0Usa0JBQU0sS0FBSyxDQUFDLFNBRWI7UUFEQyxLQUFJLENBQUMsS0FBSyxHQUFHLElBQUksZUFBSyxFQUFFLENBQUM7O0lBQzNCLENBQUM7SUFFRDs7T0FFRztJQUNPLHNDQUFXLEdBQXJCO1FBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRDs7T0FFRztJQUNJLDJDQUFnQixHQUF2QixVQUF3QixXQUFjO1FBQ3BDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxzQ0FBVyxHQUFsQjtRQUNFLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRDs7T0FFRztJQUNPLG1DQUFRLEdBQWxCO1FBQUEsaUJBZUM7UUFkQyxJQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzlCLElBQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFMUQsYUFBYSxDQUFDLE9BQU8sQ0FBQyxVQUFDLFFBQVE7WUFDN0IsSUFBTSxZQUFZLEdBQUcsQ0FBQyxLQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUVqRCxJQUFJLFlBQVksRUFBRTtnQkFDaEIsS0FBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzFCLEtBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDakMsS0FBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQ2xDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDSCx1QkFBQztBQUFELENBQUMsQUFwREQsQ0FBaUQsK0JBQXFCLEdBb0RyRSJ9
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import IGraph from "../../../types/IGraph";
|
|
2
|
-
import AbstractGraphIterator from "./AbstractGraphIterator";
|
|
3
|
-
/**
|
|
4
|
-
* Deep first graph traversal
|
|
5
|
-
*/
|
|
6
|
-
export default class GraphIteratorDFS<T> extends AbstractGraphIterator<T> {
|
|
7
|
-
private readonly stack;
|
|
8
|
-
/**
|
|
9
|
-
* @inheritDoc
|
|
10
|
-
*/
|
|
11
|
-
constructor(graph: IGraph<T>);
|
|
12
|
-
/**
|
|
13
|
-
* @inheritDoc
|
|
14
|
-
*/
|
|
15
|
-
hasNextImpl(): boolean;
|
|
16
|
-
/**
|
|
17
|
-
@inheritDoc
|
|
18
|
-
*/
|
|
19
|
-
initIteratorImpl(startVertex: T): void;
|
|
20
|
-
/**
|
|
21
|
-
* @inheritDoc
|
|
22
|
-
*/
|
|
23
|
-
currentImpl(): T;
|
|
24
|
-
/**
|
|
25
|
-
* @inheritDoc
|
|
26
|
-
*/
|
|
27
|
-
nextImpl(): T;
|
|
28
|
-
}
|
|
@@ -1,70 +0,0 @@
|
|
|
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
|
-
extendStatics(d, b);
|
|
11
|
-
function __() { this.constructor = d; }
|
|
12
|
-
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
13
|
-
};
|
|
14
|
-
})();
|
|
15
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
-
var Stack_1 = require("../../Stack/Stack");
|
|
17
|
-
var AbstractGraphIterator_1 = require("./AbstractGraphIterator");
|
|
18
|
-
/**
|
|
19
|
-
* Deep first graph traversal
|
|
20
|
-
*/
|
|
21
|
-
var GraphIteratorDFS = /** @class */ (function (_super) {
|
|
22
|
-
__extends(GraphIteratorDFS, _super);
|
|
23
|
-
/**
|
|
24
|
-
* @inheritDoc
|
|
25
|
-
*/
|
|
26
|
-
function GraphIteratorDFS(graph) {
|
|
27
|
-
var _this = _super.call(this, graph) || this;
|
|
28
|
-
_this.stack = new Stack_1.default();
|
|
29
|
-
return _this;
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* @inheritDoc
|
|
33
|
-
*/
|
|
34
|
-
GraphIteratorDFS.prototype.hasNextImpl = function () {
|
|
35
|
-
return !this.stack.isEmpty();
|
|
36
|
-
};
|
|
37
|
-
/**
|
|
38
|
-
@inheritDoc
|
|
39
|
-
*/
|
|
40
|
-
GraphIteratorDFS.prototype.initIteratorImpl = function (startVertex) {
|
|
41
|
-
this.stack.push(startVertex);
|
|
42
|
-
this.visited.set(startVertex, true);
|
|
43
|
-
};
|
|
44
|
-
/**
|
|
45
|
-
* @inheritDoc
|
|
46
|
-
*/
|
|
47
|
-
GraphIteratorDFS.prototype.currentImpl = function () {
|
|
48
|
-
return this.stack.peek();
|
|
49
|
-
};
|
|
50
|
-
/**
|
|
51
|
-
* @inheritDoc
|
|
52
|
-
*/
|
|
53
|
-
GraphIteratorDFS.prototype.nextImpl = function () {
|
|
54
|
-
var _this = this;
|
|
55
|
-
var next = this.stack.pop();
|
|
56
|
-
var nextNeighbors = this.graph.getVertexNeighbors(next);
|
|
57
|
-
nextNeighbors.forEach(function (neighbor) {
|
|
58
|
-
var isNotVisited = !_this.visited.get(neighbor);
|
|
59
|
-
if (isNotVisited) {
|
|
60
|
-
_this.stack.push(neighbor);
|
|
61
|
-
_this.visited.set(neighbor, true);
|
|
62
|
-
_this.parents.set(neighbor, next);
|
|
63
|
-
}
|
|
64
|
-
});
|
|
65
|
-
return next;
|
|
66
|
-
};
|
|
67
|
-
return GraphIteratorDFS;
|
|
68
|
-
}(AbstractGraphIterator_1.default));
|
|
69
|
-
exports.default = GraphIteratorDFS;
|
|
70
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhJdGVyYXRvckRGUy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kYXRhLXN0cnVjdHVyZXMvR3JhcGgvaXRlcmF0b3IvR3JhcGhJdGVyYXRvckRGUy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQ0FBc0M7QUFFdEMsaUVBQTREO0FBRTVEOztHQUVHO0FBQ0g7SUFBaUQsb0NBQXdCO0lBR3ZFOztPQUVHO0lBQ0gsMEJBQW1CLEtBQWdCO1FBQW5DLFlBQ0Usa0JBQU0sS0FBSyxDQUFDLFNBRWI7UUFEQyxLQUFJLENBQUMsS0FBSyxHQUFHLElBQUksZUFBSyxFQUFFLENBQUM7O0lBQzNCLENBQUM7SUFFRDs7T0FFRztJQUNJLHNDQUFXLEdBQWxCO1FBQ0UsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVEOztPQUVHO0lBQ0ksMkNBQWdCLEdBQXZCLFVBQXdCLFdBQWM7UUFDcEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7T0FFRztJQUNJLHNDQUFXLEdBQWxCO1FBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRDs7T0FFRztJQUNJLG1DQUFRLEdBQWY7UUFBQSxpQkFlQztRQWRDLElBQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDOUIsSUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUxRCxhQUFhLENBQUMsT0FBTyxDQUFDLFVBQUMsUUFBUTtZQUM3QixJQUFNLFlBQVksR0FBRyxDQUFDLEtBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBRWpELElBQUksWUFBWSxFQUFFO2dCQUNoQixLQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDMUIsS0FBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUNqQyxLQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDbEM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNILHVCQUFDO0FBQUQsQ0FBQyxBQXBERCxDQUFpRCwrQkFBcUIsR0FvRHJFIn0=
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import IGraph from "../../../types/IGraph";
|
|
2
|
-
import AbstractGraphIterator from "./AbstractGraphIterator";
|
|
3
|
-
/**
|
|
4
|
-
* Dijkstra method graph traversal
|
|
5
|
-
*/
|
|
6
|
-
export default class GraphIteratorDijkstra<T> extends AbstractGraphIterator<T> {
|
|
7
|
-
private readonly costs;
|
|
8
|
-
/**
|
|
9
|
-
* @inheritDoc
|
|
10
|
-
*/
|
|
11
|
-
constructor(graph: IGraph<T>);
|
|
12
|
-
/**
|
|
13
|
-
* Get not visited vertex with minimal cost
|
|
14
|
-
*/
|
|
15
|
-
private getClosestNotVisited;
|
|
16
|
-
/**
|
|
17
|
-
* @inheritDoc
|
|
18
|
-
*/
|
|
19
|
-
initIteratorImpl(startVertex: T): void;
|
|
20
|
-
/**
|
|
21
|
-
* @inheritDoc
|
|
22
|
-
*/
|
|
23
|
-
hasNextImpl(): boolean;
|
|
24
|
-
/**
|
|
25
|
-
* @inheritDoc
|
|
26
|
-
*/
|
|
27
|
-
currentImpl(): T;
|
|
28
|
-
/**
|
|
29
|
-
* @inheritDoc
|
|
30
|
-
*/
|
|
31
|
-
nextImpl(): T;
|
|
32
|
-
}
|
|
@@ -1,99 +0,0 @@
|
|
|
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
|
-
extendStatics(d, b);
|
|
11
|
-
function __() { this.constructor = d; }
|
|
12
|
-
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
13
|
-
};
|
|
14
|
-
})();
|
|
15
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
-
var AbstractGraphIterator_1 = require("./AbstractGraphIterator");
|
|
17
|
-
/**
|
|
18
|
-
* Dijkstra method graph traversal
|
|
19
|
-
*/
|
|
20
|
-
var GraphIteratorDijkstra = /** @class */ (function (_super) {
|
|
21
|
-
__extends(GraphIteratorDijkstra, _super);
|
|
22
|
-
/**
|
|
23
|
-
* @inheritDoc
|
|
24
|
-
*/
|
|
25
|
-
function GraphIteratorDijkstra(graph) {
|
|
26
|
-
var _this = _super.call(this, graph) || this;
|
|
27
|
-
_this.costs = new Map();
|
|
28
|
-
return _this;
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Get not visited vertex with minimal cost
|
|
32
|
-
*/
|
|
33
|
-
GraphIteratorDijkstra.prototype.getClosestNotVisited = function () {
|
|
34
|
-
var _this = this;
|
|
35
|
-
var keys = Array.from(this.costs.keys());
|
|
36
|
-
var priorityList = keys
|
|
37
|
-
.filter(function (key) { return !_this.visited.get(key); })
|
|
38
|
-
.sort(function (aKey, bKey) {
|
|
39
|
-
var aCost = _this.costs.get(aKey) || 0;
|
|
40
|
-
var bCost = _this.costs.get(bKey) || 0;
|
|
41
|
-
return aCost - bCost;
|
|
42
|
-
});
|
|
43
|
-
if (priorityList[0] === undefined) {
|
|
44
|
-
throw new Error("No more vertices found");
|
|
45
|
-
}
|
|
46
|
-
return priorityList[0];
|
|
47
|
-
};
|
|
48
|
-
/**
|
|
49
|
-
* @inheritDoc
|
|
50
|
-
*/
|
|
51
|
-
GraphIteratorDijkstra.prototype.initIteratorImpl = function (startVertex) {
|
|
52
|
-
var _this = this;
|
|
53
|
-
if (!this.graph.hasVertex(startVertex)) {
|
|
54
|
-
throw new Error("Start vertex does not exist");
|
|
55
|
-
}
|
|
56
|
-
this.visited.set(startVertex, true);
|
|
57
|
-
this.costs.set(startVertex, 0);
|
|
58
|
-
this.graph.getVertexNeighbors(startVertex).forEach(function (neighbor) {
|
|
59
|
-
var edgeWeight = _this.graph.getEdgeWeight(startVertex, neighbor);
|
|
60
|
-
_this.costs.set(neighbor, edgeWeight);
|
|
61
|
-
_this.parents.set(neighbor, startVertex);
|
|
62
|
-
});
|
|
63
|
-
};
|
|
64
|
-
/**
|
|
65
|
-
* @inheritDoc
|
|
66
|
-
*/
|
|
67
|
-
GraphIteratorDijkstra.prototype.hasNextImpl = function () {
|
|
68
|
-
return !(this.getClosestNotVisited() === null);
|
|
69
|
-
};
|
|
70
|
-
/**
|
|
71
|
-
* @inheritDoc
|
|
72
|
-
*/
|
|
73
|
-
GraphIteratorDijkstra.prototype.currentImpl = function () {
|
|
74
|
-
return this.getClosestNotVisited();
|
|
75
|
-
};
|
|
76
|
-
/**
|
|
77
|
-
* @inheritDoc
|
|
78
|
-
*/
|
|
79
|
-
GraphIteratorDijkstra.prototype.nextImpl = function () {
|
|
80
|
-
var _this = this;
|
|
81
|
-
var next = this.getClosestNotVisited();
|
|
82
|
-
this.visited.set(next, true);
|
|
83
|
-
var nextNeighbors = this.graph.getVertexNeighbors(next);
|
|
84
|
-
var nextCost = this.costs.get(next);
|
|
85
|
-
nextNeighbors.forEach(function (neighbor) {
|
|
86
|
-
var edgeWeight = _this.graph.getEdgeWeight(next, neighbor);
|
|
87
|
-
var currentNeighborCost = _this.costs.get(neighbor) || Infinity;
|
|
88
|
-
var newNeighborCost = (nextCost || 0) + edgeWeight;
|
|
89
|
-
if (newNeighborCost < currentNeighborCost) {
|
|
90
|
-
_this.costs.set(neighbor, newNeighborCost);
|
|
91
|
-
_this.parents.set(neighbor, next);
|
|
92
|
-
}
|
|
93
|
-
});
|
|
94
|
-
return next;
|
|
95
|
-
};
|
|
96
|
-
return GraphIteratorDijkstra;
|
|
97
|
-
}(AbstractGraphIterator_1.default));
|
|
98
|
-
exports.default = GraphIteratorDijkstra;
|
|
99
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhJdGVyYXRvckRpamtzdHJhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2RhdGEtc3RydWN0dXJlcy9HcmFwaC9pdGVyYXRvci9HcmFwaEl0ZXJhdG9yRGlqa3N0cmEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsaUVBQTREO0FBRTVEOztHQUVHO0FBQ0g7SUFBc0QseUNBQXdCO0lBRzVFOztPQUVHO0lBQ0gsK0JBQW1CLEtBQWdCO1FBQW5DLFlBQ0Usa0JBQU0sS0FBSyxDQUFDLFNBRWI7UUFEQyxLQUFJLENBQUMsS0FBSyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7O0lBQ3pCLENBQUM7SUFFRDs7T0FFRztJQUNLLG9EQUFvQixHQUE1QjtRQUFBLGlCQWdCQztRQWZDLElBQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzNDLElBQU0sWUFBWSxHQUFHLElBQUk7YUFDdEIsTUFBTSxDQUFDLFVBQUMsR0FBTSxJQUFLLE9BQUEsQ0FBQyxLQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBdEIsQ0FBc0IsQ0FBQzthQUMxQyxJQUFJLENBQUMsVUFBQyxJQUFPLEVBQUUsSUFBTztZQUNyQixJQUFNLEtBQUssR0FBRyxLQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEMsSUFBTSxLQUFLLEdBQUcsS0FBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRXhDLE9BQU8sS0FBSyxHQUFHLEtBQUssQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztRQUVMLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRTtZQUNqQyxNQUFNLElBQUksS0FBSyxD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
|