typescript-dsa-stl 2.0.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +41 -29
- package/dist/collections/Graph.d.ts +51 -0
- package/dist/collections/Graph.d.ts.map +1 -0
- package/dist/collections/Graph.js +38 -0
- package/dist/collections/Graph.js.map +1 -0
- package/dist/collections/index.d.ts +2 -0
- package/dist/collections/index.d.ts.map +1 -1
- package/dist/collections/index.js +1 -0
- package/dist/collections/index.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/types/index.d.ts +0 -50
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +0 -30
- package/dist/types/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -144,9 +144,9 @@ cube.push(layer0);
|
|
|
144
144
|
cube.at(0).at(1).at(0); // 3 (layer 0, row 1, col 0)
|
|
145
145
|
```
|
|
146
146
|
|
|
147
|
-
### Graph adjacency
|
|
147
|
+
### Graph adjacency list (like C++ `vector<vector<type>> graph(n)`)
|
|
148
148
|
|
|
149
|
-
You can model C++-style adjacency lists using the graph
|
|
149
|
+
You can model C++-style adjacency lists using the graph types and helpers exported from `typescript-dsa-stl/collections` (or the main package).
|
|
150
150
|
|
|
151
151
|
#### Unweighted adjacency list
|
|
152
152
|
|
|
@@ -154,24 +154,24 @@ C++:
|
|
|
154
154
|
|
|
155
155
|
```cpp
|
|
156
156
|
int n = 5;
|
|
157
|
-
vector<vector<int>>
|
|
158
|
-
|
|
157
|
+
vector<vector<int>> graph(n);
|
|
158
|
+
graph[u].push_back(v); // or graph[u].pb(v);
|
|
159
159
|
```
|
|
160
160
|
|
|
161
161
|
TypeScript (manual `push`):
|
|
162
162
|
|
|
163
163
|
```ts
|
|
164
|
-
import type { AdjacencyList } from 'typescript-dsa-stl/
|
|
164
|
+
import type { AdjacencyList } from 'typescript-dsa-stl/collections';
|
|
165
165
|
|
|
166
166
|
const n = 5;
|
|
167
167
|
// number of vertices = n, initially all neighbors empty
|
|
168
|
-
const
|
|
168
|
+
const graph: AdjacencyList<number> = Array.from({ length: n }, () => []);
|
|
169
169
|
|
|
170
|
-
// C++:
|
|
171
|
-
|
|
170
|
+
// C++: graph[u].push_back(v);
|
|
171
|
+
graph[u].push(v);
|
|
172
172
|
|
|
173
173
|
// Iteration is the same idea as in C++
|
|
174
|
-
for (const v of
|
|
174
|
+
for (const v of graph[u]) {
|
|
175
175
|
// neighbor v
|
|
176
176
|
}
|
|
177
177
|
```
|
|
@@ -179,14 +179,14 @@ for (const v of adj[u]) {
|
|
|
179
179
|
TypeScript (with helpers `addEdge` / `deleteEdge`):
|
|
180
180
|
|
|
181
181
|
```ts
|
|
182
|
-
import type { AdjacencyList } from 'typescript-dsa-stl/
|
|
183
|
-
import { addEdge, deleteEdge } from 'typescript-dsa-stl/
|
|
182
|
+
import type { AdjacencyList } from 'typescript-dsa-stl/collections';
|
|
183
|
+
import { addEdge, deleteEdge } from 'typescript-dsa-stl/collections';
|
|
184
184
|
|
|
185
185
|
const n = 5;
|
|
186
|
-
const
|
|
186
|
+
const graph: AdjacencyList<number> = Array.from({ length: n }, () => []);
|
|
187
187
|
|
|
188
|
-
addEdge(
|
|
189
|
-
deleteEdge(
|
|
188
|
+
addEdge(graph, u, v); // add u -> v
|
|
189
|
+
deleteEdge(graph, u, v); // remove all edges u -> v
|
|
190
190
|
```
|
|
191
191
|
|
|
192
192
|
#### Weighted adjacency list
|
|
@@ -195,8 +195,8 @@ In C++ you might write:
|
|
|
195
195
|
|
|
196
196
|
```cpp
|
|
197
197
|
int n = 5;
|
|
198
|
-
vector<vector<pair<int,int>>>
|
|
199
|
-
|
|
198
|
+
vector<vector<pair<int,int>>> graph(n);
|
|
199
|
+
graph[u].push_back({v, w}); // edge u -> v with weight w
|
|
200
200
|
```
|
|
201
201
|
|
|
202
202
|
In TypeScript, use `WeightedEdge` and `WeightedAdjacencyList`:
|
|
@@ -205,48 +205,60 @@ In TypeScript, use `WeightedEdge` and `WeightedAdjacencyList`:
|
|
|
205
205
|
import type {
|
|
206
206
|
WeightedEdge,
|
|
207
207
|
WeightedAdjacencyList,
|
|
208
|
-
} from 'typescript-dsa-stl/
|
|
208
|
+
} from 'typescript-dsa-stl/collections';
|
|
209
209
|
|
|
210
210
|
const n = 5;
|
|
211
|
-
const
|
|
211
|
+
const graph: WeightedAdjacencyList<number, number> =
|
|
212
212
|
Array.from({ length: n }, () => []);
|
|
213
213
|
|
|
214
|
-
// C++:
|
|
215
|
-
|
|
214
|
+
// C++: graph[u].push_back({v, w});
|
|
215
|
+
graph[u].push({ to: v, weight: w });
|
|
216
216
|
|
|
217
217
|
// When iterating, you get both neighbor and weight
|
|
218
|
-
for (const { to, weight } of
|
|
218
|
+
for (const { to, weight } of graph[u]) {
|
|
219
219
|
// edge u -> to with cost = weight
|
|
220
220
|
}
|
|
221
221
|
|
|
222
222
|
// If you prefer a different vertex or weight type, just change the generics:
|
|
223
|
-
// const
|
|
223
|
+
// const graph: WeightedAdjacencyList<string, bigint> = ...
|
|
224
224
|
```
|
|
225
225
|
|
|
226
226
|
Or with the helper functions `addEdge` / `deleteEdge`:
|
|
227
227
|
|
|
228
228
|
```ts
|
|
229
|
-
import type { WeightedAdjacencyList } from 'typescript-dsa-stl/
|
|
230
|
-
import { addEdge, deleteEdge } from 'typescript-dsa-stl/
|
|
229
|
+
import type { WeightedAdjacencyList } from 'typescript-dsa-stl/collections';
|
|
230
|
+
import { addEdge, deleteEdge } from 'typescript-dsa-stl/collections';
|
|
231
231
|
|
|
232
232
|
const n = 5;
|
|
233
|
-
const
|
|
233
|
+
const graph: WeightedAdjacencyList<number, number> =
|
|
234
234
|
Array.from({ length: n }, () => []);
|
|
235
235
|
|
|
236
|
-
addEdge(
|
|
237
|
-
deleteEdge(
|
|
236
|
+
addEdge(graph, u, v, w); // add u -> v with weight w
|
|
237
|
+
deleteEdge(graph, u, v, w); // delete all edges u -> v with weight w
|
|
238
238
|
```
|
|
239
239
|
|
|
240
|
+
#### Graph adjacency list — use cases
|
|
241
|
+
|
|
242
|
+
Use an **unweighted** graph (adjacency list) when you only care about connectivity; use a **weighted** graph when edges have costs (distance, time, capacity).
|
|
243
|
+
|
|
244
|
+
| Use case | When to use |
|
|
245
|
+
|----------|-------------|
|
|
246
|
+
| **BFS / DFS, connectivity** | Unweighted: shortest path in terms of hop count, connected components, cycle detection. |
|
|
247
|
+
| **Shortest path (Dijkstra), MST** | Weighted: edge weights as distances or costs; run Dijkstra, Prim, or Kruskal on the list. |
|
|
248
|
+
| **Social / dependency graphs** | Unweighted or weighted: followers, dependencies (e.g. build order), recommendation graphs. |
|
|
249
|
+
| **Grid / game graphs** | Unweighted: 4- or 8-neighbor grids; weighted if movement costs differ per cell. |
|
|
250
|
+
| **Network / flow** | Weighted: capacities or latencies on edges for max-flow or routing. |
|
|
251
|
+
|
|
240
252
|
---
|
|
241
253
|
|
|
242
254
|
## API overview
|
|
243
255
|
|
|
244
256
|
| Module | Exports |
|
|
245
257
|
|--------|--------|
|
|
246
|
-
| **Collections** | `Vector`, `Stack`, `Queue`, `List`, `ListNode`, `PriorityQueue`, `OrderedMap`, `UnorderedMap`, `OrderedSet`, `UnorderedSet`, `OrderedMultiMap`, `OrderedMultiSet` |
|
|
258
|
+
| **Collections** | `Vector`, `Stack`, `Queue`, `List`, `ListNode`, `PriorityQueue`, `OrderedMap`, `UnorderedMap`, `OrderedSet`, `UnorderedSet`, `OrderedMultiMap`, `OrderedMultiSet`, `WeightedEdge`, `AdjacencyList`, `WeightedAdjacencyList`, `addEdge`, `deleteEdge` |
|
|
247
259
|
| **Algorithms** | `sort`, `find`, `findIndex`, `transform`, `filter`, `reduce`, `reverse`, `unique`, `binarySearch`, `lowerBound`, `upperBound`, `min`, `max`, `partition` |
|
|
248
260
|
| **Utils** | `clamp`, `range`, `noop`, `identity`, `swap` |
|
|
249
|
-
| **Types** | `Comparator`, `Predicate`, `UnaryFn`, `Reducer`, `IterableLike`, `toArray
|
|
261
|
+
| **Types** | `Comparator`, `Predicate`, `UnaryFn`, `Reducer`, `IterableLike`, `toArray` |
|
|
250
262
|
|
|
251
263
|
### Subpath imports (tree-shaking)
|
|
252
264
|
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Graph adjacency list helpers (C++-style).
|
|
3
|
+
*
|
|
4
|
+
* These are designed so you can mirror common C++ patterns like:
|
|
5
|
+
* vector<vector<int>> adj(n);
|
|
6
|
+
* vector<vector<pair<int,int>>> adj(n);
|
|
7
|
+
*/
|
|
8
|
+
/** Single weighted edge: `to` vertex with a `weight`. */
|
|
9
|
+
export interface WeightedEdge<Vertex = number, Weight = number> {
|
|
10
|
+
to: Vertex;
|
|
11
|
+
weight: Weight;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Unweighted adjacency list.
|
|
15
|
+
*
|
|
16
|
+
* C++: `vector<vector<int>> adj(n);`
|
|
17
|
+
* TS: `AdjacencyList<number>` (backed by `number[][]`).
|
|
18
|
+
*/
|
|
19
|
+
export type AdjacencyList<Vertex = number> = Vertex[][];
|
|
20
|
+
/**
|
|
21
|
+
* Weighted adjacency list.
|
|
22
|
+
*
|
|
23
|
+
* C++: `vector<vector<pair<int,int>>> adj(n);`
|
|
24
|
+
* TS: `WeightedAdjacencyList<number, number>`
|
|
25
|
+
* (backed by `WeightedEdge<number, number>[][]`).
|
|
26
|
+
*
|
|
27
|
+
* Typical use:
|
|
28
|
+
* const adj: WeightedAdjacencyList<number, number> =
|
|
29
|
+
* Array.from({ length: n }, () => []);
|
|
30
|
+
* adj[u].push({ to: v, weight: w });
|
|
31
|
+
*/
|
|
32
|
+
export type WeightedAdjacencyList<Vertex = number, Weight = number> = WeightedEdge<Vertex, Weight>[][];
|
|
33
|
+
/**
|
|
34
|
+
* Add an edge to a graph adjacency list.
|
|
35
|
+
*
|
|
36
|
+
* Overloads:
|
|
37
|
+
* - Unweighted: addEdge(adj, u, v)
|
|
38
|
+
* - Weighted: addEdge(adj, u, v, w)
|
|
39
|
+
*/
|
|
40
|
+
export declare function addEdge(adj: AdjacencyList<number>, u: number, v: number): void;
|
|
41
|
+
export declare function addEdge(adj: WeightedAdjacencyList<number, number>, u: number, v: number, w: number): void;
|
|
42
|
+
/**
|
|
43
|
+
* Delete all edges u -> v from a graph adjacency list.
|
|
44
|
+
*
|
|
45
|
+
* Overloads:
|
|
46
|
+
* - Unweighted: deleteEdge(adj, u, v)
|
|
47
|
+
* - Weighted: deleteEdge(adj, u, v, w)
|
|
48
|
+
*/
|
|
49
|
+
export declare function deleteEdge(adj: AdjacencyList<number>, u: number, v: number): void;
|
|
50
|
+
export declare function deleteEdge(adj: WeightedAdjacencyList<number, number>, u: number, v: number, w: number): void;
|
|
51
|
+
//# sourceMappingURL=Graph.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Graph.d.ts","sourceRoot":"","sources":["../../src/collections/Graph.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,yDAAyD;AACzD,MAAM,WAAW,YAAY,CAAC,MAAM,GAAG,MAAM,EAAE,MAAM,GAAG,MAAM;IAC5D,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;GAKG;AACH,MAAM,MAAM,aAAa,CAAC,MAAM,GAAG,MAAM,IAAI,MAAM,EAAE,EAAE,CAAC;AAExD;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,qBAAqB,CAC/B,MAAM,GAAG,MAAM,EACf,MAAM,GAAG,MAAM,IACb,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC;AAErC;;;;;;GAMG;AACH,wBAAgB,OAAO,CACrB,GAAG,EAAE,aAAa,CAAC,MAAM,CAAC,EAC1B,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,GACR,IAAI,CAAC;AACR,wBAAgB,OAAO,CACrB,GAAG,EAAE,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,EAC1C,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,GACR,IAAI,CAAC;AAgBR;;;;;;GAMG;AACH,wBAAgB,UAAU,CACxB,GAAG,EAAE,aAAa,CAAC,MAAM,CAAC,EAC1B,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,GACR,IAAI,CAAC;AACR,wBAAgB,UAAU,CACxB,GAAG,EAAE,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,EAC1C,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,GACR,IAAI,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Graph adjacency list helpers (C++-style).
|
|
3
|
+
*
|
|
4
|
+
* These are designed so you can mirror common C++ patterns like:
|
|
5
|
+
* vector<vector<int>> adj(n);
|
|
6
|
+
* vector<vector<pair<int,int>>> adj(n);
|
|
7
|
+
*/
|
|
8
|
+
export function addEdge(adj, u, v, w) {
|
|
9
|
+
if (w === undefined) {
|
|
10
|
+
adj[u].push(v);
|
|
11
|
+
}
|
|
12
|
+
else {
|
|
13
|
+
adj[u].push({ to: v, weight: w });
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export function deleteEdge(adj, u, v, w) {
|
|
17
|
+
const row = adj[u];
|
|
18
|
+
if (!row)
|
|
19
|
+
return;
|
|
20
|
+
if (w === undefined) {
|
|
21
|
+
// Unweighted: remove all neighbors equal to v.
|
|
22
|
+
for (let i = row.length - 1; i >= 0; i--) {
|
|
23
|
+
if (row[i] === v) {
|
|
24
|
+
row.splice(i, 1);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
// Weighted: remove all edges with { to: v, weight: w }.
|
|
30
|
+
for (let i = row.length - 1; i >= 0; i--) {
|
|
31
|
+
const edge = row[i];
|
|
32
|
+
if (edge.to === v && edge.weight === w) {
|
|
33
|
+
row.splice(i, 1);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=Graph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Graph.js","sourceRoot":"","sources":["../../src/collections/Graph.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAmDH,MAAM,UAAU,OAAO,CACrB,GAEyC,EACzC,CAAS,EACT,CAAS,EACT,CAAU;IAEV,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;QACnB,GAA6B,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC;SAAM,CAAC;QACL,GAA6C,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;IAC/E,CAAC;AACH,CAAC;AAoBD,MAAM,UAAU,UAAU,CACxB,GAEyC,EACzC,CAAS,EACT,CAAS,EACT,CAAU;IAEV,MAAM,GAAG,GAAI,GAAqE,CAAC,CAAC,CAAC,CAAC;IAEtF,IAAI,CAAC,GAAG;QAAE,OAAO;IAEjB,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;QACpB,+CAA+C;QAC/C,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;gBACjB,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACnB,CAAC;QACH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,wDAAwD;QACxD,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAiC,CAAC;YACpD,IAAI,IAAI,CAAC,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACnB,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -10,4 +10,6 @@ export { UnorderedSet } from './UnorderedSet.js';
|
|
|
10
10
|
export { OrderedMultiSet } from './OrderedMultiSet.js';
|
|
11
11
|
export { OrderedMultiMap } from './OrderedMultiMap.js';
|
|
12
12
|
export { RedBlackTree, RBNode } from './RedBlackTree.js';
|
|
13
|
+
export type { WeightedEdge, AdjacencyList, WeightedAdjacencyList } from './Graph.js';
|
|
14
|
+
export { addEdge, deleteEdge } from './Graph.js';
|
|
13
15
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/collections/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/collections/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AACzD,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACrF,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -10,4 +10,5 @@ export { UnorderedSet } from './UnorderedSet.js';
|
|
|
10
10
|
export { OrderedMultiSet } from './OrderedMultiSet.js';
|
|
11
11
|
export { OrderedMultiMap } from './OrderedMultiMap.js';
|
|
12
12
|
export { RedBlackTree, RBNode } from './RedBlackTree.js';
|
|
13
|
+
export { addEdge, deleteEdge } from './Graph.js';
|
|
13
14
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/collections/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/collections/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEzD,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -5,7 +5,8 @@
|
|
|
5
5
|
* @example
|
|
6
6
|
* import { Vector, Stack, Queue, List, sort, binarySearch, clamp } from 'typescript-dsa-stl';
|
|
7
7
|
*/
|
|
8
|
-
export { Vector, Stack, Queue, List, ListNode, PriorityQueue, OrderedMap, UnorderedMap, OrderedSet, UnorderedSet, OrderedMultiSet, OrderedMultiMap, } from './collections/index.js';
|
|
8
|
+
export { Vector, Stack, Queue, List, ListNode, PriorityQueue, OrderedMap, UnorderedMap, OrderedSet, UnorderedSet, OrderedMultiSet, OrderedMultiMap, addEdge, deleteEdge, } from './collections/index.js';
|
|
9
|
+
export type { WeightedEdge, AdjacencyList, WeightedAdjacencyList } from './collections/index.js';
|
|
9
10
|
export { sort, find, findIndex, transform, filter, reduce, reverse, unique, binarySearch, lowerBound, upperBound, min, max, partition, } from './algorithms/index.js';
|
|
10
11
|
export { clamp, range, noop, identity, swap } from './utils/index.js';
|
|
11
12
|
export type { Comparator, Predicate, UnaryFn, Reducer, IterableLike } from './types/index.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,MAAM,EACN,KAAK,EACL,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,aAAa,EACb,UAAU,EACV,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,eAAe,EACf,eAAe,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,MAAM,EACN,KAAK,EACL,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,aAAa,EACb,UAAU,EACV,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,eAAe,EACf,eAAe,EACf,OAAO,EACP,UAAU,GACX,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACjG,OAAO,EACL,IAAI,EACJ,IAAI,EACJ,SAAS,EACT,SAAS,EACT,MAAM,EACN,MAAM,EACN,OAAO,EACP,MAAM,EACN,YAAY,EACZ,UAAU,EACV,UAAU,EACV,GAAG,EACH,GAAG,EACH,SAAS,GACV,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACtE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC9F,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* @example
|
|
6
6
|
* import { Vector, Stack, Queue, List, sort, binarySearch, clamp } from 'typescript-dsa-stl';
|
|
7
7
|
*/
|
|
8
|
-
export { Vector, Stack, Queue, List, ListNode, PriorityQueue, OrderedMap, UnorderedMap, OrderedSet, UnorderedSet, OrderedMultiSet, OrderedMultiMap, } from './collections/index.js';
|
|
8
|
+
export { Vector, Stack, Queue, List, ListNode, PriorityQueue, OrderedMap, UnorderedMap, OrderedSet, UnorderedSet, OrderedMultiSet, OrderedMultiMap, addEdge, deleteEdge, } from './collections/index.js';
|
|
9
9
|
export { sort, find, findIndex, transform, filter, reduce, reverse, unique, binarySearch, lowerBound, upperBound, min, max, partition, } from './algorithms/index.js';
|
|
10
10
|
export { clamp, range, noop, identity, swap } from './utils/index.js';
|
|
11
11
|
export { toArray } from './types/index.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,MAAM,EACN,KAAK,EACL,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,aAAa,EACb,UAAU,EACV,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,eAAe,EACf,eAAe,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,MAAM,EACN,KAAK,EACL,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,aAAa,EACb,UAAU,EACV,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,eAAe,EACf,eAAe,EACf,OAAO,EACP,UAAU,GACX,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,IAAI,EACJ,IAAI,EACJ,SAAS,EACT,SAAS,EACT,MAAM,EACN,MAAM,EACN,OAAO,EACP,MAAM,EACN,YAAY,EACZ,UAAU,EACV,UAAU,EACV,GAAG,EACH,GAAG,EACH,SAAS,GACV,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAEtE,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -13,54 +13,4 @@ export type Reducer<T, U> = (acc: U, x: T) => U;
|
|
|
13
13
|
export type IterableLike<T> = Iterable<T> | ArrayLike<T>;
|
|
14
14
|
/** Convert IterableLike to array (single copy). Used internally by algorithms. */
|
|
15
15
|
export declare function toArray<T>(source: IterableLike<T>): T[];
|
|
16
|
-
/**
|
|
17
|
-
* Graph adjacency list helpers (C++-style).
|
|
18
|
-
*
|
|
19
|
-
* These are designed so you can mirror common C++ patterns like:
|
|
20
|
-
* vector<vector<int>> adj(n);
|
|
21
|
-
* vector<vector<pair<int,int>>> adj(n);
|
|
22
|
-
*/
|
|
23
|
-
/** Single weighted edge: `to` vertex with a `weight`. */
|
|
24
|
-
export interface WeightedEdge<Vertex = number, Weight = number> {
|
|
25
|
-
to: Vertex;
|
|
26
|
-
weight: Weight;
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Unweighted adjacency list.
|
|
30
|
-
*
|
|
31
|
-
* C++: `vector<vector<int>> adj(n);`
|
|
32
|
-
* TS: `AdjacencyList<number>` (backed by `number[][]`).
|
|
33
|
-
*/
|
|
34
|
-
export type AdjacencyList<Vertex = number> = Vertex[][];
|
|
35
|
-
/**
|
|
36
|
-
* Weighted adjacency list.
|
|
37
|
-
*
|
|
38
|
-
* C++: `vector<vector<pair<int,int>>> adj(n);`
|
|
39
|
-
* TS: `WeightedAdjacencyList<number, number>`
|
|
40
|
-
* (backed by `WeightedEdge<number, number>[][]`).
|
|
41
|
-
*
|
|
42
|
-
* Typical use:
|
|
43
|
-
* const adj: WeightedAdjacencyList<number, number> =
|
|
44
|
-
* Array.from({ length: n }, () => []);
|
|
45
|
-
* adj[u].push({ to: v, weight: w });
|
|
46
|
-
*/
|
|
47
|
-
export type WeightedAdjacencyList<Vertex = number, Weight = number> = WeightedEdge<Vertex, Weight>[][];
|
|
48
|
-
/**
|
|
49
|
-
* Add an edge to a graph adjacency list.
|
|
50
|
-
*
|
|
51
|
-
* Overloads:
|
|
52
|
-
* - Unweighted: addEdge(adj, u, v)
|
|
53
|
-
* - Weighted: addEdge(adj, u, v, w)
|
|
54
|
-
*/
|
|
55
|
-
export declare function addEdge(adj: AdjacencyList<number>, u: number, v: number): void;
|
|
56
|
-
export declare function addEdge(adj: WeightedAdjacencyList<number, number>, u: number, v: number, w: number): void;
|
|
57
|
-
/**
|
|
58
|
-
* Delete all edges u -> v from a graph adjacency list.
|
|
59
|
-
*
|
|
60
|
-
* Overloads:
|
|
61
|
-
* - Unweighted: deleteEdge(adj, u, v)
|
|
62
|
-
* - Weighted: deleteEdge(adj, u, v, w)
|
|
63
|
-
*/
|
|
64
|
-
export declare function deleteEdge(adj: AdjacencyList<number>, u: number, v: number): void;
|
|
65
|
-
export declare function deleteEdge(adj: WeightedAdjacencyList<number, number>, u: number, v: number, w: number): void;
|
|
66
16
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,iFAAiF;AACjF,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC;AAEnD,kDAAkD;AAClD,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC;AAE7C,6BAA6B;AAC7B,MAAM,MAAM,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAExC,uDAAuD;AACvD,MAAM,MAAM,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAEhD,2EAA2E;AAC3E,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AAEzD,kFAAkF;AAClF,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAMvD
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,iFAAiF;AACjF,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC;AAEnD,kDAAkD;AAClD,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC;AAE7C,6BAA6B;AAC7B,MAAM,MAAM,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAExC,uDAAuD;AACvD,MAAM,MAAM,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAEhD,2EAA2E;AAC3E,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AAEzD,kFAAkF;AAClF,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAMvD"}
|
package/dist/types/index.js
CHANGED
|
@@ -10,34 +10,4 @@ export function toArray(source) {
|
|
|
10
10
|
}
|
|
11
11
|
return Array.from(source);
|
|
12
12
|
}
|
|
13
|
-
export function addEdge(adj, u, v, w) {
|
|
14
|
-
if (w === undefined) {
|
|
15
|
-
adj[u].push(v);
|
|
16
|
-
}
|
|
17
|
-
else {
|
|
18
|
-
adj[u].push({ to: v, weight: w });
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
export function deleteEdge(adj, u, v, w) {
|
|
22
|
-
const row = adj[u];
|
|
23
|
-
if (!row)
|
|
24
|
-
return;
|
|
25
|
-
if (w === undefined) {
|
|
26
|
-
// Unweighted: remove all neighbors equal to v.
|
|
27
|
-
for (let i = row.length - 1; i >= 0; i--) {
|
|
28
|
-
if (row[i] === v) {
|
|
29
|
-
row.splice(i, 1);
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
else {
|
|
34
|
-
// Weighted: remove all edges with { to: v, weight: w }.
|
|
35
|
-
for (let i = row.length - 1; i >= 0; i--) {
|
|
36
|
-
const edge = row[i];
|
|
37
|
-
if (edge.to === v && edge.weight === w) {
|
|
38
|
-
row.splice(i, 1);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
13
|
//# sourceMappingURL=index.js.map
|
package/dist/types/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAiBH,kFAAkF;AAClF,MAAM,UAAU,OAAO,CAAI,MAAuB;IAChD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IACzC,IAAI,OAAQ,MAAsB,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,UAAU,EAAE,CAAC;QACnE,OAAO,CAAC,GAAI,MAAsB,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,MAAsB,CAAC,CAAC;AAC5C,CAAC
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAiBH,kFAAkF;AAClF,MAAM,UAAU,OAAO,CAAI,MAAuB;IAChD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IACzC,IAAI,OAAQ,MAAsB,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,UAAU,EAAE,CAAC;QACnE,OAAO,CAAC,GAAI,MAAsB,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,MAAsB,CAAC,CAAC;AAC5C,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "typescript-dsa-stl",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.1",
|
|
4
4
|
"description": "STL-style data structures and algorithms for TypeScript: Vector, Stack, Queue, List, PriorityQueue, Map, Set, sort, binarySearch. Use like C++ STL.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|