@raikuxq/alg-ds 1.1.5 → 1.2.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.
Files changed (209) hide show
  1. package/README.md +67 -92
  2. package/lib/{algorithms → app/algorithms}/binary-search.d.ts +0 -0
  3. package/lib/app/algorithms/binary-search.js +27 -0
  4. package/lib/{algorithms → app/algorithms}/factorial.d.ts +0 -0
  5. package/lib/{algorithms → app/algorithms}/factorial.js +1 -1
  6. package/lib/{algorithms → app/algorithms}/fibonacci.d.ts +0 -0
  7. package/lib/app/algorithms/fibonacci.js +17 -0
  8. package/lib/{data-structures/Graph → app/algorithms/graph}/iterator/AbstractGraphIterator.d.ts +0 -0
  9. package/lib/app/algorithms/graph/iterator/AbstractGraphIterator.js +83 -0
  10. package/lib/{data-structures/Graph → app/algorithms/graph}/iterator/GraphIteratorBFS.d.ts +0 -0
  11. package/lib/{data-structures/Graph → app/algorithms/graph}/iterator/GraphIteratorBFS.js +2 -2
  12. package/lib/{data-structures/Graph → app/algorithms/graph}/iterator/GraphIteratorDFS.d.ts +0 -0
  13. package/lib/{data-structures/Graph → app/algorithms/graph}/iterator/GraphIteratorDFS.js +2 -2
  14. package/lib/{data-structures/Graph → app/algorithms/graph}/iterator/GraphIteratorDijkstra.d.ts +0 -0
  15. package/lib/{data-structures/Graph → app/algorithms/graph}/iterator/GraphIteratorDijkstra.js +3 -5
  16. package/lib/{data-structures/Graph/strategy → app/algorithms/graph/iterator-strategy}/BFSIterationStrategy.d.ts +0 -0
  17. package/lib/{data-structures/Graph/strategy → app/algorithms/graph/iterator-strategy}/BFSIterationStrategy.js +1 -1
  18. package/lib/{data-structures/Graph/strategy → app/algorithms/graph/iterator-strategy}/DFSIterationStrategy.d.ts +0 -0
  19. package/lib/{data-structures/Graph/strategy → app/algorithms/graph/iterator-strategy}/DFSIterationStrategy.js +1 -1
  20. package/lib/{data-structures/Graph/strategy → app/algorithms/graph/iterator-strategy}/DijkstraIterationStrategy.d.ts +0 -0
  21. package/lib/{data-structures/Graph/strategy → app/algorithms/graph/iterator-strategy}/DijkstraIterationStrategy.js +1 -1
  22. package/lib/{data-structures/Graph → app/algorithms/graph}/presenter/presenterAdjacencyLists.d.ts +0 -0
  23. package/lib/{data-structures/Graph → app/algorithms/graph}/presenter/presenterAdjacencyLists.js +1 -1
  24. package/lib/{data-structures/Graph → app/algorithms/graph}/presenter/presenterAdjacencyMatrix.d.ts +2 -2
  25. package/lib/{data-structures/Graph → app/algorithms/graph}/presenter/presenterAdjacencyMatrix.js +1 -1
  26. package/lib/{data-structures/Graph → app/algorithms/graph}/searching/hasPath.d.ts +0 -0
  27. package/lib/app/algorithms/graph/searching/hasPath.js +30 -0
  28. package/lib/{data-structures/Graph → app/algorithms/graph}/searching/shortestPath.d.ts +0 -0
  29. package/lib/app/algorithms/graph/searching/shortestPath.js +30 -0
  30. package/lib/{data-structures/Graph → app/algorithms/graph}/transposing/transposeDirectedGraph.d.ts +0 -0
  31. package/lib/{data-structures/Graph → app/algorithms/graph}/transposing/transposeDirectedGraph.js +3 -3
  32. package/lib/{algorithms → app/algorithms}/memoize.d.ts +0 -0
  33. package/lib/{algorithms → app/algorithms}/memoize.js +1 -1
  34. package/lib/{algorithms → app/algorithms}/sorts/bubble-sort.d.ts +0 -0
  35. package/lib/{algorithms → app/algorithms}/sorts/bubble-sort.js +1 -1
  36. package/lib/{algorithms → app/algorithms}/sorts/insertion-sort.d.ts +0 -0
  37. package/lib/app/algorithms/sorts/insertion-sort.js +25 -0
  38. package/lib/{algorithms → app/algorithms}/sorts/merge-sort.d.ts +0 -0
  39. package/lib/app/algorithms/sorts/merge-sort.js +61 -0
  40. package/lib/{algorithms → app/algorithms}/sorts/quick-sort.d.ts +0 -0
  41. package/lib/{algorithms → app/algorithms}/sorts/quick-sort.js +1 -1
  42. package/lib/{algorithms → app/algorithms}/sorts/select-sort.d.ts +0 -0
  43. package/lib/{algorithms → app/algorithms}/sorts/select-sort.js +1 -1
  44. package/lib/app/algorithms/transpose-matrix.d.ts +5 -0
  45. package/lib/app/algorithms/transpose-matrix.js +18 -0
  46. package/lib/{constants.d.ts → app/constants.d.ts} +0 -0
  47. package/lib/{constants.js → app/constants.js} +1 -1
  48. package/lib/{data-structures → app/data-structures}/BinaryTree/AbstractBinaryTree/AbstractBinaryNode.d.ts +0 -0
  49. package/lib/{data-structures → app/data-structures}/BinaryTree/AbstractBinaryTree/AbstractBinaryNode.js +1 -1
  50. package/lib/{data-structures → app/data-structures}/BinaryTree/AbstractBinaryTree/AbstractBinaryTree.d.ts +0 -0
  51. package/lib/{data-structures → app/data-structures}/BinaryTree/AbstractBinaryTree/AbstractBinaryTree.js +1 -1
  52. package/lib/{data-structures → app/data-structures}/BinaryTree/BinarySearchTree/BinarySearchNode.d.ts +0 -0
  53. package/lib/{data-structures → app/data-structures}/BinaryTree/BinarySearchTree/BinarySearchNode.js +1 -1
  54. package/lib/{data-structures → app/data-structures}/BinaryTree/BinarySearchTree/BinarySearchTree.d.ts +0 -0
  55. package/lib/{data-structures → app/data-structures}/BinaryTree/BinarySearchTree/BinarySearchTree.js +7 -4
  56. package/lib/{data-structures → app/data-structures}/BinaryTree/RandBinarySearchTree/RandBinarySearchNode.d.ts +0 -0
  57. package/lib/{data-structures → app/data-structures}/BinaryTree/RandBinarySearchTree/RandBinarySearchNode.js +1 -1
  58. package/lib/{data-structures → app/data-structures}/BinaryTree/RandBinarySearchTree/RandBinarySearchTree.d.ts +0 -0
  59. package/lib/{data-structures → app/data-structures}/BinaryTree/RandBinarySearchTree/RandBinarySearchTree.js +3 -2
  60. package/lib/app/data-structures/BinaryTree/_helpers/createBinaryTree.d.ts +6 -0
  61. package/lib/app/data-structures/BinaryTree/_helpers/createBinaryTree.js +22 -0
  62. package/lib/{data-structures → app/data-structures}/Graph/AbstractGraph.d.ts +0 -0
  63. package/lib/app/data-structures/Graph/AbstractGraph.js +143 -0
  64. package/lib/{data-structures → app/data-structures}/Graph/DirectedGraph.d.ts +0 -0
  65. package/lib/{data-structures → app/data-structures}/Graph/DirectedGraph.js +5 -4
  66. package/lib/{data-structures → app/data-structures}/Graph/GraphEdge.d.ts +0 -0
  67. package/lib/{data-structures → app/data-structures}/Graph/GraphEdge.js +1 -1
  68. package/lib/{data-structures → app/data-structures}/Graph/UndirectedGraph.d.ts +0 -0
  69. package/lib/app/data-structures/Graph/UndirectedGraph.js +103 -0
  70. package/lib/app/data-structures/Graph/_helpers/createGraph.d.ts +6 -0
  71. package/lib/app/data-structures/Graph/_helpers/createGraph.js +22 -0
  72. package/lib/app/data-structures/Graph/_helpers/createGraphFromMatrix.d.ts +7 -0
  73. package/lib/app/data-structures/Graph/_helpers/createGraphFromMatrix.js +42 -0
  74. package/lib/{data-structures/Graph/demo → app/data-structures/Graph/_helpers}/generateRandomGraph.d.ts +0 -0
  75. package/lib/app/data-structures/Graph/_helpers/generateRandomGraph.js +67 -0
  76. package/lib/{data-structures → app/data-structures}/HashTable/HashTable.d.ts +0 -0
  77. package/lib/app/data-structures/HashTable/HashTable.js +171 -0
  78. package/lib/{data-structures → app/data-structures}/HashTable/HashTableNode.d.ts +0 -0
  79. package/lib/{data-structures → app/data-structures}/HashTable/HashTableNode.js +1 -1
  80. package/lib/{data-structures → app/data-structures}/LinkedList/AbstractLinkedList/AbstractLinkedList.d.ts +2 -2
  81. package/lib/app/data-structures/LinkedList/AbstractLinkedList/AbstractLinkedList.js +241 -0
  82. package/lib/{data-structures → app/data-structures}/LinkedList/AbstractLinkedList/AbstractLinkedNode.d.ts +0 -0
  83. package/lib/{data-structures → app/data-structures}/LinkedList/AbstractLinkedList/AbstractLinkedNode.js +1 -1
  84. package/lib/{data-structures → app/data-structures}/LinkedList/DoubleLinkedList/DoubleLinkedList.d.ts +0 -0
  85. package/lib/{data-structures → app/data-structures}/LinkedList/DoubleLinkedList/DoubleLinkedList.js +4 -3
  86. package/lib/{data-structures → app/data-structures}/LinkedList/DoubleLinkedList/DoubleLinkedNode.d.ts +0 -0
  87. package/lib/{data-structures → app/data-structures}/LinkedList/DoubleLinkedList/DoubleLinkedNode.js +1 -1
  88. package/lib/{data-structures → app/data-structures}/LinkedList/SingleLinkedList/SingleLinkedList.d.ts +0 -0
  89. package/lib/{data-structures → app/data-structures}/LinkedList/SingleLinkedList/SingleLinkedList.js +3 -2
  90. package/lib/{data-structures → app/data-structures}/LinkedList/SingleLinkedList/SingleLinkedNode.d.ts +0 -0
  91. package/lib/{data-structures → app/data-structures}/LinkedList/SingleLinkedList/SingleLinkedNode.js +1 -1
  92. package/lib/app/data-structures/LinkedList/_helpers/createLinkedList.d.ts +3 -0
  93. package/lib/app/data-structures/LinkedList/_helpers/createLinkedList.js +19 -0
  94. package/lib/{data-structures → app/data-structures}/LoopedArray/LoopedArray.d.ts +0 -3
  95. package/lib/{data-structures → app/data-structures}/LoopedArray/LoopedArray.js +17 -9
  96. package/lib/{data-structures → app/data-structures}/Queue/Queue.d.ts +0 -0
  97. package/lib/app/data-structures/Queue/Queue.js +85 -0
  98. package/lib/{data-structures → app/data-structures}/Stack/Stack.d.ts +0 -0
  99. package/lib/app/data-structures/Stack/Stack.js +85 -0
  100. package/lib/app/exceptions/CollectionIsEmptyException.d.ts +4 -0
  101. package/lib/app/exceptions/CollectionIsEmptyException.js +28 -0
  102. package/lib/app/exceptions/CollectionIsFullException.d.ts +4 -0
  103. package/lib/app/exceptions/CollectionIsFullException.js +28 -0
  104. package/lib/app/exceptions/IndexOutOfBoundsException.d.ts +4 -0
  105. package/lib/app/exceptions/IndexOutOfBoundsException.js +28 -0
  106. package/lib/app/exceptions/IsAlreadyExistsException.d.ts +4 -0
  107. package/lib/app/exceptions/IsAlreadyExistsException.js +28 -0
  108. package/lib/app/exceptions/IsNotFoundException.d.ts +4 -0
  109. package/lib/app/exceptions/IsNotFoundException.js +28 -0
  110. package/lib/app/exceptions/ValueOutOfRangeException.d.ts +4 -0
  111. package/lib/app/exceptions/ValueOutOfRangeException.js +28 -0
  112. package/lib/app/exceptions/base/IllegalArgumentException.d.ts +3 -0
  113. package/lib/app/exceptions/base/IllegalArgumentException.js +27 -0
  114. package/lib/app/exceptions/base/IllegalStateException.d.ts +3 -0
  115. package/lib/app/exceptions/base/IllegalStateException.js +27 -0
  116. package/lib/{types → app/types}/EnumBinarySearchTreeType.d.ts +0 -0
  117. package/lib/{types → app/types}/EnumBinarySearchTreeType.js +1 -1
  118. package/lib/app/types/EnumGraphTraversalType.d.ts +5 -0
  119. package/lib/app/types/EnumGraphTraversalType.js +10 -0
  120. package/lib/{types → app/types}/EnumGraphType.d.ts +0 -0
  121. package/lib/{types → app/types}/EnumGraphType.js +1 -1
  122. package/lib/{types → app/types}/EnumLinkedListType.d.ts +0 -0
  123. package/lib/{types → app/types}/EnumLinkedListType.js +1 -1
  124. package/lib/{types → app/types}/EnumRandomGenerationFormat.d.ts +0 -0
  125. package/lib/{types → app/types}/EnumRandomGenerationFormat.js +1 -1
  126. package/lib/app/types/EnumSortType.d.ts +7 -0
  127. package/lib/app/types/EnumSortType.js +12 -0
  128. package/lib/{types → app/types}/EnumTreeTraversalType.d.ts +0 -0
  129. package/lib/{types → app/types}/EnumTreeTraversalType.js +1 -1
  130. package/lib/{types → app/types}/FnCompareTwo.d.ts +0 -0
  131. package/lib/{types → app/types}/FnCompareTwo.js +1 -1
  132. package/lib/{types → app/types}/FnToMemoize.d.ts +0 -0
  133. package/lib/{types → app/types}/FnToMemoize.js +1 -1
  134. package/lib/{types → app/types}/IArrayFacade.d.ts +0 -0
  135. package/lib/{types → app/types}/IArrayFacade.js +1 -1
  136. package/lib/{types → app/types}/IBiDirectIterable.d.ts +0 -0
  137. package/lib/{types → app/types}/IBiDirectIterable.js +1 -1
  138. package/lib/{types → app/types}/IBiDirectIterator.d.ts +0 -0
  139. package/lib/{types → app/types}/IBiDirectIterator.js +1 -1
  140. package/lib/{types → app/types}/IBinaryTree.d.ts +0 -0
  141. package/lib/{types → app/types}/IBinaryTree.js +1 -1
  142. package/lib/{types → app/types}/IConvertableToArray.d.ts +0 -0
  143. package/lib/{types → app/types}/IConvertableToArray.js +1 -1
  144. package/lib/{types → app/types}/IGraph.d.ts +0 -0
  145. package/lib/{types → app/types}/IGraph.js +1 -1
  146. package/lib/{types → app/types}/IGraphIterationStrategy.d.ts +0 -0
  147. package/lib/{types → app/types}/IGraphIterationStrategy.js +1 -1
  148. package/lib/{types → app/types}/IGraphIterator.d.ts +0 -0
  149. package/lib/{types → app/types}/IGraphIterator.js +1 -1
  150. package/lib/{types → app/types}/IIterable.d.ts +0 -0
  151. package/lib/{types → app/types}/IIterable.js +1 -1
  152. package/lib/{types → app/types}/IIterator.d.ts +0 -0
  153. package/lib/{types → app/types}/IIterator.js +1 -1
  154. package/lib/{types → app/types}/IKeyValueStorage.d.ts +0 -0
  155. package/lib/{types → app/types}/IKeyValueStorage.js +1 -1
  156. package/lib/{types → app/types}/ILinearStorage.d.ts +0 -0
  157. package/lib/{types → app/types}/ILinearStorage.js +1 -1
  158. package/lib/{types → app/types}/ILinearStorageRA.d.ts +0 -0
  159. package/lib/{types → app/types}/ILinearStorageRA.js +1 -1
  160. package/lib/{types → app/types}/ILinkedList.d.ts +0 -0
  161. package/lib/{types → app/types}/ILinkedList.js +1 -1
  162. package/lib/app/types/TypeArrayMatrix.d.ts +1 -0
  163. package/lib/app/types/TypeArrayMatrix.js +3 -0
  164. package/lib/{utils.d.ts → app/utils.d.ts} +8 -0
  165. package/lib/{utils.js → app/utils.js} +21 -2
  166. package/lib/exports/algorithms.d.ts +15 -15
  167. package/lib/exports/algorithms.js +16 -16
  168. package/lib/exports/constants.d.ts +1 -1
  169. package/lib/exports/constants.js +2 -2
  170. package/lib/exports/data-structures.d.ts +10 -10
  171. package/lib/exports/data-structures.js +11 -11
  172. package/lib/exports/helpers.d.ts +5 -5
  173. package/lib/exports/helpers.js +6 -6
  174. package/lib/exports/sorts.d.ts +5 -5
  175. package/lib/exports/sorts.js +6 -6
  176. package/lib/exports/types.d.ts +16 -0
  177. package/lib/exports/types.js +34 -0
  178. package/lib/exports/utils.d.ts +2 -2
  179. package/lib/exports/utils.js +3 -3
  180. package/lib/exports.d.ts +47 -38
  181. package/lib/exports.js +56 -40
  182. package/lib/index.js +1 -2
  183. package/package.json +11 -6
  184. package/lib/algorithms/binary-search.js +0 -27
  185. package/lib/algorithms/fibonacci.js +0 -17
  186. package/lib/algorithms/sorts/insertion-sort.js +0 -25
  187. package/lib/algorithms/sorts/merge-sort.js +0 -61
  188. package/lib/algorithms/transpose-matrix.d.ts +0 -5
  189. package/lib/algorithms/transpose-matrix.js +0 -20
  190. package/lib/data-structures/Graph/AbstractGraph.js +0 -141
  191. package/lib/data-structures/Graph/UndirectedGraph.js +0 -102
  192. package/lib/data-structures/Graph/demo/generateRandomGraph.js +0 -72
  193. package/lib/data-structures/Graph/iterator/AbstractGraphIterator.js +0 -90
  194. package/lib/data-structures/Graph/searching/hasPath.js +0 -29
  195. package/lib/data-structures/Graph/searching/shortestPath.js +0 -29
  196. package/lib/data-structures/HashTable/HashTable.js +0 -169
  197. package/lib/data-structures/LinkedList/AbstractLinkedList/AbstractLinkedList.js +0 -236
  198. package/lib/data-structures/Queue/Queue.js +0 -83
  199. package/lib/data-structures/Stack/Stack.js +0 -83
  200. package/lib/helpers/createBinaryTree.d.ts +0 -6
  201. package/lib/helpers/createBinaryTree.js +0 -22
  202. package/lib/helpers/createGraph.d.ts +0 -6
  203. package/lib/helpers/createGraph.js +0 -24
  204. package/lib/helpers/createGraphFromMatrix.d.ts +0 -7
  205. package/lib/helpers/createGraphFromMatrix.js +0 -37
  206. package/lib/helpers/createLinkedList.d.ts +0 -3
  207. package/lib/helpers/createLinkedList.js +0 -21
  208. package/lib/types/ArrayMatrix.d.ts +0 -1
  209. package/lib/types/ArrayMatrix.js +0 -3
