data-structure-typed 2.5.0 → 2.5.2

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 (246) hide show
  1. package/.vitepress/cache/deps_temp_51f5f1b0/chunk-7OIKW5WK.js +12984 -0
  2. package/.vitepress/cache/deps_temp_51f5f1b0/package.json +3 -0
  3. package/.vitepress/cache/deps_temp_51f5f1b0/vitepress___@vue_devtools-api.js +4505 -0
  4. package/.vitepress/cache/deps_temp_51f5f1b0/vitepress___@vueuse_core.js +9731 -0
  5. package/.vitepress/cache/deps_temp_51f5f1b0/vue.js +347 -0
  6. package/CHANGELOG.md +5 -1
  7. package/README.md +124 -29
  8. package/dist/cjs/binary-tree.cjs +26282 -0
  9. package/dist/cjs/graph.cjs +5422 -0
  10. package/dist/cjs/hash.cjs +1310 -0
  11. package/dist/cjs/heap.cjs +1602 -0
  12. package/dist/cjs/index.cjs +31257 -14673
  13. package/dist/cjs/linked-list.cjs +4576 -0
  14. package/dist/cjs/matrix.cjs +1080 -0
  15. package/dist/cjs/priority-queue.cjs +1376 -0
  16. package/dist/cjs/queue.cjs +4264 -0
  17. package/dist/cjs/stack.cjs +907 -0
  18. package/dist/cjs/trie.cjs +1223 -0
  19. package/dist/cjs-legacy/binary-tree.cjs +26319 -0
  20. package/dist/cjs-legacy/graph.cjs +5420 -0
  21. package/dist/cjs-legacy/hash.cjs +1310 -0
  22. package/dist/cjs-legacy/heap.cjs +1599 -0
  23. package/dist/cjs-legacy/index.cjs +31268 -14679
  24. package/dist/cjs-legacy/linked-list.cjs +4582 -0
  25. package/dist/cjs-legacy/matrix.cjs +1083 -0
  26. package/dist/cjs-legacy/priority-queue.cjs +1374 -0
  27. package/dist/cjs-legacy/queue.cjs +4262 -0
  28. package/dist/cjs-legacy/stack.cjs +907 -0
  29. package/dist/cjs-legacy/trie.cjs +1222 -0
  30. package/dist/esm/binary-tree.mjs +26267 -0
  31. package/dist/esm/graph.mjs +5409 -0
  32. package/dist/esm/hash.mjs +1307 -0
  33. package/dist/esm/heap.mjs +1596 -0
  34. package/dist/esm/index.mjs +31254 -14674
  35. package/dist/esm/linked-list.mjs +4569 -0
  36. package/dist/esm/matrix.mjs +1076 -0
  37. package/dist/esm/priority-queue.mjs +1372 -0
  38. package/dist/esm/queue.mjs +4260 -0
  39. package/dist/esm/stack.mjs +905 -0
  40. package/dist/esm/trie.mjs +1220 -0
  41. package/dist/esm-legacy/binary-tree.mjs +26304 -0
  42. package/dist/esm-legacy/graph.mjs +5407 -0
  43. package/dist/esm-legacy/hash.mjs +1307 -0
  44. package/dist/esm-legacy/heap.mjs +1593 -0
  45. package/dist/esm-legacy/index.mjs +31265 -14680
  46. package/dist/esm-legacy/linked-list.mjs +4575 -0
  47. package/dist/esm-legacy/matrix.mjs +1079 -0
  48. package/dist/esm-legacy/priority-queue.mjs +1370 -0
  49. package/dist/esm-legacy/queue.mjs +4258 -0
  50. package/dist/esm-legacy/stack.mjs +905 -0
  51. package/dist/esm-legacy/trie.mjs +1219 -0
  52. package/dist/types/common/error.d.ts +9 -0
  53. package/dist/types/common/index.d.ts +1 -1
  54. package/dist/types/data-structures/base/index.d.ts +1 -0
  55. package/dist/types/data-structures/base/iterable-entry-base.d.ts +8 -8
  56. package/dist/types/data-structures/base/linear-base.d.ts +3 -3
  57. package/dist/types/data-structures/binary-tree/avl-tree.d.ts +288 -0
  58. package/dist/types/data-structures/binary-tree/binary-indexed-tree.d.ts +336 -0
  59. package/dist/types/data-structures/binary-tree/binary-tree.d.ts +618 -18
  60. package/dist/types/data-structures/binary-tree/bst.d.ts +676 -1
  61. package/dist/types/data-structures/binary-tree/red-black-tree.d.ts +456 -0
  62. package/dist/types/data-structures/binary-tree/segment-tree.d.ts +144 -1
  63. package/dist/types/data-structures/binary-tree/tree-map.d.ts +3307 -399
  64. package/dist/types/data-structures/binary-tree/tree-multi-map.d.ts +3285 -360
  65. package/dist/types/data-structures/binary-tree/tree-multi-set.d.ts +2674 -325
  66. package/dist/types/data-structures/binary-tree/tree-set.d.ts +3072 -287
  67. package/dist/types/data-structures/graph/abstract-graph.d.ts +4 -4
  68. package/dist/types/data-structures/graph/directed-graph.d.ts +240 -0
  69. package/dist/types/data-structures/graph/undirected-graph.d.ts +216 -0
  70. package/dist/types/data-structures/hash/hash-map.d.ts +274 -10
  71. package/dist/types/data-structures/heap/heap.d.ts +336 -0
  72. package/dist/types/data-structures/linked-list/doubly-linked-list.d.ts +411 -3
  73. package/dist/types/data-structures/linked-list/singly-linked-list.d.ts +363 -3
  74. package/dist/types/data-structures/linked-list/skip-linked-list.d.ts +434 -2
  75. package/dist/types/data-structures/matrix/matrix.d.ts +192 -0
  76. package/dist/types/data-structures/queue/deque.d.ts +364 -4
  77. package/dist/types/data-structures/queue/queue.d.ts +288 -0
  78. package/dist/types/data-structures/stack/stack.d.ts +240 -0
  79. package/dist/types/data-structures/trie/trie.d.ts +292 -4
  80. package/dist/types/interfaces/graph.d.ts +1 -1
  81. package/dist/types/types/common.d.ts +2 -2
  82. package/dist/types/types/data-structures/binary-tree/bst.d.ts +1 -0
  83. package/dist/types/types/data-structures/binary-tree/tree-map.d.ts +5 -0
  84. package/dist/types/types/data-structures/binary-tree/tree-multi-set.d.ts +4 -0
  85. package/dist/types/types/data-structures/binary-tree/tree-set.d.ts +4 -0
  86. package/dist/types/types/data-structures/heap/heap.d.ts +1 -0
  87. package/dist/types/types/data-structures/priority-queue/priority-queue.d.ts +1 -0
  88. package/dist/types/types/utils/validate-type.d.ts +4 -4
  89. package/dist/umd/data-structure-typed.js +31196 -14608
  90. package/dist/umd/data-structure-typed.min.js +11 -5
  91. package/docs-site-docusaurus/README.md +41 -0
  92. package/docs-site-docusaurus/docs/api/README.md +52 -0
  93. package/docs-site-docusaurus/docs/api/classes/AVLTree.md +6644 -0
  94. package/docs-site-docusaurus/docs/api/classes/AVLTreeNode.md +282 -0
  95. package/docs-site-docusaurus/docs/api/classes/AbstractGraph.md +2266 -0
  96. package/docs-site-docusaurus/docs/api/classes/BST.md +6293 -0
  97. package/docs-site-docusaurus/docs/api/classes/BSTNode.md +333 -0
  98. package/docs-site-docusaurus/docs/api/classes/BinaryIndexedTree.md +455 -0
  99. package/docs-site-docusaurus/docs/api/classes/BinaryTree.md +4647 -0
  100. package/docs-site-docusaurus/docs/api/classes/BinaryTreeNode.md +331 -0
  101. package/docs-site-docusaurus/docs/api/classes/Deque.md +2767 -0
  102. package/docs-site-docusaurus/docs/api/classes/DirectedGraph.md +2999 -0
  103. package/docs-site-docusaurus/docs/api/classes/DoublyLinkedList.md +2685 -0
  104. package/docs-site-docusaurus/docs/api/classes/DoublyLinkedListNode.md +221 -0
  105. package/docs-site-docusaurus/docs/api/classes/FibonacciHeap.md +253 -0
  106. package/docs-site-docusaurus/docs/api/classes/FibonacciHeapNode.md +21 -0
  107. package/docs-site-docusaurus/docs/api/classes/HashMap.md +1333 -0
  108. package/docs-site-docusaurus/docs/api/classes/Heap.md +1881 -0
  109. package/docs-site-docusaurus/docs/api/classes/IterableElementBase.md +800 -0
  110. package/docs-site-docusaurus/docs/api/classes/IterableEntryBase.md +644 -0
  111. package/docs-site-docusaurus/docs/api/classes/LinearBase.md +1632 -0
  112. package/docs-site-docusaurus/docs/api/classes/LinearLinkedBase.md +1853 -0
  113. package/docs-site-docusaurus/docs/api/classes/LinkedHashMap.md +1108 -0
  114. package/docs-site-docusaurus/docs/api/classes/LinkedListNode.md +156 -0
  115. package/docs-site-docusaurus/docs/api/classes/LinkedListQueue.md +2824 -0
  116. package/docs-site-docusaurus/docs/api/classes/MapGraph.md +2929 -0
  117. package/docs-site-docusaurus/docs/api/classes/Matrix.md +1026 -0
  118. package/docs-site-docusaurus/docs/api/classes/MaxHeap.md +1866 -0
  119. package/docs-site-docusaurus/docs/api/classes/MaxPriorityQueue.md +1883 -0
  120. package/docs-site-docusaurus/docs/api/classes/MinHeap.md +1879 -0
  121. package/docs-site-docusaurus/docs/api/classes/MinPriorityQueue.md +1882 -0
  122. package/docs-site-docusaurus/docs/api/classes/Navigator.md +109 -0
  123. package/docs-site-docusaurus/docs/api/classes/PriorityQueue.md +1839 -0
  124. package/docs-site-docusaurus/docs/api/classes/Queue.md +2244 -0
  125. package/docs-site-docusaurus/docs/api/classes/RedBlackTree.md +6888 -0
  126. package/docs-site-docusaurus/docs/api/classes/SegmentTree.md +372 -0
  127. package/docs-site-docusaurus/docs/api/classes/SinglyLinkedList.md +2897 -0
  128. package/docs-site-docusaurus/docs/api/classes/SinglyLinkedListNode.md +169 -0
  129. package/docs-site-docusaurus/docs/api/classes/SkipList.md +1229 -0
  130. package/docs-site-docusaurus/docs/api/classes/Stack.md +1573 -0
  131. package/docs-site-docusaurus/docs/api/classes/TreeMap.md +1389 -0
  132. package/docs-site-docusaurus/docs/api/classes/TreeMultiMap.md +1591 -0
  133. package/docs-site-docusaurus/docs/api/classes/TreeSet.md +1246 -0
  134. package/docs-site-docusaurus/docs/api/classes/Trie.md +1708 -0
  135. package/docs-site-docusaurus/docs/api/classes/TrieNode.md +199 -0
  136. package/docs-site-docusaurus/docs/api/classes/UndirectedGraph.md +2979 -0
  137. package/docs-site-docusaurus/docs/guide/_category_.json +6 -0
  138. package/docs-site-docusaurus/docs/guide/architecture.md +615 -0
  139. package/docs-site-docusaurus/docs/guide/concepts.md +451 -0
  140. package/docs-site-docusaurus/docs/guide/faq.md +180 -0
  141. package/docs-site-docusaurus/docs/guide/guides.md +597 -0
  142. package/docs-site-docusaurus/docs/guide/installation.md +62 -0
  143. package/docs-site-docusaurus/docs/guide/integrations.md +825 -0
  144. package/docs-site-docusaurus/docs/guide/overview.md +645 -0
  145. package/docs-site-docusaurus/docs/guide/performance.md +835 -0
  146. package/docs-site-docusaurus/docs/guide/quick-start.md +104 -0
  147. package/docs-site-docusaurus/docs/guide/use-cases/_category_.json +6 -0
  148. package/docs-site-docusaurus/docs/guide/use-cases/array-sort-alternative.md +158 -0
  149. package/docs-site-docusaurus/docs/guide/use-cases/heap-vs-sorting.md +92 -0
  150. package/docs-site-docusaurus/docs/guide/use-cases/map-vs-treemap.md +151 -0
  151. package/docs-site-docusaurus/docs/guide/use-cases/priority-queue-typescript.md +113 -0
  152. package/docs-site-docusaurus/docs/guide/use-cases/treemap-javascript.md +151 -0
  153. package/docs-site-docusaurus/docusaurus.config.ts +159 -0
  154. package/docs-site-docusaurus/fix-mdx-generics.mjs +75 -0
  155. package/docs-site-docusaurus/package-lock.json +18667 -0
  156. package/docs-site-docusaurus/package.json +50 -0
  157. package/docs-site-docusaurus/prefix-class-to-methods.mjs +48 -0
  158. package/docs-site-docusaurus/sidebars.ts +23 -0
  159. package/docs-site-docusaurus/sort-protected.mjs +87 -0
  160. package/docs-site-docusaurus/src/css/custom.css +96 -0
  161. package/docs-site-docusaurus/src/pages/index.module.css +13 -0
  162. package/docs-site-docusaurus/src/pages/index.tsx +120 -0
  163. package/docs-site-docusaurus/src/pages/markdown-page.md +7 -0
  164. package/docs-site-docusaurus/src/theme/TOCItems/index.tsx +34 -0
  165. package/docs-site-docusaurus/static/.nojekyll +0 -0
  166. package/docs-site-docusaurus/static/img/docusaurus-social-card.jpg +0 -0
  167. package/docs-site-docusaurus/static/img/docusaurus.png +0 -0
  168. package/docs-site-docusaurus/static/img/favicon.ico +0 -0
  169. package/docs-site-docusaurus/static/img/favicon.png +0 -0
  170. package/docs-site-docusaurus/static/img/logo-180.png +0 -0
  171. package/docs-site-docusaurus/static/img/logo.jpg +0 -0
  172. package/docs-site-docusaurus/static/img/logo.png +0 -0
  173. package/docs-site-docusaurus/static/img/logo.svg +1 -0
  174. package/docs-site-docusaurus/static/img/og-image.png +0 -0
  175. package/docs-site-docusaurus/static/img/undraw_docusaurus_mountain.svg +171 -0
  176. package/docs-site-docusaurus/static/img/undraw_docusaurus_react.svg +170 -0
  177. package/docs-site-docusaurus/static/img/undraw_docusaurus_tree.svg +40 -0
  178. package/docs-site-docusaurus/static/llms.txt +37 -0
  179. package/docs-site-docusaurus/static/robots.txt +4 -0
  180. package/docs-site-docusaurus/typedoc.json +23 -0
  181. package/llms.txt +37 -0
  182. package/package.json +159 -55
  183. package/src/common/error.ts +19 -1
  184. package/src/common/index.ts +1 -1
  185. package/src/data-structures/base/index.ts +1 -0
  186. package/src/data-structures/base/iterable-element-base.ts +3 -2
  187. package/src/data-structures/base/iterable-entry-base.ts +8 -8
  188. package/src/data-structures/base/linear-base.ts +3 -3
  189. package/src/data-structures/binary-tree/avl-tree.ts +287 -0
  190. package/src/data-structures/binary-tree/binary-indexed-tree.ts +327 -5
  191. package/src/data-structures/binary-tree/binary-tree.ts +581 -6
  192. package/src/data-structures/binary-tree/bst.ts +922 -7
  193. package/src/data-structures/binary-tree/red-black-tree.ts +453 -0
  194. package/src/data-structures/binary-tree/segment-tree.ts +139 -2
  195. package/src/data-structures/binary-tree/tree-map.ts +3300 -495
  196. package/src/data-structures/binary-tree/tree-multi-map.ts +3384 -563
  197. package/src/data-structures/binary-tree/tree-multi-set.ts +2757 -493
  198. package/src/data-structures/binary-tree/tree-set.ts +3122 -440
  199. package/src/data-structures/graph/abstract-graph.ts +6 -6
  200. package/src/data-structures/graph/directed-graph.ts +230 -0
  201. package/src/data-structures/graph/undirected-graph.ts +207 -0
  202. package/src/data-structures/hash/hash-map.ts +270 -19
  203. package/src/data-structures/heap/heap.ts +326 -4
  204. package/src/data-structures/heap/max-heap.ts +2 -2
  205. package/src/data-structures/linked-list/doubly-linked-list.ts +394 -3
  206. package/src/data-structures/linked-list/singly-linked-list.ts +348 -3
  207. package/src/data-structures/linked-list/skip-linked-list.ts +421 -7
  208. package/src/data-structures/matrix/matrix.ts +194 -10
  209. package/src/data-structures/priority-queue/max-priority-queue.ts +2 -2
  210. package/src/data-structures/queue/deque.ts +350 -5
  211. package/src/data-structures/queue/queue.ts +276 -0
  212. package/src/data-structures/stack/stack.ts +230 -0
  213. package/src/data-structures/trie/trie.ts +283 -7
  214. package/src/interfaces/graph.ts +1 -1
  215. package/src/types/common.ts +2 -2
  216. package/src/types/data-structures/binary-tree/bst.ts +1 -0
  217. package/src/types/data-structures/binary-tree/tree-map.ts +6 -0
  218. package/src/types/data-structures/binary-tree/tree-multi-set.ts +5 -0
  219. package/src/types/data-structures/binary-tree/tree-set.ts +5 -0
  220. package/src/types/data-structures/heap/heap.ts +1 -0
  221. package/src/types/data-structures/priority-queue/priority-queue.ts +1 -0
  222. package/src/types/utils/validate-type.ts +4 -4
  223. package/vercel.json +6 -0
  224. package/dist/leetcode/avl-tree-counter.mjs +0 -2957
  225. package/dist/leetcode/avl-tree-multi-map.mjs +0 -2889
  226. package/dist/leetcode/avl-tree.mjs +0 -2720
  227. package/dist/leetcode/binary-tree.mjs +0 -1594
  228. package/dist/leetcode/bst.mjs +0 -2398
  229. package/dist/leetcode/deque.mjs +0 -683
  230. package/dist/leetcode/directed-graph.mjs +0 -1733
  231. package/dist/leetcode/doubly-linked-list.mjs +0 -709
  232. package/dist/leetcode/hash-map.mjs +0 -493
  233. package/dist/leetcode/heap.mjs +0 -542
  234. package/dist/leetcode/max-heap.mjs +0 -375
  235. package/dist/leetcode/max-priority-queue.mjs +0 -383
  236. package/dist/leetcode/min-heap.mjs +0 -363
  237. package/dist/leetcode/min-priority-queue.mjs +0 -371
  238. package/dist/leetcode/priority-queue.mjs +0 -363
  239. package/dist/leetcode/queue.mjs +0 -943
  240. package/dist/leetcode/red-black-tree.mjs +0 -2765
  241. package/dist/leetcode/singly-linked-list.mjs +0 -754
  242. package/dist/leetcode/stack.mjs +0 -217
  243. package/dist/leetcode/tree-counter.mjs +0 -3039
  244. package/dist/leetcode/tree-multi-map.mjs +0 -2913
  245. package/dist/leetcode/trie.mjs +0 -413
  246. package/dist/leetcode/undirected-graph.mjs +0 -1650
