@gabrielrufino/cube 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (240) hide show
  1. package/.github/workflows/cd.yml +26 -0
  2. package/.github/workflows/ci.yml +23 -0
  3. package/LICENSE +24 -0
  4. package/README.md +1695 -0
  5. package/build/Algorithms/index.d.ts +3 -0
  6. package/build/Algorithms/index.js +24 -0
  7. package/build/Array/IArray.d.ts +9 -0
  8. package/build/Array/IArray.js +2 -0
  9. package/build/Array/index.d.ts +12 -0
  10. package/build/Array/index.js +79 -0
  11. package/build/BinarySearchTree/BinarySearchTreeNode.d.ts +7 -0
  12. package/build/BinarySearchTree/BinarySearchTreeNode.js +22 -0
  13. package/build/BinarySearchTree/IBinarySearchNodeOptions.d.ts +5 -0
  14. package/build/BinarySearchTree/IBinarySearchNodeOptions.js +2 -0
  15. package/build/BinarySearchTree/IBinarySearchTree.d.ts +14 -0
  16. package/build/BinarySearchTree/IBinarySearchTree.js +2 -0
  17. package/build/BinarySearchTree/IBinarySearchTreeData.d.ts +7 -0
  18. package/build/BinarySearchTree/IBinarySearchTreeData.js +2 -0
  19. package/build/BinarySearchTree/index.d.ts +24 -0
  20. package/build/BinarySearchTree/index.js +199 -0
  21. package/build/DataStructure/index.d.ts +6 -0
  22. package/build/DataStructure/index.js +32 -0
  23. package/build/Deck/IDeck.d.ts +9 -0
  24. package/build/Deck/IDeck.js +2 -0
  25. package/build/Deck/index.d.ts +12 -0
  26. package/build/Deck/index.js +76 -0
  27. package/build/Dictionary/IDictionary.d.ts +16 -0
  28. package/build/Dictionary/IDictionary.js +2 -0
  29. package/build/Dictionary/IDictionaryData.d.ts +4 -0
  30. package/build/Dictionary/IDictionaryData.js +2 -0
  31. package/build/Dictionary/index.d.ts +21 -0
  32. package/build/Dictionary/index.js +110 -0
  33. package/build/DoublyLinkedList/IDoublyLinkedList.d.ts +16 -0
  34. package/build/DoublyLinkedList/IDoublyLinkedList.js +2 -0
  35. package/build/DoublyLinkedList/Node.d.ts +6 -0
  36. package/build/DoublyLinkedList/Node.js +11 -0
  37. package/build/DoublyLinkedList/index.d.ts +32 -0
  38. package/build/DoublyLinkedList/index.js +221 -0
  39. package/build/Graph/GraphNodeNotFoundError.d.ts +3 -0
  40. package/build/Graph/GraphNodeNotFoundError.js +27 -0
  41. package/build/Graph/GraphSearchNodeStates.d.ts +6 -0
  42. package/build/Graph/GraphSearchNodeStates.js +10 -0
  43. package/build/Graph/IGraph.d.ts +16 -0
  44. package/build/Graph/IGraph.js +2 -0
  45. package/build/Graph/IGraphOptions.d.ts +7 -0
  46. package/build/Graph/IGraphOptions.js +2 -0
  47. package/build/Graph/index.d.ts +20 -0
  48. package/build/Graph/index.js +187 -0
  49. package/build/HashTable/IHashTable.d.ts +9 -0
  50. package/build/HashTable/IHashTable.js +2 -0
  51. package/build/HashTable/IHashTableData.d.ts +4 -0
  52. package/build/HashTable/IHashTableData.js +2 -0
  53. package/build/HashTable/IHashTableInputs.d.ts +4 -0
  54. package/build/HashTable/IHashTableInputs.js +2 -0
  55. package/build/HashTable/IHashTableOptions.d.ts +4 -0
  56. package/build/HashTable/IHashTableOptions.js +2 -0
  57. package/build/HashTable/index.d.ts +16 -0
  58. package/build/HashTable/index.js +83 -0
  59. package/build/HashTableLinearProbing/HashTableLinearProbingElement.d.ts +6 -0
  60. package/build/HashTableLinearProbing/HashTableLinearProbingElement.js +19 -0
  61. package/build/HashTableLinearProbing/IHashTableLinearProbing.d.ts +9 -0
  62. package/build/HashTableLinearProbing/IHashTableLinearProbing.js +2 -0
  63. package/build/HashTableLinearProbing/IHashTableLinearProbingData.d.ts +5 -0
  64. package/build/HashTableLinearProbing/IHashTableLinearProbingData.js +2 -0
  65. package/build/HashTableLinearProbing/IHashTableLinearProbingInputs.d.ts +4 -0
  66. package/build/HashTableLinearProbing/IHashTableLinearProbingInputs.js +2 -0
  67. package/build/HashTableLinearProbing/IHashTableLinearProbingOptions.d.ts +4 -0
  68. package/build/HashTableLinearProbing/IHashTableLinearProbingOptions.js +2 -0
  69. package/build/HashTableLinearProbing/index.d.ts +20 -0
  70. package/build/HashTableLinearProbing/index.js +120 -0
  71. package/build/HashTableSeparateChaining/HashTableSeparateChainingElement.d.ts +6 -0
  72. package/build/HashTableSeparateChaining/HashTableSeparateChainingElement.js +21 -0
  73. package/build/HashTableSeparateChaining/IHashTableSeparateChaining.d.ts +10 -0
  74. package/build/HashTableSeparateChaining/IHashTableSeparateChaining.js +2 -0
  75. package/build/HashTableSeparateChaining/IHashTableSeparateChainingData.d.ts +5 -0
  76. package/build/HashTableSeparateChaining/IHashTableSeparateChainingData.js +2 -0
  77. package/build/HashTableSeparateChaining/IHashTableSeparateChainingInputs.d.ts +4 -0
  78. package/build/HashTableSeparateChaining/IHashTableSeparateChainingInputs.js +2 -0
  79. package/build/HashTableSeparateChaining/IHashTableSeparateChainingOptions.d.ts +4 -0
  80. package/build/HashTableSeparateChaining/IHashTableSeparateChainingOptions.js +2 -0
  81. package/build/HashTableSeparateChaining/index.d.ts +19 -0
  82. package/build/HashTableSeparateChaining/index.js +104 -0
  83. package/build/LinkedList/ILinkedList.d.ts +13 -0
  84. package/build/LinkedList/ILinkedList.js +2 -0
  85. package/build/LinkedList/ILinkedListItem.d.ts +5 -0
  86. package/build/LinkedList/ILinkedListItem.js +2 -0
  87. package/build/LinkedList/Node.d.ts +5 -0
  88. package/build/LinkedList/Node.js +10 -0
  89. package/build/LinkedList/index.d.ts +24 -0
  90. package/build/LinkedList/index.js +169 -0
  91. package/build/List/index.d.ts +1 -0
  92. package/build/List/index.js +8 -0
  93. package/build/MaxHeap/IMaxHeap.d.ts +9 -0
  94. package/build/MaxHeap/IMaxHeap.js +2 -0
  95. package/build/MaxHeap/IMaxHeapOptions.d.ts +5 -0
  96. package/build/MaxHeap/IMaxHeapOptions.js +2 -0
  97. package/build/MaxHeap/index.d.ts +19 -0
  98. package/build/MaxHeap/index.js +102 -0
  99. package/build/MinHeap/IMinHeap.d.ts +9 -0
  100. package/build/MinHeap/IMinHeap.js +2 -0
  101. package/build/MinHeap/IMinHeapOptions.d.ts +5 -0
  102. package/build/MinHeap/IMinHeapOptions.js +2 -0
  103. package/build/MinHeap/index.d.ts +19 -0
  104. package/build/MinHeap/index.js +102 -0
  105. package/build/Queue/IQueue.d.ts +8 -0
  106. package/build/Queue/IQueue.js +2 -0
  107. package/build/Queue/index.d.ts +11 -0
  108. package/build/Queue/index.js +74 -0
  109. package/build/Set/ISet.d.ts +15 -0
  110. package/build/Set/ISet.js +2 -0
  111. package/build/Set/index.d.ts +21 -0
  112. package/build/Set/index.js +132 -0
  113. package/build/Stack/IStack.d.ts +8 -0
  114. package/build/Stack/IStack.js +2 -0
  115. package/build/Stack/index.d.ts +11 -0
  116. package/build/Stack/index.js +64 -0
  117. package/build/index.d.ts +17 -0
  118. package/build/index.js +40 -0
  119. package/coverage/clover.xml +706 -0
  120. package/coverage/coverage-final.json +19 -0
  121. package/coverage/lcov-report/base.css +224 -0
  122. package/coverage/lcov-report/block-navigation.js +87 -0
  123. package/coverage/lcov-report/favicon.png +0 -0
  124. package/coverage/lcov-report/index.html +327 -0
  125. package/coverage/lcov-report/prettify.css +1 -0
  126. package/coverage/lcov-report/prettify.js +2 -0
  127. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  128. package/coverage/lcov-report/sorter.js +196 -0
  129. package/coverage/lcov-report/src/Algorithms/index.html +117 -0
  130. package/coverage/lcov-report/src/Algorithms/index.ts.html +149 -0
  131. package/coverage/lcov-report/src/Array/index.html +117 -0
  132. package/coverage/lcov-report/src/Array/index.ts.html +290 -0
  133. package/coverage/lcov-report/src/DataStructure/index.html +117 -0
  134. package/coverage/lcov-report/src/DataStructure/index.ts.html +131 -0
  135. package/coverage/lcov-report/src/Deck/index.html +117 -0
  136. package/coverage/lcov-report/src/Deck/index.ts.html +239 -0
  137. package/coverage/lcov-report/src/Dictionary/index.html +117 -0
  138. package/coverage/lcov-report/src/Dictionary/index.ts.html +350 -0
  139. package/coverage/lcov-report/src/DoublyLinkedList/Node.ts.html +113 -0
  140. package/coverage/lcov-report/src/DoublyLinkedList/index.html +132 -0
  141. package/coverage/lcov-report/src/DoublyLinkedList/index.ts.html +836 -0
  142. package/coverage/lcov-report/src/HashTable/index.html +117 -0
  143. package/coverage/lcov-report/src/HashTable/index.ts.html +320 -0
  144. package/coverage/lcov-report/src/HashTableLinearProbing/index.html +117 -0
  145. package/coverage/lcov-report/src/HashTableLinearProbing/index.ts.html +95 -0
  146. package/coverage/lcov-report/src/HashTableSeparateChaining/HashTableSeparateChainingElement.ts.html +149 -0
  147. package/coverage/lcov-report/src/HashTableSeparateChaining/index.html +132 -0
  148. package/coverage/lcov-report/src/HashTableSeparateChaining/index.ts.html +398 -0
  149. package/coverage/lcov-report/src/LinkedList/Node.ts.html +110 -0
  150. package/coverage/lcov-report/src/LinkedList/index.html +132 -0
  151. package/coverage/lcov-report/src/LinkedList/index.ts.html +641 -0
  152. package/coverage/lcov-report/src/List/index.html +117 -0
  153. package/coverage/lcov-report/src/List/index.ts.html +89 -0
  154. package/coverage/lcov-report/src/Queue/index.html +117 -0
  155. package/coverage/lcov-report/src/Queue/index.ts.html +218 -0
  156. package/coverage/lcov-report/src/Set/index.html +117 -0
  157. package/coverage/lcov-report/src/Set/index.ts.html +488 -0
  158. package/coverage/lcov-report/src/Stack/index.html +117 -0
  159. package/coverage/lcov-report/src/Stack/index.ts.html +215 -0
  160. package/coverage/lcov-report/src/index.html +117 -0
  161. package/coverage/lcov-report/src/index.ts.html +125 -0
  162. package/coverage/lcov.info +1346 -0
  163. package/package.json +42 -0
  164. package/src/Algorithms/index.spec.ts +15 -0
  165. package/src/Algorithms/index.ts +21 -0
  166. package/src/Array/IArray.ts +10 -0
  167. package/src/Array/index.spec.ts +151 -0
  168. package/src/Array/index.ts +68 -0
  169. package/src/BinarySearchTree/BinarySearchTreeNode.spec.ts +29 -0
  170. package/src/BinarySearchTree/BinarySearchTreeNode.ts +23 -0
  171. package/src/BinarySearchTree/IBinarySearchNodeOptions.ts +6 -0
  172. package/src/BinarySearchTree/IBinarySearchTree.ts +16 -0
  173. package/src/BinarySearchTree/IBinarySearchTreeData.ts +9 -0
  174. package/src/BinarySearchTree/index.spec.ts +486 -0
  175. package/src/BinarySearchTree/index.ts +198 -0
  176. package/src/DataStructure/index.spec.ts +25 -0
  177. package/src/DataStructure/index.ts +15 -0
  178. package/src/Deck/IDeck.ts +10 -0
  179. package/src/Deck/index.spec.ts +131 -0
  180. package/src/Deck/index.ts +51 -0
  181. package/src/Dictionary/IDictionary.ts +18 -0
  182. package/src/Dictionary/IDictionaryData.ts +5 -0
  183. package/src/Dictionary/index.spec.ts +310 -0
  184. package/src/Dictionary/index.ts +88 -0
  185. package/src/DoublyLinkedList/IDoublyLinkedList.ts +18 -0
  186. package/src/DoublyLinkedList/Node.ts +9 -0
  187. package/src/DoublyLinkedList/index.spec.ts +478 -0
  188. package/src/DoublyLinkedList/index.ts +250 -0
  189. package/src/Graph/GraphNodeNotFoundError.ts +7 -0
  190. package/src/Graph/GraphSearchNodeStates.ts +8 -0
  191. package/src/Graph/IGraph.ts +15 -0
  192. package/src/Graph/IGraphOptions.ts +6 -0
  193. package/src/Graph/index.spec.ts +318 -0
  194. package/src/Graph/index.ts +170 -0
  195. package/src/HashTable/IHashTable.ts +11 -0
  196. package/src/HashTable/IHashTableData.ts +5 -0
  197. package/src/HashTable/IHashTableInputs.ts +5 -0
  198. package/src/HashTable/IHashTableOptions.ts +5 -0
  199. package/src/HashTable/index.spec.ts +136 -0
  200. package/src/HashTable/index.ts +78 -0
  201. package/src/HashTableLinearProbing/HashTableLinearProbingElement.spec.ts +28 -0
  202. package/src/HashTableLinearProbing/HashTableLinearProbingElement.ts +18 -0
  203. package/src/HashTableLinearProbing/IHashTableLinearProbing.ts +11 -0
  204. package/src/HashTableLinearProbing/IHashTableLinearProbingData.ts +7 -0
  205. package/src/HashTableLinearProbing/IHashTableLinearProbingInputs.ts +5 -0
  206. package/src/HashTableLinearProbing/IHashTableLinearProbingOptions.ts +5 -0
  207. package/src/HashTableLinearProbing/index.spec.ts +266 -0
  208. package/src/HashTableLinearProbing/index.ts +128 -0
  209. package/src/HashTableSeparateChaining/HashTableSeparateChainingElement.ts +21 -0
  210. package/src/HashTableSeparateChaining/IHashTableSeparateChaining.ts +12 -0
  211. package/src/HashTableSeparateChaining/IHashTableSeparateChainingData.ts +7 -0
  212. package/src/HashTableSeparateChaining/IHashTableSeparateChainingInputs.ts +5 -0
  213. package/src/HashTableSeparateChaining/IHashTableSeparateChainingOptions.ts +5 -0
  214. package/src/HashTableSeparateChaining/index.spec.ts +173 -0
  215. package/src/HashTableSeparateChaining/index.ts +104 -0
  216. package/src/LinkedList/ILinkedList.ts +15 -0
  217. package/src/LinkedList/ILinkedListItem.ts +6 -0
  218. package/src/LinkedList/Node.ts +8 -0
  219. package/src/LinkedList/index.spec.ts +355 -0
  220. package/src/LinkedList/index.ts +185 -0
  221. package/src/List/index.ts +1 -0
  222. package/src/MaxHeap/IMaxHeap.ts +10 -0
  223. package/src/MaxHeap/IMaxHeapOptions.ts +6 -0
  224. package/src/MaxHeap/index.spec.ts +161 -0
  225. package/src/MaxHeap/index.ts +91 -0
  226. package/src/MinHeap/IMinHeap.ts +10 -0
  227. package/src/MinHeap/IMinHeapOptions.ts +6 -0
  228. package/src/MinHeap/index.spec.ts +161 -0
  229. package/src/MinHeap/index.ts +91 -0
  230. package/src/Queue/IQueue.ts +9 -0
  231. package/src/Queue/index.spec.ts +92 -0
  232. package/src/Queue/index.ts +44 -0
  233. package/src/Set/ISet.ts +17 -0
  234. package/src/Set/index.spec.ts +246 -0
  235. package/src/Set/index.ts +134 -0
  236. package/src/Stack/IStack.ts +9 -0
  237. package/src/Stack/index.spec.ts +108 -0
  238. package/src/Stack/index.ts +43 -0
  239. package/src/index.ts +17 -0
  240. package/tsconfig.json +104 -0