@@ -1,141 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- var AbstractGraph = /** @class */ (function () {
4
- /**
5
- * Created empty instance
6
- */
7
- function AbstractGraph() {
8
- this._vertices = new Map();
9
- this._edges = new Array();
10
- }
11
- /**
12
- * Get vertices list in array format
13
- */
14
- AbstractGraph.prototype.getVerticesArrayFormat = function () {
15
- return Array.from(this._vertices.keys());
16
- };
17
- /**
18
- * Find vertex in vertices list by its data
19
- * @throws when vertex was not found
20
- */
21
- AbstractGraph.prototype.tryFindVertex = function (data) {
22
- var isExists = this._vertices.has(data);
23
- if (!isExists) {
24
- throw new Error("Vertex not found");
25
- }
26
- return data;
27
- };
28
- /**
29
- * Update edge weight between from and to vertices
30
- */
31
- AbstractGraph.prototype.updateEdgeWeight = function (from, to, weight) {
32
- var edge = this.getEdgeByValue(from, to);
33
- edge.weight = weight;
34
- };
35
- /**
36
- * Will remove all vertex relations with others vertices
37
- */
38
- AbstractGraph.prototype.cascadeRemoveVertexRelations = function (vertexToRemove) {
39
- var _this = this;
40
- this.getVerticesArrayFormat().forEach(function (neighbor) {
41
- var neighborVertexNeighbors = _this._vertices.get(neighbor);
42
- if (neighborVertexNeighbors) {
43
- var neighborVertexFilteredNeighbors = neighborVertexNeighbors.filter(function (newNeighbor) { return newNeighbor !== vertexToRemove; });
44
- _this._vertices.set(neighbor, neighborVertexFilteredNeighbors);
45
- }
46
- });
47
- };
48
- /**
49
- * Will remove all vertices edges with vertex to remove
50
- */
51
- AbstractGraph.prototype.cascadeRemoveVertexEdges = function (vertexToRemove) {
52
- this._edges = this._edges.filter(function (edge) {
53
- var shouldBeDeleted = edge.toVertex === vertexToRemove || edge.fromVertex === vertexToRemove;
54
- return !shouldBeDeleted;
55
- });
56
- };
57
- /**
58
- * Get sum of all graph edges
59
- */
60
- AbstractGraph.prototype.weight = function () {
61
- return this._edges.reduce(function (acc, edge) { return acc + edge.weight; }, 0);
62
- };
63
- /**
64
- * Get array of vertices
65
- */
66
- AbstractGraph.prototype.vertices = function () {
67
- return this.getVerticesArrayFormat().map(function (vertex) { return vertex; });
68
- };
69
- /**
70
- * Get vertices count
71
- */
72
- AbstractGraph.prototype.verticesCount = function () {
73
- return this.vertices().length;
74
- };
75
- /**
76
- * Get edges count
77
- */
78
- AbstractGraph.prototype.edgesCount = function () {
79
- return this._edges.length;
80
- };
81
- /**
82
- * Add vertex
83
- * @throws when vertex is already exists
84
- */
85
- AbstractGraph.prototype.addVertex = function (data) {
86
- if (this.hasVertex(data)) {
87
- throw new Error("Vertex is already exist");
88
- }
89
- this._vertices.set(data, new Array());
90
- return this;
91
- };
92
- /**
93
- * Remove vertex
94
- * @throws when vertex is already does not exist
95
- */
96
- AbstractGraph.prototype.removeVertex = function (data) {
97
- try {
98
- var vertexToRemove = this.tryFindVertex(data);
99
- this.cascadeRemoveVertexEdges(vertexToRemove);
100
- this.cascadeRemoveVertexRelations(vertexToRemove);
101
- this._vertices.delete(vertexToRemove);
102
- }
103
- catch (e) {
104
- throw new Error("Vertex does not exist already");
105
- }
106
- return this;
107
- };
108
- /**
109
- * Get vertex neighbors by its data
110
- */
111
- AbstractGraph.prototype.getVertexNeighbors = function (data) {
112
- var vertex = this.tryFindVertex(data);
113
- return this._vertices.get(vertex) || [];
114
- };
115
- /**
116
- * Check if graph has vertex
117
- */
118
- AbstractGraph.prototype.hasVertex = function (data) {
119
- return this._vertices.has(data);
120
- };
121
- /**
122
- * Check if graph has edge between from and to vertices
123
- */
124
- AbstractGraph.prototype.hasEdge = function (from, to) {
125
- return Boolean(this._edges.find(function (edge) {
126
- return edge.fromVertex === from && edge.toVertex === to;
127
- }));
128
- };
129
- /**
130
- * Get edge weight between from and to vertices
131
- */
132
- AbstractGraph.prototype.getEdgeWeight = function (from, to) {
133
- var fromVertex = this.tryFindVertex(from);
134
- var toVertex = this.tryFindVertex(to);
135
- var edge = this.getEdgeByValue(fromVertex, toVertex);
136
- return edge.weight;
137
- };
138
- return AbstractGraph;
139
- }());
140
- exports.default = AbstractGraph;
141
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RHcmFwaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kYXRhLXN0cnVjdHVyZXMvR3JhcGgvQWJzdHJhY3RHcmFwaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBO0lBSUU7O09BRUc7SUFDSDtRQUNFLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxHQUFHLEVBQWUsQ0FBQztRQUN4QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksS0FBSyxFQUFnQixDQUFDO0lBQzFDLENBQUM7SUFPRDs7T0FFRztJQUNPLDhDQUFzQixHQUFoQztRQUNFLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVEOzs7T0FHRztJQUNPLHFDQUFhLEdBQXZCLFVBQXdCLElBQU87UUFDN0IsSUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFMUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNiLE1BQU0sSUFBSSxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztTQUNyQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOztPQUVHO0lBQ08sd0NBQWdCLEdBQTFCLFVBQTJCLElBQU8sRUFBRSxFQUFLLEVBQUUsTUFBYztRQUN2RCxJQUFNLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztRQUUzQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQ7O09BRUc7SUFDTyxvREFBNEIsR0FBdEMsVUFBdUMsY0FBaUI7UUFBeEQsaUJBWUM7UUFYQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxPQUFPLENBQUMsVUFBQyxRQUFXO1lBQ2hELElBQU0sdUJBQXVCLEdBQUcsS0FBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFN0QsSUFBSSx1QkFBdUIsRUFBRTtnQkFDM0IsSUFBTSwrQkFBK0IsR0FBRyx1QkFBdUIsQ0FBQyxNQUFNLENBQ3BFLFVBQUMsV0FBYyxJQUFLLE9BQUEsV0FBVyxLQUFLLGNBQWMsRUFBOUIsQ0FBOEIsQ0FDbkQsQ0FBQztnQkFFRixLQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsK0JBQStCLENBQUMsQ0FBQzthQUMvRDtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ08sZ0RBQXdCLEdBQWxDLFVBQW1DLGNBQWlCO1FBQ2xELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBQyxJQUFrQjtZQUNsRCxJQUFNLGVBQWUsR0FDbkIsSUFBSSxDQUFDLFFBQVEsS0FBSyxjQUFjLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxjQUFjLENBQUM7WUFFekUsT0FBTyxDQUFDLGVBQWUsQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNJLDhCQUFNLEdBQWI7UUFDRSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUN2QixVQUFDLEdBQVcsRUFBRSxJQUFrQixJQUFLLE9BQUEsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQWpCLENBQWlCLEVBQ3RELENBQUMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0ksZ0NBQVEsR0FBZjtRQUNFLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUMsR0FBRyxDQUFDLFVBQUMsTUFBUyxJQUFLLE9BQUEsTUFBTSxFQUFOLENBQU0sQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRDs7T0FFRztJQUNJLHFDQUFhLEdBQXBCO1FBQ0UsT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7T0FFRztJQUNJLGtDQUFVLEdBQWpCO1FBQ0UsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUM1QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksaUNBQVMsR0FBaEIsVUFBaUIsSUFBTztRQUN0QixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDeEIsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1NBQzVDO1FBRUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksS0FBSyxFQUFLLENBQUMsQ0FBQztRQUV6QyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7O09BR0c7SUFDSSxvQ0FBWSxHQUFuQixVQUFvQixJQUFPO1FBQ3pCLElBQUk7WUFDRixJQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRWhELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUM5QyxJQUFJLENBQUMsNEJBQTRCLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDbEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7U0FDdkM7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztTQUNsRDtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQVlEOztPQUVHO0lBQ0ksMENBQWtCLEdBQXpCLFVBQTBCLElBQU87UUFDL0IsSUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxpQ0FBUyxHQUFoQixVQUFpQixJQUFPO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksK0JBQU8sR0FBZCxVQUFlLElBQU8sRUFBRSxFQUFLO1FBQzNCLE9BQU8sT0FBTyxDQUNaLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQUMsSUFBSTtZQUNwQixPQUFPLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssRUFBRSxDQUFDO1FBQzFELENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSSxxQ0FBYSxHQUFwQixVQUFxQixJQUFPLEVBQUUsRUFBSztRQUNqQyxJQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVDLElBQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFeEMsSUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFFdkQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFDSCxvQkFBQztBQUFELENBQUMsQUExTEQsSUEwTEMifQ==
@@ -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,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,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,29 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.hasPath = void 0;
4
- /**
5
- * Check if graph has a path between two vertices
6
- * @throws when start vertex was not found
7
- * @throws when end vertex was not found
8
- * @throws when there is no path between two vertices
9
- */
10
- exports.hasPath = function (graph, from, to, strategy) {
11
- /* Validate */
12
- if (!graph.hasVertex(from)) {
13
- throw new Error("Start vertex was not found");
14
- }
15
- if (!graph.hasVertex(to)) {
16
- throw new Error("End vertex was not found");
17
- }
18
- var iterator = strategy.createIterator(graph);
19
- iterator.initIterator(from);
20
- /* Find target element */
21
- while (iterator.hasNext()) {
22
- var next = iterator.next();
23
- if (next === to) {
24
- return true;
25
- }
26
- }
27
- return false;
28
- };
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzUGF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kYXRhLXN0cnVjdHVyZXMvR3JhcGgvc2VhcmNoaW5nL2hhc1BhdGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBSUE7Ozs7O0dBS0c7QUFDVSxRQUFBLE9BQU8sR0FBRyxVQUNyQixLQUFnQixFQUNoQixJQUFPLEVBQ1AsRUFBSyxFQUNMLFFBQW9DO0lBRXBDLGNBQWM7SUFDZCxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUM7S0FDL0M7SUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTtRQUN4QixNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7S0FDN0M7SUFFRCxJQUFNLFFBQVEsR0FBc0IsUUFBUSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuRSxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRTVCLHlCQUF5QjtJQUN6QixPQUFPLFFBQVEsQ0FBQyxPQUFPLEVBQUUsRUFBRTtRQUN6QixJQUFNLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFN0IsSUFBSSxJQUFJLEtBQUssRUFBRSxFQUFFO1lBQ2YsT0FBTyxJQUFJLENBQUM7U0FDYjtLQUNGO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDLENBQUMifQ==
@@ -1,29 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.shortestPath = void 0;
4
- /**
5
- * Find the shortest path between two vertices
6
- * @throws when start vertex was not found
7
- * @throws when end vertex was not found
8
- * @throws when there is no path between two vertices
9
- */
10
- exports.shortestPath = function (graph, from, to, strategy) {
11
- /* Validate */
12
- if (!graph.hasVertex(from)) {
13
- throw new Error("Start vertex was not found");
14
- }
15
- if (!graph.hasVertex(to)) {
16
- throw new Error("End vertex was not found");
17
- }
18
- var iterator = strategy.createIterator(graph);
19
- iterator.initIterator(from);
20
- /* Find target element */
21
- while (iterator.hasNext()) {
22
- var next = iterator.next();
23
- if (next === to) {
24
- break;
25
- }
26
- }
27
- return iterator.getPath(from, to);
28
- };
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hvcnRlc3RQYXRoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2RhdGEtc3RydWN0dXJlcy9HcmFwaC9zZWFyY2hpbmcvc2hvcnRlc3RQYXRoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUlBOzs7OztHQUtHO0FBQ1UsUUFBQSxZQUFZLEdBQUcsVUFDMUIsS0FBZ0IsRUFDaEIsSUFBTyxFQUNQLEVBQUssRUFDTCxRQUFvQztJQUVwQyxjQUFjO0lBQ2QsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0tBQy9DO0lBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUU7UUFDeEIsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0tBQzdDO0lBRUQsSUFBTSxRQUFRLEdBQXNCLFFBQVEsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkUsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUU1Qix5QkFBeUI7SUFDekIsT0FBTyxRQUFRLENBQUMsT0FBTyxFQUFFLEVBQUU7UUFDekIsSUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBRTdCLElBQUksSUFBSSxLQUFLLEVBQUUsRUFBRTtZQUNmLE1BQU07U0FDUDtLQUNGO0lBRUQsT0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNwQyxDQUFDLENBQUMifQ==
@@ -1,169 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- var HashTableNode_1 = require("./HashTableNode");
4
- /**
5
- * Implementation of open addressing hash table using quadratic probing
6
- */
7
- var HashTable = /** @class */ (function () {
8
- /**
9
- * Given init capacity size will be used
10
- * @throws when initial capacity value is not larger than 0
11
- */
12
- function HashTable(initialCapacity) {
13
- if (initialCapacity === void 0) { initialCapacity = HashTable.DEFAULT_MAX_CAPACITY; }
14
- this.storageCapacity = 0;
15
- if (initialCapacity <= 0) {
16
- throw new Error("Size must be larger than 0");
17
- }
18
- this.maxCapacity = initialCapacity;
19
- this.storage = new Array(this.maxCapacity).fill(null);
20
- }
21
- /**
22
- * Main-hash function
23
- */
24
- HashTable.prototype.hashFn = function (key, number) {
25
- return ((this.innerHashFn(key) + 127 * number + 365 * number * number) %
26
- this.maxCapacity);
27
- };
28
- /**
29
- * Helper-hash function
30
- */
31
- HashTable.prototype.innerHashFn = function (key) {
32
- var length = key.length;
33
- if (length === 0) {
34
- return 0;
35
- }
36
- var substring = key.substring(0, length - 1);
37
- var symbol = key.charCodeAt(length - 1);
38
- return (127 * this.innerHashFn(substring) + symbol) % this.maxCapacity;
39
- };
40
- /**
41
- * Max capacity will be increased and storage will be overwritten
42
- */
43
- HashTable.prototype.resizeStorage = function () {
44
- this.maxCapacity *= 2;
45
- var newArray = new Array(this.maxCapacity).fill(null);
46
- for (var i = 0; i < this.storage.length; i++) {
47
- var element = this.storage[i];
48
- if (element != null) {
49
- for (var j = 0; j < this.maxCapacity; j++) {
50
- var newIndex = this.hashFn(element.key, j);
51
- if (newArray[newIndex] == null) {
52
- newArray[newIndex] = element;
53
- break;
54
- }
55
- }
56
- }
57
- }
58
- return newArray;
59
- };
60
- /**
61
- * Will find node instance by its key
62
- * @throws when element does not exist
63
- */
64
- HashTable.prototype.findNode = function (key) {
65
- for (var i = 0; i < this.maxCapacity; i++) {
66
- var index = this.hashFn(key, i);
67
- var node = this.storage[index];
68
- if ((node === null || node === void 0 ? void 0 : node.key) === key) {
69
- if (node === null || node === void 0 ? void 0 : node.isDeleted) {
70
- break;
71
- }
72
- return node;
73
- }
74
- }
75
- throw new Error("Element does not exist");
76
- };
77
- /**
78
- * Will create new node instance and set in to storage by index
79
- */
80
- HashTable.prototype.addNode = function (key, data, index) {
81
- this.storage[index] = new HashTableNode_1.default(key, data);
82
- this.storageCapacity++;
83
- var loadFactor = this.storageCapacity / this.maxCapacity;
84
- if (loadFactor >= HashTable.MAX_LOAD_FACTOR) {
85
- this.storage = this.resizeStorage();
86
- }
87
- };
88
- /**
89
- * Will create new node instance and set in to storage by index
90
- */
91
- HashTable.prototype.updateNode = function (data, index) {
92
- this.storage[index].data = data;
93
- this.storage[index].isDeleted = false;
94
- };
95
- /**
96
- * Will insert item to hash table
97
- */
98
- HashTable.prototype.set = function (key, data) {
99
- for (var i = 0; i < this.maxCapacity; i++) {
100
- var index = this.hashFn(key, i);
101
- var node = this.storage[index];
102
- var shouldAddNode = node === null;
103
- if (shouldAddNode) {
104
- this.addNode(key, data, index);
105
- break;
106
- }
107
- var shouldUpdateNode = node.key === key;
108
- if (shouldUpdateNode) {
109
- this.updateNode(data, index);
110
- break;
111
- }
112
- }
113
- };
114
- /**
115
- * Will update item property isDeleted to false
116
- * @throws when element does not exist
117
- */
118
- HashTable.prototype.delete = function (key) {
119
- for (var i = 0; i < this.maxCapacity; i++) {
120
- var index = this.hashFn(key, i);
121
- if (this.storage[index] !== null) {
122
- this.storage[index].isDeleted = true;
123
- return;
124
- }
125
- }
126
- throw new Error("Element does not exist");
127
- };
128
- /**
129
- * Will find item in hash table
130
- * @throws when element does not exist
131
- */
132
- HashTable.prototype.get = function (key) {
133
- return this.findNode(key).data;
134
- };
135
- /**
136
- * Check if node with given key exists
137
- */
138
- HashTable.prototype.has = function (key) {
139
- try {
140
- return Boolean(this.findNode(key));
141
- }
142
- catch (e) {
143
- return false;
144
- }
145
- };
146
- /**
147
- * Added elements count
148
- */
149
- HashTable.prototype.length = function () {
150
- var actualItems = this.storage.filter(function (item) {
151
- return item !== null && !item.isDeleted;
152
- });
153
- return actualItems.length;
154
- };
155
- /**
156
- * Will overwrite storage with array of null elements
157
- */
158
- HashTable.prototype.clear = function () {
159
- this.storage = new Array(HashTable.DEFAULT_MAX_CAPACITY).fill(null);
160
- };
161
- /**
162
- Constants
163
- */
164
- HashTable.DEFAULT_MAX_CAPACITY = 100;
165
- HashTable.MAX_LOAD_FACTOR = 0.5;
166
- return HashTable;
167
- }());
168
- exports.default = HashTable;
169
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSGFzaFRhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2RhdGEtc3RydWN0dXJlcy9IYXNoVGFibGUvSGFzaFRhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQ0EsaURBQTRDO0FBRTVDOztHQUVHO0FBQ0g7SUFjRTs7O09BR0c7SUFDSCxtQkFBbUIsZUFBd0Q7UUFBeEQsZ0NBQUEsRUFBQSxrQkFBMEIsU0FBUyxDQUFDLG9CQUFvQjtRQU5uRSxvQkFBZSxHQUFHLENBQUMsQ0FBQztRQU8xQixJQUFJLGVBQWUsSUFBSSxDQUFDLEVBQUU7WUFDeEIsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1NBQy9DO1FBQ0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxlQUFlLENBQUM7UUFDbkMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRDs7T0FFRztJQUNLLDBCQUFNLEdBQWQsVUFBZSxHQUFXLEVBQUUsTUFBYztRQUN4QyxPQUFPLENBQ0wsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxNQUFNLEdBQUcsR0FBRyxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUM7WUFDOUQsSUFBSSxDQUFDLFdBQVcsQ0FDakIsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNLLCtCQUFXLEdBQW5CLFVBQW9CLEdBQVc7UUFDN0IsSUFBTSxNQUFNLEdBQVcsR0FBRyxDQUFDLE1BQU0sQ0FBQztRQUVsQyxJQUFJLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDaEIsT0FBTyxDQUFDLENBQUM7U0FDVjtRQUNELElBQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMvQyxJQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUUxQyxPQUFPLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUN6RSxDQUFDO0lBRUQ7O09BRUc7SUFDSyxpQ0FBYSxHQUFyQjtRQUNFLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxDQUFDO1FBRXRCLElBQU0sUUFBUSxHQUFHLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFeEQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzVDLElBQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFaEMsSUFBSSxPQUFPLElBQUksSUFBSSxFQUFFO2dCQUNuQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDekMsSUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUU3QyxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLEVBQUU7d0JBQzlCLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxPQUFPLENBQUM7d0JBRTdCLE1BQU07cUJBQ1A7aUJBQ0Y7YUFDRjtTQUNGO1FBRUQsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVEOzs7T0FHRztJQUNLLDRCQUFRLEdBQWhCLFVBQWlCLEdBQVc7UUFDMUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDekMsSUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDbEMsSUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUVqQyxJQUFJLENBQUEsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLEdBQUcsTUFBSyxHQUFHLEVBQUU7Z0JBQ3JCLElBQUksSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLFNBQVMsRUFBRTtvQkFDbkIsTUFBTTtpQkFDUDtnQkFDRCxPQUFPLElBQUksQ0FBQzthQUNiO1NBQ0Y7UUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVEOztPQUVHO0lBQ0ssMkJBQU8sR0FBZixVQUFnQixHQUFXLEVBQUUsSUFBTyxFQUFFLEtBQWE7UUFDakQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLHVCQUFhLENBQUksR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRXRELElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QixJQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFFM0QsSUFBSSxVQUFVLElBQUksU0FBUyxDQUFDLGVBQWUsRUFBRTtZQUMzQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUNyQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLDhCQUFVLEdBQWxCLFVBQW1CLElBQU8sRUFBRSxLQUFhO1FBQ3ZDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDeEMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksdUJBQUcsR0FBVixVQUFXLEdBQVcsRUFBRSxJQUFPO1FBQzdCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3pDLElBQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2xDLElBQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFakMsSUFBTSxhQUFhLEdBQUcsSUFBSSxLQUFLLElBQUksQ0FBQztZQUNwQyxJQUFJLGFBQWEsRUFBRTtnQkFDakIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUMvQixNQUFNO2FBQ1A7WUFFRCxJQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDO1lBQzFDLElBQUksZ0JBQWdCLEVBQUU7Z0JBQ3BCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUM3QixNQUFNO2FBQ1A7U0FDRjtJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSSwwQkFBTSxHQUFiLFVBQWMsR0FBVztRQUN2QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN6QyxJQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUVsQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxFQUFFO2dCQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7Z0JBQ3JDLE9BQU87YUFDUjtTQUNGO1FBRUQsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRDs7O09BR0c7SUFDSSx1QkFBRyxHQUFWLFVBQVcsR0FBVztRQUNwQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7T0FFRztJQUNJLHVCQUFHLEdBQVYsVUFBVyxHQUFXO1FBQ3BCLElBQUk7WUFDRixPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDcEM7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSSwwQkFBTSxHQUFiO1FBQ0UsSUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBQyxJQUFJO1lBQzNDLE9BQU8sSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLFdBQVcsQ0FBQyxNQUFNLENBQUM7SUFDNUIsQ0FBQztJQUVEOztPQUVHO0lBQ0kseUJBQUssR0FBWjtRQUNFLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLG9CQUFvQixDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFqTUQ7O09BRUc7SUFDWSw4QkFBb0IsR0FBRyxHQUFHLENBQUM7SUFDM0IseUJBQWUsR0FBRyxHQUFHLENBQUM7SUE4THZDLGdCQUFDO0NBQUEsQUFuTUQsSUFtTUM7a0JBbk1vQixTQUFTIn0=