@@ -1,363 +0,0 @@
1
- var __defProp = Object.defineProperty;
2
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
- var IterableElementBase = class {
4
- static {
5
- __name(this, "IterableElementBase");
6
- }
7
- constructor(options) {
8
- if (options) {
9
- const { toElementFn } = options;
10
- if (typeof toElementFn === "function") this._toElementFn = toElementFn;
11
- else if (toElementFn) throw new TypeError("toElementFn must be a function type");
12
- }
13
- }
14
- _toElementFn;
15
- get toElementFn() {
16
- return this._toElementFn;
17
- }
18
- *[Symbol.iterator](...args) {
19
- yield* this._getIterator(...args);
20
- }
21
- *values() {
22
- for (const item of this) yield item;
23
- }
24
- every(predicate, thisArg) {
25
- let index = 0;
26
- for (const item of this) {
27
- if (thisArg === void 0) {
28
- if (!predicate(item, index++, this)) return false;
29
- } else {
30
- const fn = predicate;
31
- if (!fn.call(thisArg, item, index++, this)) return false;
32
- }
33
- }
34
- return true;
35
- }
36
- some(predicate, thisArg) {
37
- let index = 0;
38
- for (const item of this) {
39
- if (thisArg === void 0) {
40
- if (predicate(item, index++, this)) return true;
41
- } else {
42
- const fn = predicate;
43
- if (fn.call(thisArg, item, index++, this)) return true;
44
- }
45
- }
46
- return false;
47
- }
48
- forEach(callbackfn, thisArg) {
49
- let index = 0;
50
- for (const item of this) {
51
- if (thisArg === void 0) {
52
- callbackfn(item, index++, this);
53
- } else {
54
- const fn = callbackfn;
55
- fn.call(thisArg, item, index++, this);
56
- }
57
- }
58
- }
59
- find(predicate, thisArg) {
60
- let index = 0;
61
- for (const item of this) {
62
- if (thisArg === void 0) {
63
- if (predicate(item, index++, this)) return item;
64
- } else {
65
- const fn = predicate;
66
- if (fn.call(thisArg, item, index++, this)) return item;
67
- }
68
- }
69
- return;
70
- }
71
- has(element) {
72
- for (const ele of this) if (ele === element) return true;
73
- return false;
74
- }
75
- reduce(callbackfn, initialValue) {
76
- let index = 0;
77
- const iter = this[Symbol.iterator]();
78
- let acc;
79
- if (arguments.length >= 2) {
80
- acc = initialValue;
81
- } else {
82
- const first = iter.next();
83
- if (first.done) throw new TypeError("Reduce of empty structure with no initial value");
84
- acc = first.value;
85
- index = 1;
86
- }
87
- for (const value of iter) {
88
- acc = callbackfn(acc, value, index++, this);
89
- }
90
- return acc;
91
- }
92
- toArray() {
93
- return [...this];
94
- }
95
- toVisual() {
96
- return [...this];
97
- }
98
- print() {
99
- console.log(this.toVisual());
100
- }
101
- };
102
- var Heap = class _Heap extends IterableElementBase {
103
- static {
104
- __name(this, "Heap");
105
- }
106
- _equals = Object.is;
107
- constructor(elements = [], options) {
108
- super(options);
109
- if (options) {
110
- const { comparator } = options;
111
- if (comparator) this._comparator = comparator;
112
- }
113
- this.addMany(elements);
114
- }
115
- _elements = [];
116
- get elements() {
117
- return this._elements;
118
- }
119
- get size() {
120
- return this.elements.length;
121
- }
122
- get leaf() {
123
- return this.elements[this.size - 1] ?? void 0;
124
- }
125
- static from(elements, options) {
126
- return new this(elements, options);
127
- }
128
- static heapify(elements, options) {
129
- return new _Heap(elements, options);
130
- }
131
- add(element) {
132
- this._elements.push(element);
133
- return this._bubbleUp(this.elements.length - 1);
134
- }
135
- addMany(elements) {
136
- const flags = [];
137
- for (const el of elements) {
138
- if (this.toElementFn) {
139
- const ok = this.add(this.toElementFn(el));
140
- flags.push(ok);
141
- } else {
142
- const ok = this.add(el);
143
- flags.push(ok);
144
- }
145
- }
146
- return flags;
147
- }
148
- poll() {
149
- if (this.elements.length === 0) return;
150
- const value = this.elements[0];
151
- const last = this.elements.pop();
152
- if (this.elements.length) {
153
- this.elements[0] = last;
154
- this._sinkDown(0, this.elements.length >> 1);
155
- }
156
- return value;
157
- }
158
- peek() {
159
- return this.elements[0];
160
- }
161
- isEmpty() {
162
- return this.size === 0;
163
- }
164
- clear() {
165
- this._elements = [];
166
- }
167
- refill(elements) {
168
- this._elements = Array.from(elements);
169
- return this.fix();
170
- }
171
- has(element) {
172
- for (const el of this.elements) if (this._equals(el, element)) return true;
173
- return false;
174
- }
175
- delete(element) {
176
- let index = -1;
177
- for (let i = 0; i < this.elements.length; i++) {
178
- if (this._equals(this.elements[i], element)) {
179
- index = i;
180
- break;
181
- }
182
- }
183
- if (index < 0) return false;
184
- if (index === 0) {
185
- this.poll();
186
- } else if (index === this.elements.length - 1) {
187
- this.elements.pop();
188
- } else {
189
- this.elements.splice(index, 1, this.elements.pop());
190
- this._bubbleUp(index);
191
- this._sinkDown(index, this.elements.length >> 1);
192
- }
193
- return true;
194
- }
195
- deleteBy(predicate) {
196
- let idx = -1;
197
- for (let i = 0; i < this.elements.length; i++) {
198
- if (predicate(this.elements[i], i, this)) {
199
- idx = i;
200
- break;
201
- }
202
- }
203
- if (idx < 0) return false;
204
- if (idx === 0) {
205
- this.poll();
206
- } else if (idx === this.elements.length - 1) {
207
- this.elements.pop();
208
- } else {
209
- this.elements.splice(idx, 1, this.elements.pop());
210
- this._bubbleUp(idx);
211
- this._sinkDown(idx, this.elements.length >> 1);
212
- }
213
- return true;
214
- }
215
- setEquality(equals) {
216
- this._equals = equals;
217
- return this;
218
- }
219
- dfs(order = "PRE") {
220
- const result = [];
221
- const _dfs = __name((index) => {
222
- const left = 2 * index + 1, right = left + 1;
223
- if (index < this.size) {
224
- if (order === "IN") {
225
- _dfs(left);
226
- result.push(this.elements[index]);
227
- _dfs(right);
228
- } else if (order === "PRE") {
229
- result.push(this.elements[index]);
230
- _dfs(left);
231
- _dfs(right);
232
- } else if (order === "POST") {
233
- _dfs(left);
234
- _dfs(right);
235
- result.push(this.elements[index]);
236
- }
237
- }
238
- }, "_dfs");
239
- _dfs(0);
240
- return result;
241
- }
242
- fix() {
243
- const results = [];
244
- for (let i = Math.floor(this.size / 2) - 1; i >= 0; i--) {
245
- results.push(this._sinkDown(i, this.elements.length >> 1));
246
- }
247
- return results;
248
- }
249
- sort() {
250
- const visited = [];
251
- const cloned = this._createInstance();
252
- for (const x of this.elements) cloned.add(x);
253
- while (!cloned.isEmpty()) {
254
- const top = cloned.poll();
255
- if (top !== void 0) visited.push(top);
256
- }
257
- return visited;
258
- }
259
- clone() {
260
- const next = this._createInstance();
261
- for (const x of this.elements) next.add(x);
262
- return next;
263
- }
264
- filter(callback, thisArg) {
265
- const out = this._createInstance();
266
- let i = 0;
267
- for (const x of this) {
268
- if (thisArg === void 0 ? callback(x, i++, this) : callback.call(thisArg, x, i++, this)) {
269
- out.add(x);
270
- } else {
271
- i++;
272
- }
273
- }
274
- return out;
275
- }
276
- map(callback, options, thisArg) {
277
- const { comparator, toElementFn, ...rest } = options ?? {};
278
- if (!comparator) throw new TypeError("Heap.map requires options.comparator for EM");
279
- const out = this._createLike([], { ...rest, comparator, toElementFn });
280
- let i = 0;
281
- for (const x of this) {
282
- const v = thisArg === void 0 ? callback(x, i++, this) : callback.call(thisArg, x, i++, this);
283
- out.add(v);
284
- }
285
- return out;
286
- }
287
- mapSame(callback, thisArg) {
288
- const out = this._createInstance();
289
- let i = 0;
290
- for (const x of this) {
291
- const v = thisArg === void 0 ? callback(x, i++, this) : callback.call(thisArg, x, i++, this);
292
- out.add(v);
293
- }
294
- return out;
295
- }
296
- _DEFAULT_COMPARATOR = __name((a, b) => {
297
- if (typeof a === "object" || typeof b === "object") {
298
- throw TypeError("When comparing object types, define a custom comparator in options.");
299
- }
300
- if (a > b) return 1;
301
- if (a < b) return -1;
302
- return 0;
303
- }, "_DEFAULT_COMPARATOR");
304
- _comparator = this._DEFAULT_COMPARATOR;
305
- get comparator() {
306
- return this._comparator;
307
- }
308
- *_getIterator() {
309
- for (const element of this.elements) yield element;
310
- }
311
- _bubbleUp(index) {
312
- const element = this.elements[index];
313
- while (index > 0) {
314
- const parent = index - 1 >> 1;
315
- const parentItem = this.elements[parent];
316
- if (this.comparator(parentItem, element) <= 0) break;
317
- this.elements[index] = parentItem;
318
- index = parent;
319
- }
320
- this.elements[index] = element;
321
- return true;
322
- }
323
- _sinkDown(index, halfLength) {
324
- const element = this.elements[index];
325
- while (index < halfLength) {
326
- let left = index << 1 | 1;
327
- const right = left + 1;
328
- let minItem = this.elements[left];
329
- if (right < this.elements.length && this.comparator(minItem, this.elements[right]) > 0) {
330
- left = right;
331
- minItem = this.elements[right];
332
- }
333
- if (this.comparator(minItem, element) >= 0) break;
334
- this.elements[index] = minItem;
335
- index = left;
336
- }
337
- this.elements[index] = element;
338
- return true;
339
- }
340
- _createInstance(options) {
341
- const Ctor = this.constructor;
342
- const next = new Ctor([], { comparator: this.comparator, toElementFn: this.toElementFn, ...options ?? {} });
343
- return next;
344
- }
345
- _createLike(elements = [], options) {
346
- const Ctor = this.constructor;
347
- return new Ctor(elements, options);
348
- }
349
- _spawnLike(options) {
350
- return this._createLike([], options);
351
- }
352
- };
353
- var MinHeap = class extends Heap {
354
- static {
355
- __name(this, "MinHeap");
356
- }
357
- constructor(elements = [], options) {
358
- super(elements, options);
359
- }
360
- };
361
- export {
362
- MinHeap
363
- };
@@ -1,371 +0,0 @@
1
- var __defProp = Object.defineProperty;
2
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
- var IterableElementBase = class {
4
- static {
5
- __name(this, "IterableElementBase");
6
- }
7
- constructor(options) {
8
- if (options) {
9
- const { toElementFn } = options;
10
- if (typeof toElementFn === "function") this._toElementFn = toElementFn;
11
- else if (toElementFn) throw new TypeError("toElementFn must be a function type");
12
- }
13
- }
14
- _toElementFn;
15
- get toElementFn() {
16
- return this._toElementFn;
17
- }
18
- *[Symbol.iterator](...args) {
19
- yield* this._getIterator(...args);
20
- }
21
- *values() {
22
- for (const item of this) yield item;
23
- }
24
- every(predicate, thisArg) {
25
- let index = 0;
26
- for (const item of this) {
27
- if (thisArg === void 0) {
28
- if (!predicate(item, index++, this)) return false;
29
- } else {
30
- const fn = predicate;
31
- if (!fn.call(thisArg, item, index++, this)) return false;
32
- }
33
- }
34
- return true;
35
- }
36
- some(predicate, thisArg) {
37
- let index = 0;
38
- for (const item of this) {
39
- if (thisArg === void 0) {
40
- if (predicate(item, index++, this)) return true;
41
- } else {
42
- const fn = predicate;
43
- if (fn.call(thisArg, item, index++, this)) return true;
44
- }
45
- }
46
- return false;
47
- }
48
- forEach(callbackfn, thisArg) {
49
- let index = 0;
50
- for (const item of this) {
51
- if (thisArg === void 0) {
52
- callbackfn(item, index++, this);
53
- } else {
54
- const fn = callbackfn;
55
- fn.call(thisArg, item, index++, this);
56
- }
57
- }
58
- }
59
- find(predicate, thisArg) {
60
- let index = 0;
61
- for (const item of this) {
62
- if (thisArg === void 0) {
63
- if (predicate(item, index++, this)) return item;
64
- } else {
65
- const fn = predicate;
66
- if (fn.call(thisArg, item, index++, this)) return item;
67
- }
68
- }
69
- return;
70
- }
71
- has(element) {
72
- for (const ele of this) if (ele === element) return true;
73
- return false;
74
- }
75
- reduce(callbackfn, initialValue) {
76
- let index = 0;
77
- const iter = this[Symbol.iterator]();
78
- let acc;
79
- if (arguments.length >= 2) {
80
- acc = initialValue;
81
- } else {
82
- const first = iter.next();
83
- if (first.done) throw new TypeError("Reduce of empty structure with no initial value");
84
- acc = first.value;
85
- index = 1;
86
- }
87
- for (const value of iter) {
88
- acc = callbackfn(acc, value, index++, this);
89
- }
90
- return acc;
91
- }
92
- toArray() {
93
- return [...this];
94
- }
95
- toVisual() {
96
- return [...this];
97
- }
98
- print() {
99
- console.log(this.toVisual());
100
- }
101
- };
102
- var Heap = class _Heap extends IterableElementBase {
103
- static {
104
- __name(this, "Heap");
105
- }
106
- _equals = Object.is;
107
- constructor(elements = [], options) {
108
- super(options);
109
- if (options) {
110
- const { comparator } = options;
111
- if (comparator) this._comparator = comparator;
112
- }
113
- this.addMany(elements);
114
- }
115
- _elements = [];
116
- get elements() {
117
- return this._elements;
118
- }
119
- get size() {
120
- return this.elements.length;
121
- }
122
- get leaf() {
123
- return this.elements[this.size - 1] ?? void 0;
124
- }
125
- static from(elements, options) {
126
- return new this(elements, options);
127
- }
128
- static heapify(elements, options) {
129
- return new _Heap(elements, options);
130
- }
131
- add(element) {
132
- this._elements.push(element);
133
- return this._bubbleUp(this.elements.length - 1);
134
- }
135
- addMany(elements) {
136
- const flags = [];
137
- for (const el of elements) {
138
- if (this.toElementFn) {
139
- const ok = this.add(this.toElementFn(el));
140
- flags.push(ok);
141
- } else {
142
- const ok = this.add(el);
143
- flags.push(ok);
144
- }
145
- }
146
- return flags;
147
- }
148
- poll() {
149
- if (this.elements.length === 0) return;
150
- const value = this.elements[0];
151
- const last = this.elements.pop();
152
- if (this.elements.length) {
153
- this.elements[0] = last;
154
- this._sinkDown(0, this.elements.length >> 1);
155
- }
156
- return value;
157
- }
158
- peek() {
159
- return this.elements[0];
160
- }
161
- isEmpty() {
162
- return this.size === 0;
163
- }
164
- clear() {
165
- this._elements = [];
166
- }
167
- refill(elements) {
168
- this._elements = Array.from(elements);
169
- return this.fix();
170
- }
171
- has(element) {
172
- for (const el of this.elements) if (this._equals(el, element)) return true;
173
- return false;
174
- }
175
- delete(element) {
176
- let index = -1;
177
- for (let i = 0; i < this.elements.length; i++) {
178
- if (this._equals(this.elements[i], element)) {
179
- index = i;
180
- break;
181
- }
182
- }
183
- if (index < 0) return false;
184
- if (index === 0) {
185
- this.poll();
186
- } else if (index === this.elements.length - 1) {
187
- this.elements.pop();
188
- } else {
189
- this.elements.splice(index, 1, this.elements.pop());
190
- this._bubbleUp(index);
191
- this._sinkDown(index, this.elements.length >> 1);
192
- }
193
- return true;
194
- }
195
- deleteBy(predicate) {
196
- let idx = -1;
197
- for (let i = 0; i < this.elements.length; i++) {
198
- if (predicate(this.elements[i], i, this)) {
199
- idx = i;
200
- break;
201
- }
202
- }
203
- if (idx < 0) return false;
204
- if (idx === 0) {
205
- this.poll();
206
- } else if (idx === this.elements.length - 1) {
207
- this.elements.pop();
208
- } else {
209
- this.elements.splice(idx, 1, this.elements.pop());
210
- this._bubbleUp(idx);
211
- this._sinkDown(idx, this.elements.length >> 1);
212
- }
213
- return true;
214
- }
215
- setEquality(equals) {
216
- this._equals = equals;
217
- return this;
218
- }
219
- dfs(order = "PRE") {
220
- const result = [];
221
- const _dfs = __name((index) => {
222
- const left = 2 * index + 1, right = left + 1;
223
- if (index < this.size) {
224
- if (order === "IN") {
225
- _dfs(left);
226
- result.push(this.elements[index]);
227
- _dfs(right);
228
- } else if (order === "PRE") {
229
- result.push(this.elements[index]);
230
- _dfs(left);
231
- _dfs(right);
232
- } else if (order === "POST") {
233
- _dfs(left);
234
- _dfs(right);
235
- result.push(this.elements[index]);
236
- }
237
- }
238
- }, "_dfs");
239
- _dfs(0);
240
- return result;
241
- }
242
- fix() {
243
- const results = [];
244
- for (let i = Math.floor(this.size / 2) - 1; i >= 0; i--) {
245
- results.push(this._sinkDown(i, this.elements.length >> 1));
246
- }
247
- return results;
248
- }
249
- sort() {
250
- const visited = [];
251
- const cloned = this._createInstance();
252
- for (const x of this.elements) cloned.add(x);
253
- while (!cloned.isEmpty()) {
254
- const top = cloned.poll();
255
- if (top !== void 0) visited.push(top);
256
- }
257
- return visited;
258
- }
259
- clone() {
260
- const next = this._createInstance();
261
- for (const x of this.elements) next.add(x);
262
- return next;
263
- }
264
- filter(callback, thisArg) {
265
- const out = this._createInstance();
266
- let i = 0;
267
- for (const x of this) {
268
- if (thisArg === void 0 ? callback(x, i++, this) : callback.call(thisArg, x, i++, this)) {
269
- out.add(x);
270
- } else {
271
- i++;
272
- }
273
- }
274
- return out;
275
- }
276
- map(callback, options, thisArg) {
277
- const { comparator, toElementFn, ...rest } = options ?? {};
278
- if (!comparator) throw new TypeError("Heap.map requires options.comparator for EM");
279
- const out = this._createLike([], { ...rest, comparator, toElementFn });
280
- let i = 0;
281
- for (const x of this) {
282
- const v = thisArg === void 0 ? callback(x, i++, this) : callback.call(thisArg, x, i++, this);
283
- out.add(v);
284
- }
285
- return out;
286
- }
287
- mapSame(callback, thisArg) {
288
- const out = this._createInstance();
289
- let i = 0;
290
- for (const x of this) {
291
- const v = thisArg === void 0 ? callback(x, i++, this) : callback.call(thisArg, x, i++, this);
292
- out.add(v);
293
- }
294
- return out;
295
- }
296
- _DEFAULT_COMPARATOR = __name((a, b) => {
297
- if (typeof a === "object" || typeof b === "object") {
298
- throw TypeError("When comparing object types, define a custom comparator in options.");
299
- }
300
- if (a > b) return 1;
301
- if (a < b) return -1;
302
- return 0;
303
- }, "_DEFAULT_COMPARATOR");
304
- _comparator = this._DEFAULT_COMPARATOR;
305
- get comparator() {
306
- return this._comparator;
307
- }
308
- *_getIterator() {
309
- for (const element of this.elements) yield element;
310
- }
311
- _bubbleUp(index) {
312
- const element = this.elements[index];
313
- while (index > 0) {
314
- const parent = index - 1 >> 1;
315
- const parentItem = this.elements[parent];
316
- if (this.comparator(parentItem, element) <= 0) break;
317
- this.elements[index] = parentItem;
318
- index = parent;
319
- }
320
- this.elements[index] = element;
321
- return true;
322
- }
323
- _sinkDown(index, halfLength) {
324
- const element = this.elements[index];
325
- while (index < halfLength) {
326
- let left = index << 1 | 1;
327
- const right = left + 1;
328
- let minItem = this.elements[left];
329
- if (right < this.elements.length && this.comparator(minItem, this.elements[right]) > 0) {
330
- left = right;
331
- minItem = this.elements[right];
332
- }
333
- if (this.comparator(minItem, element) >= 0) break;
334
- this.elements[index] = minItem;
335
- index = left;
336
- }
337
- this.elements[index] = element;
338
- return true;
339
- }
340
- _createInstance(options) {
341
- const Ctor = this.constructor;
342
- const next = new Ctor([], { comparator: this.comparator, toElementFn: this.toElementFn, ...options ?? {} });
343
- return next;
344
- }
345
- _createLike(elements = [], options) {
346
- const Ctor = this.constructor;
347
- return new Ctor(elements, options);
348
- }
349
- _spawnLike(options) {
350
- return this._createLike([], options);
351
- }
352
- };
353
- var PriorityQueue = class extends Heap {
354
- static {
355
- __name(this, "PriorityQueue");
356
- }
357
- constructor(elements = [], options) {
358
- super(elements, options);
359
- }
360
- };
361
- var MinPriorityQueue = class extends PriorityQueue {
362
- static {
363
- __name(this, "MinPriorityQueue");
364
- }
365
- constructor(elements = [], options) {
366
- super(elements, options);
367
- }
368
- };
369
- export {
370
- MinPriorityQueue
371
- };