@@ -0,0 +1,3 @@
1
+ export default class Algorithms {
2
+ static decimalToBinary(n: number): string;
3
+ }
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var __1 = require("..");
4
+ var Algorithms = /** @class */ (function () {
5
+ function Algorithms() {
6
+ }
7
+ Algorithms.decimalToBinary = function (n) {
8
+ var _a;
9
+ var stack = new __1.Stack();
10
+ while (n > 0) {
11
+ var rem = Math.floor(n % 2);
12
+ stack.push(rem);
13
+ n = Math.floor(n / 2);
14
+ }
15
+ var binary = '';
16
+ while (!stack.isEmpty) {
17
+ // eslint-disable-next-line no-unsafe-optional-chaining
18
+ binary += (_a = stack.pop()) === null || _a === void 0 ? void 0 : _a.toString();
19
+ }
20
+ return binary;
21
+ };
22
+ return Algorithms;
23
+ }());
24
+ exports.default = Algorithms;
@@ -0,0 +1,9 @@
1
+ interface IArray<T> {
2
+ insertInLastPosition(_element: T): T;
3
+ insertInFirstPosition(_element: T): T;
4
+ insertInPosition(_position: number, _element: T): T;
5
+ removeFromLastPosition(): T | undefined;
6
+ removeFromFirstPosition(): T | undefined;
7
+ removeFromPosition(_position: number): T | undefined;
8
+ }
9
+ export default IArray;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,12 @@
1
+ import DataStructure from '../DataStructure';
2
+ import IArray from './IArray';
3
+ export default class Array<T = number> extends DataStructure<T> implements IArray<T> {
4
+ constructor(...inputs: T[]);
5
+ insertInLastPosition(element: T): T;
6
+ insertInFirstPosition(element: T): T;
7
+ insertInPosition(position: number, element: T): T;
8
+ removeFromLastPosition(): T | undefined;
9
+ removeFromFirstPosition(): T | undefined;
10
+ removeFromPosition(position: number): T | undefined;
11
+ private [Symbol.toPrimitive];
12
+ }
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ if (typeof b !== "function" && b !== null)
11
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
+ extendStatics(d, b);
13
+ function __() { this.constructor = d; }
14
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
+ };
16
+ })();
17
+ var __importDefault = (this && this.__importDefault) || function (mod) {
18
+ return (mod && mod.__esModule) ? mod : { "default": mod };
19
+ };
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ var DataStructure_1 = __importDefault(require("../DataStructure"));
22
+ var Array = /** @class */ (function (_super) {
23
+ __extends(Array, _super);
24
+ function Array() {
25
+ var inputs = [];
26
+ for (var _i = 0; _i < arguments.length; _i++) {
27
+ inputs[_i] = arguments[_i];
28
+ }
29
+ return _super.call(this, inputs) || this;
30
+ }
31
+ Array.prototype.insertInLastPosition = function (element) {
32
+ this._data[this.size] = element;
33
+ return element;
34
+ };
35
+ Array.prototype.insertInFirstPosition = function (element) {
36
+ for (var i = this.size; i > 0; i--) {
37
+ this._data[i] = this._data[i - 1];
38
+ }
39
+ this._data[0] = element;
40
+ return element;
41
+ };
42
+ Array.prototype.insertInPosition = function (position, element) {
43
+ this._data.splice(position, 0, element);
44
+ return element;
45
+ };
46
+ Array.prototype.removeFromLastPosition = function () {
47
+ var element = this._data[this.size - 1];
48
+ var array = new Array();
49
+ for (var i = 0; i < this.size - 1; i++) {
50
+ array.insertInLastPosition(this._data[i]);
51
+ }
52
+ this._data = array.data;
53
+ return element;
54
+ };
55
+ Array.prototype.removeFromFirstPosition = function () {
56
+ var element = this._data[0];
57
+ var array = new Array();
58
+ for (var i = 0; i < this.size - 1; i++) {
59
+ array.insertInLastPosition(this._data[i + 1]);
60
+ }
61
+ this._data = array.data;
62
+ return element;
63
+ };
64
+ Array.prototype.removeFromPosition = function (position) {
65
+ var element = this._data.splice(position, 1)[0];
66
+ return element;
67
+ };
68
+ Array.prototype[Symbol.toPrimitive] = function (type) {
69
+ if (type === 'string') {
70
+ return this.data.join(', ');
71
+ }
72
+ if (type === 'number') {
73
+ return this.size;
74
+ }
75
+ return null;
76
+ };
77
+ return Array;
78
+ }(DataStructure_1.default));
79
+ exports.default = Array;
@@ -0,0 +1,7 @@
1
+ export default class BinarySearchTreeNode<T> {
2
+ value: T;
3
+ left: BinarySearchTreeNode<T> | null;
4
+ right: BinarySearchTreeNode<T> | null;
5
+ constructor(value: T);
6
+ [Symbol.toPrimitive](type: string): string | number | null;
7
+ }
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var BinarySearchTreeNode = /** @class */ (function () {
4
+ function BinarySearchTreeNode(value) {
5
+ this.left = null;
6
+ this.right = null;
7
+ this.value = value;
8
+ this.left = null;
9
+ this.right = null;
10
+ }
11
+ BinarySearchTreeNode.prototype[Symbol.toPrimitive] = function (type) {
12
+ if (type === 'string') {
13
+ return "[".concat(this.left, "] <= (").concat(this.value, ") => [").concat(this.right, "]");
14
+ }
15
+ if (type === 'number') {
16
+ return 1 + (this.left ? 1 : 0) + (this.right ? 1 : 0);
17
+ }
18
+ return null;
19
+ };
20
+ return BinarySearchTreeNode;
21
+ }());
22
+ exports.default = BinarySearchTreeNode;
@@ -0,0 +1,5 @@
1
+ interface IBinarySearchNodeOptions<T> {
2
+ inputs?: T[];
3
+ lessThanOrEqualTo?: (_value1: T, _value2: T) => boolean;
4
+ }
5
+ export default IBinarySearchNodeOptions;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,14 @@
1
+ import IBinarySearchTreeData from './IBinarySearchTreeData';
2
+ interface IBinarySearchTree<T> {
3
+ get data(): IBinarySearchTreeData<T>;
4
+ get size(): number;
5
+ get min(): T | null;
6
+ get max(): T | null;
7
+ insert(_value: T): T;
8
+ walkInOrder(_callback: (_value: T) => any): void;
9
+ walkPreOrder(_callback: (_value: T) => any): void;
10
+ walkPostOrder(_callback: (_value: T) => any): void;
11
+ search(_value: T): boolean;
12
+ remove(_value: T): T | null;
13
+ }
14
+ export default IBinarySearchTree;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,7 @@
1
+ import BinarySearchTreeNode from './BinarySearchTreeNode';
2
+ interface IBinarySearchTreeData<T> {
3
+ left: BinarySearchTreeNode<T> | null;
4
+ value: T | null;
5
+ right: BinarySearchTreeNode<T> | null;
6
+ }
7
+ export default IBinarySearchTreeData;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,24 @@
1
+ import IBinarySearchNodeOptions from './IBinarySearchNodeOptions';
2
+ import IBinarySearchTree from './IBinarySearchTree';
3
+ import IBinarySearchTreeData from './IBinarySearchTreeData';
4
+ export default class BinarySearchTree<T = number> implements IBinarySearchTree<T> {
5
+ private _root;
6
+ private _size;
7
+ constructor({ inputs, lessThanOrEqualTo }?: IBinarySearchNodeOptions<T>);
8
+ get data(): IBinarySearchTreeData<T>;
9
+ get size(): number;
10
+ get min(): T | null;
11
+ get max(): T | null;
12
+ insert(value: T): T;
13
+ walkInOrder(callback: (_value: T) => any): void;
14
+ walkPreOrder(callback: (_value: T) => any): void;
15
+ walkPostOrder(callback: (_value: T) => any): void;
16
+ search(value: T): boolean;
17
+ remove(value: T): T | null;
18
+ private _lessThanOrEqualTo;
19
+ private _insertChild;
20
+ private _visitNodeInOrder;
21
+ private _visitNodePreOrder;
22
+ private _visitNodePostOrder;
23
+ private [Symbol.toPrimitive];
24
+ }
@@ -0,0 +1,199 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ var BinarySearchTreeNode_1 = __importDefault(require("./BinarySearchTreeNode"));
18
+ var BinarySearchTree = /** @class */ (function () {
19
+ function BinarySearchTree(_a) {
20
+ var _b = _a === void 0 ? { inputs: [] } : _a, _c = _b.inputs, inputs = _c === void 0 ? [] : _c, lessThanOrEqualTo = _b.lessThanOrEqualTo;
21
+ this._root = null;
22
+ this._size = 0;
23
+ if (lessThanOrEqualTo) {
24
+ this._lessThanOrEqualTo = lessThanOrEqualTo;
25
+ }
26
+ for (var _i = 0, inputs_1 = inputs; _i < inputs_1.length; _i++) {
27
+ var value = inputs_1[_i];
28
+ this.insert(value);
29
+ }
30
+ this._size = inputs.length;
31
+ }
32
+ Object.defineProperty(BinarySearchTree.prototype, "data", {
33
+ get: function () {
34
+ return this._root || {
35
+ left: null,
36
+ value: null,
37
+ right: null,
38
+ };
39
+ },
40
+ enumerable: false,
41
+ configurable: true
42
+ });
43
+ Object.defineProperty(BinarySearchTree.prototype, "size", {
44
+ get: function () {
45
+ return this._size;
46
+ },
47
+ enumerable: false,
48
+ configurable: true
49
+ });
50
+ Object.defineProperty(BinarySearchTree.prototype, "min", {
51
+ get: function () {
52
+ var current = this._root;
53
+ while (current && current.left) {
54
+ current = current.left;
55
+ }
56
+ return (current === null || current === void 0 ? void 0 : current.value) || null;
57
+ },
58
+ enumerable: false,
59
+ configurable: true
60
+ });
61
+ Object.defineProperty(BinarySearchTree.prototype, "max", {
62
+ get: function () {
63
+ var current = this._root;
64
+ while (current && current.right) {
65
+ current = current.right;
66
+ }
67
+ return (current === null || current === void 0 ? void 0 : current.value) || null;
68
+ },
69
+ enumerable: false,
70
+ configurable: true
71
+ });
72
+ BinarySearchTree.prototype.insert = function (value) {
73
+ var node = new BinarySearchTreeNode_1.default(value);
74
+ if (this._root) {
75
+ this._insertChild(this._root, node);
76
+ }
77
+ else {
78
+ this._root = node;
79
+ }
80
+ this._size += 1;
81
+ return value;
82
+ };
83
+ BinarySearchTree.prototype.walkInOrder = function (callback) {
84
+ this._visitNodeInOrder(this._root, callback);
85
+ };
86
+ BinarySearchTree.prototype.walkPreOrder = function (callback) {
87
+ this._visitNodePreOrder(this._root, callback);
88
+ };
89
+ BinarySearchTree.prototype.walkPostOrder = function (callback) {
90
+ this._visitNodePostOrder(this._root, callback);
91
+ };
92
+ BinarySearchTree.prototype.search = function (value) {
93
+ var current = this._root;
94
+ while (current && current.value !== value) {
95
+ if (this._lessThanOrEqualTo(value, current.value)) {
96
+ current = current.left;
97
+ }
98
+ else {
99
+ current = current.right;
100
+ }
101
+ }
102
+ return Boolean(current);
103
+ };
104
+ BinarySearchTree.prototype.remove = function (value) {
105
+ var current = this._root;
106
+ var path = [];
107
+ while (current && current.value !== value) {
108
+ if (this._lessThanOrEqualTo(value, current.value)) {
109
+ current = current.left;
110
+ path.push('left');
111
+ }
112
+ else {
113
+ current = current.right;
114
+ path.push('right');
115
+ }
116
+ }
117
+ var found = __assign({}, current);
118
+ var parent = path
119
+ .slice(0, path.length - 1)
120
+ .reduce(function (accumulator, current) { return accumulator && accumulator[current]; }, this._root);
121
+ var child = path[path.length - 1];
122
+ if ((current === null || current === void 0 ? void 0 : current.left) && (current === null || current === void 0 ? void 0 : current.right) && parent) {
123
+ var head = current.right;
124
+ while (head.left) {
125
+ head = head.left;
126
+ }
127
+ this.remove(head.value);
128
+ current.value = head.value;
129
+ }
130
+ else if ((current === null || current === void 0 ? void 0 : current.left) && parent) {
131
+ parent[child] = current.left;
132
+ this._size -= 1;
133
+ }
134
+ else if ((current === null || current === void 0 ? void 0 : current.right) && parent) {
135
+ parent[child] = current.right;
136
+ this._size -= 1;
137
+ }
138
+ else if (parent) {
139
+ parent[child] = null;
140
+ this._size -= 1;
141
+ }
142
+ return found.value || null;
143
+ };
144
+ BinarySearchTree.prototype._lessThanOrEqualTo = function (value1, value2) {
145
+ if (value1 <= value2) {
146
+ return true;
147
+ }
148
+ return false;
149
+ };
150
+ BinarySearchTree.prototype._insertChild = function (father, child) {
151
+ if (this._lessThanOrEqualTo(child.value, father.value)) {
152
+ if (father.left) {
153
+ this._insertChild(father.left, child);
154
+ }
155
+ else {
156
+ father.left = child;
157
+ }
158
+ return;
159
+ }
160
+ if (father.right) {
161
+ this._insertChild(father.right, child);
162
+ }
163
+ else {
164
+ father.right = child;
165
+ }
166
+ };
167
+ BinarySearchTree.prototype._visitNodeInOrder = function (node, callback) {
168
+ if (node) {
169
+ this._visitNodeInOrder(node.left, callback);
170
+ callback(node.value);
171
+ this._visitNodeInOrder(node.right, callback);
172
+ }
173
+ };
174
+ BinarySearchTree.prototype._visitNodePreOrder = function (node, callback) {
175
+ if (node) {
176
+ callback(node.value);
177
+ this._visitNodePreOrder(node.left, callback);
178
+ this._visitNodePreOrder(node.right, callback);
179
+ }
180
+ };
181
+ BinarySearchTree.prototype._visitNodePostOrder = function (node, callback) {
182
+ if (node) {
183
+ this._visitNodePostOrder(node.left, callback);
184
+ this._visitNodePostOrder(node.right, callback);
185
+ callback(node.value);
186
+ }
187
+ };
188
+ BinarySearchTree.prototype[Symbol.toPrimitive] = function (type) {
189
+ if (type === 'string') {
190
+ return "".concat(this._root);
191
+ }
192
+ if (type === 'number') {
193
+ return this.size;
194
+ }
195
+ return null;
196
+ };
197
+ return BinarySearchTree;
198
+ }());
199
+ exports.default = BinarySearchTree;
@@ -0,0 +1,6 @@
1
+ export default abstract class DataStructure<T> {
2
+ protected _data: T[];
3
+ constructor(inputs: T[]);
4
+ get data(): T[];
5
+ get size(): number;
6
+ }
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
3
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
4
+ if (ar || !(i in from)) {
5
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
6
+ ar[i] = from[i];
7
+ }
8
+ }
9
+ return to.concat(ar || Array.prototype.slice.call(from));
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ var DataStructure = /** @class */ (function () {
13
+ function DataStructure(inputs) {
14
+ this._data = __spreadArray([], inputs, true);
15
+ }
16
+ Object.defineProperty(DataStructure.prototype, "data", {
17
+ get: function () {
18
+ return __spreadArray([], this._data, true);
19
+ },
20
+ enumerable: false,
21
+ configurable: true
22
+ });
23
+ Object.defineProperty(DataStructure.prototype, "size", {
24
+ get: function () {
25
+ return this._data.length;
26
+ },
27
+ enumerable: false,
28
+ configurable: true
29
+ });
30
+ return DataStructure;
31
+ }());
32
+ exports.default = DataStructure;
@@ -0,0 +1,9 @@
1
+ interface IDeck<T> {
2
+ addFront(_element: T): T;
3
+ addBack(_element: T): T;
4
+ removeFront(): T | undefined;
5
+ removeBack(): T | undefined;
6
+ peekFront(): T | undefined;
7
+ peekBack(): T | undefined;
8
+ }
9
+ export default IDeck;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,12 @@
1
+ import DataStructure from '../DataStructure';
2
+ import IDeck from './IDeck';
3
+ export default class Deck<T = number> extends DataStructure<T> implements IDeck<T> {
4
+ constructor(...inputs: T[]);
5
+ addFront(element: T): T;
6
+ addBack(element: T): T;
7
+ removeFront(): T | undefined;
8
+ removeBack(): T | undefined;
9
+ peekFront(): T | undefined;
10
+ peekBack(): T | undefined;
11
+ private [Symbol.toPrimitive];
12
+ }
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ if (typeof b !== "function" && b !== null)
11
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
+ extendStatics(d, b);
13
+ function __() { this.constructor = d; }
14
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
+ };
16
+ })();
17
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
18
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
19
+ if (ar || !(i in from)) {
20
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
21
+ ar[i] = from[i];
22
+ }
23
+ }
24
+ return to.concat(ar || Array.prototype.slice.call(from));
25
+ };
26
+ var __importDefault = (this && this.__importDefault) || function (mod) {
27
+ return (mod && mod.__esModule) ? mod : { "default": mod };
28
+ };
29
+ Object.defineProperty(exports, "__esModule", { value: true });
30
+ var DataStructure_1 = __importDefault(require("../DataStructure"));
31
+ var Deck = /** @class */ (function (_super) {
32
+ __extends(Deck, _super);
33
+ function Deck() {
34
+ var inputs = [];
35
+ for (var _i = 0; _i < arguments.length; _i++) {
36
+ inputs[_i] = arguments[_i];
37
+ }
38
+ return _super.call(this, inputs) || this;
39
+ }
40
+ Deck.prototype.addFront = function (element) {
41
+ this._data = __spreadArray([element], this.data, true);
42
+ return element;
43
+ };
44
+ Deck.prototype.addBack = function (element) {
45
+ this._data = __spreadArray(__spreadArray([], this.data, true), [element], false);
46
+ return element;
47
+ };
48
+ Deck.prototype.removeFront = function () {
49
+ var _a = this.data, element = _a[0], rest = _a.slice(1);
50
+ this._data = rest;
51
+ return element;
52
+ };
53
+ Deck.prototype.removeBack = function () {
54
+ var element = this._data.pop();
55
+ return element;
56
+ };
57
+ Deck.prototype.peekFront = function () {
58
+ var element = this.data[0];
59
+ return element;
60
+ };
61
+ Deck.prototype.peekBack = function () {
62
+ var element = this.data[this.size - 1];
63
+ return element;
64
+ };
65
+ Deck.prototype[Symbol.toPrimitive] = function (type) {
66
+ if (type === 'string') {
67
+ return "[Front] ".concat(this.data.join(', '), " [Back]");
68
+ }
69
+ if (type === 'number') {
70
+ return this.size;
71
+ }
72
+ return null;
73
+ };
74
+ return Deck;
75
+ }(DataStructure_1.default));
76
+ exports.default = Deck;
@@ -0,0 +1,16 @@
1
+ import IDictionaryData from './IDictionaryData';
2
+ interface IDictionary<T> {
3
+ get data(): IDictionaryData<T>;
4
+ get size(): number;
5
+ get isEmpty(): boolean;
6
+ get keys(): string[];
7
+ get values(): T[];
8
+ get pairs(): [string, T][];
9
+ set(_key: string, _value: T): [string, T];
10
+ remove(_key: string): [string, T] | null;
11
+ hasKey(_key: string): boolean;
12
+ get(_key: string): T | null;
13
+ clear(): IDictionaryData<T>;
14
+ forEach(_func: (_key: string, _value: T) => any): void;
15
+ }
16
+ export default IDictionary;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,4 @@
1
+ interface IDictionaryData<T> {
2
+ [key: string]: T;
3
+ }
4
+ export default IDictionaryData;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,21 @@
1
+ import IDictionary from './IDictionary';
2
+ import IDictionaryData from './IDictionaryData';
3
+ export default class Dictionary<T = number> implements IDictionary<T> {
4
+ private _data;
5
+ constructor(inputs?: {
6
+ [key: string]: T;
7
+ });
8
+ get data(): IDictionaryData<T>;
9
+ get size(): number;
10
+ get isEmpty(): boolean;
11
+ get keys(): string[];
12
+ get values(): T[];
13
+ get pairs(): [string, T][];
14
+ set(key: string, value: T): [string, T];
15
+ remove(key: string): [string, T] | null;
16
+ hasKey(key: string): boolean;
17
+ get(key: string): T | null;
18
+ clear(): IDictionaryData<T>;
19
+ forEach(func: (_key: string, _value: T) => any): void;
20
+ private [Symbol.toPrimitive];
21
+ }