diff --git a/Geometry/ConvexHullGraham.js b/Geometry/ConvexHullGraham.js index 756121fb5..e74b226eb 100644 --- a/Geometry/ConvexHullGraham.js +++ b/Geometry/ConvexHullGraham.js @@ -2,7 +2,8 @@ * Author: Arnab Ray * ConvexHull using Graham Scan * Wikipedia: https://en.wikipedia.org/wiki/Graham_scan - * Given a set of points in the plane. The Convex hull of the set is the smallest convex polygon that contains all the points of it. + * Given a set of points in the plane. The Convex hull of the set is the smallest + * convex polygon that contains all the points of it. */ function compare (a, b) { @@ -27,7 +28,7 @@ function orientation (a, b, c) { function convexHull (points) { const pointsLen = points.length if (pointsLen <= 2) { - console.log('Minimum of 3 points is required to form closed polygon!') + throw new Error('Minimum of 3 points is required to form closed polygon!') } points.sort(compare) @@ -65,18 +66,22 @@ function convexHull (points) { for (let i = lowerPoints.length - 1; i >= 0; i--) { hull.push(lowerPoints[i]) } - console.log('The Convex Hull found is: \n') - console.log(hull) + + return hull } -const points = [ - { x: 0, y: 3 }, - { x: 1, y: 1 }, - { x: 2, y: 2 }, - { x: 4, y: 4 }, - { x: 0, y: 0 }, - { x: 1, y: 2 }, - { x: 3, y: 1 }, - { x: 3, y: 3 }] +export { convexHull } -convexHull(points) +// Example + +// const points = [ +// { x: 0, y: 3 }, +// { x: 1, y: 1 }, +// { x: 2, y: 2 }, +// { x: 4, y: 4 }, +// { x: 0, y: 0 }, +// { x: 1, y: 2 }, +// { x: 3, y: 1 }, +// { x: 3, y: 3 }] + +// convexHull(points) diff --git a/Graphs/ConnectedComponents.js b/Graphs/ConnectedComponents.js index 842a2eedc..1fb74068e 100644 --- a/Graphs/ConnectedComponents.js +++ b/Graphs/ConnectedComponents.js @@ -45,12 +45,12 @@ class GraphUnweightedUndirectedAdjacencyList { } } -function main () { - const graph = new GraphUnweightedUndirectedAdjacencyList() - graph.addEdge(1, 2) // Component 1 - graph.addEdge(3, 4) // Component 2 - graph.addEdge(3, 5) // Component 2 - console.log(graph.connectedComponents()) -} +export { GraphUnweightedUndirectedAdjacencyList } -main() +// Example + +// const graph = new GraphUnweightedUndirectedAdjacencyList() +// graph.addEdge(1, 2) // Component 1 +// graph.addEdge(3, 4) // Component 2 +// graph.addEdge(3, 5) // Component 2 +// const components = graph.connectedComponents() diff --git a/Graphs/Density.js b/Graphs/Density.js index 116fb8e40..04a73c0a8 100644 --- a/Graphs/Density.js +++ b/Graphs/Density.js @@ -8,4 +8,5 @@ function density (numberOfNodes, numberOfEdges, isDirected = false) { return (multi * numberOfEdges) / (numberOfNodes * (numberOfNodes - 1)) } -console.log(density(10, 2)) +export { density } + diff --git a/Graphs/DepthFirstSearchIterative.js b/Graphs/DepthFirstSearchIterative.js index 3eb9c1f83..cf2db373d 100644 --- a/Graphs/DepthFirstSearchIterative.js +++ b/Graphs/DepthFirstSearchIterative.js @@ -38,14 +38,14 @@ class GraphUnweightedUndirected { } } -function main () { - const graph = new GraphUnweightedUndirected() - graph.addEdge(1, 2) - graph.addEdge(2, 3) - graph.addEdge(2, 4) - graph.addEdge(3, 5) - console.log(graph.DFSIterative(5, 1)) - console.log(graph.DFSIterative(5, 100)) -} +export { GraphUnweightedUndirected } -main() +// Example + +// const graph = new GraphUnweightedUndirected() +// graph.addEdge(1, 2) +// graph.addEdge(2, 3) +// graph.addEdge(2, 4) +// graph.addEdge(3, 5) +// graph.DFSIterative(5, 1) +// graph.DFSIterative(5, 100) diff --git a/Graphs/DepthFirstSearchRecursive.js b/Graphs/DepthFirstSearchRecursive.js index 6522e9d15..473759035 100644 --- a/Graphs/DepthFirstSearchRecursive.js +++ b/Graphs/DepthFirstSearchRecursive.js @@ -33,14 +33,12 @@ class GraphUnweightedUndirected { } } -function main () { - const graph = new GraphUnweightedUndirected() - graph.addEdge(1, 2) - graph.addEdge(2, 3) - graph.addEdge(2, 4) - graph.addEdge(3, 5) - console.log(graph.DFSRecursive(5, 1)) - console.log(graph.DFSRecursive(5, 100)) -} +export { GraphUnweightedUndirected } -main() +// const graph = new GraphUnweightedUndirected() +// graph.addEdge(1, 2) +// graph.addEdge(2, 3) +// graph.addEdge(2, 4) +// graph.addEdge(3, 5) +// graph.DFSRecursive(5, 1) +// graph.DFSRecursive(5, 100) diff --git a/Graphs/Dijkstra.js b/Graphs/Dijkstra.js index 41bacd71d..5271c6f70 100644 --- a/Graphs/Dijkstra.js +++ b/Graphs/Dijkstra.js @@ -47,30 +47,30 @@ function djikstra (graph, V, src) { return dist } -const V = 9 -const E = [ - [0, 1, 4], - [0, 7, 8], - [1, 7, 11], - [1, 2, 8], - [7, 8, 7], - [6, 7, 1], - [2, 8, 2], - [6, 8, 6], - [5, 6, 2], - [2, 5, 4], - [2, 3, 7], - [3, 5, 14], - [3, 4, 9], - [4, 5, 10] -] +export { createGraph, djikstra } -const graph = createGraph(V, E) -const distances = djikstra(graph, V, 0) +// const V = 9 +// const E = [ +// [0, 1, 4], +// [0, 7, 8], +// [1, 7, 11], +// [1, 2, 8], +// [7, 8, 7], +// [6, 7, 1], +// [2, 8, 2], +// [6, 8, 6], +// [5, 6, 2], +// [2, 5, 4], +// [2, 3, 7], +// [3, 5, 14], +// [3, 4, 9], +// [4, 5, 10] +// ] + +// const graph = createGraph(V, E) +// const distances = djikstra(graph, V, 0) /** * The first value in the array determines the minimum distance and the * second value represents the parent node from which the minimum distance has been calculated */ - -console.log(distances) diff --git a/Graphs/DijkstraSmallestPath.js b/Graphs/DijkstraSmallestPath.js index 9e36836ff..81ee9767f 100644 --- a/Graphs/DijkstraSmallestPath.js +++ b/Graphs/DijkstraSmallestPath.js @@ -39,28 +39,31 @@ function solve (graph, s) { return solutions } -// create graph -const graph = {} -const layout = { - R: ['2'], - 2: ['3', '4'], - 3: ['4', '6', '13'], - 4: ['5', '8'], - 5: ['7', '11'], - 6: ['13', '15'], - 7: ['10'], - 8: ['11', '13'], - 9: ['14'], - 10: [], - 11: ['12'], - 12: [], - 13: ['14'], - 14: [], - 15: [] -} +export { solve } -// convert uni-directional to bi-directional graph +// // create graph +// const graph = {} + +// const layout = { +// R: ['2'], +// 2: ['3', '4'], +// 3: ['4', '6', '13'], +// 4: ['5', '8'], +// 5: ['7', '11'], +// 6: ['13', '15'], +// 7: ['10'], +// 8: ['11', '13'], +// 9: ['14'], +// 10: [], +// 11: ['12'], +// 12: [], +// 13: ['14'], +// 14: [], +// 15: [] +// } + +// // convert uni-directional to bi-directional graph // let graph = { // a: {e:1, b:1, g:3}, // b: {a:1, c:1}, @@ -72,26 +75,22 @@ const layout = { // h: {f:1} // }; -for (const id in layout) { - if (!graph[id]) { graph[id] = {} } - layout[id].forEach(function (aid) { - graph[id][aid] = 1 - if (!graph[aid]) { graph[aid] = {} } - graph[aid][id] = 1 - }) -} +// for (const id in layout) { +// if (!graph[id]) { graph[id] = {} } +// layout[id].forEach(function (aid) { +// graph[id][aid] = 1 +// if (!graph[aid]) { graph[aid] = {} } +// graph[aid][id] = 1 +// }) +// } -// choose start node -const start = '10' -// get all solutions -const solutions = solve(graph, start) +// // choose start node +// const start = '10' +// // get all solutions +// const solutions = solve(graph, start) -console.log("From '" + start + "' to") -// display solutions -for (const s in solutions) { - if (!solutions[s]) continue - console.log(' -> ' + s + ': [' + solutions[s].join(', ') + '] (dist:' + solutions[s].dist + ')') -} +// // for s in solutions.. +// ' -> ' + s + ': [' + solutions[s].join(', ') + '] (dist:' + solutions[s].dist + ')' // From '10' to // -> 2: [7, 5, 4, 2] (dist:4) diff --git a/Graphs/FloydWarshall.js b/Graphs/FloydWarshall.js index 67c41e135..648d5d8d4 100644 --- a/Graphs/FloydWarshall.js +++ b/Graphs/FloydWarshall.js @@ -23,26 +23,26 @@ const FloydWarshall = (dist) => { return dist } -const main = () => { - // For the following graph (edge weights are shown in brackets) - // 4 1 dist[1][2] = dist[2][1] = 1 - // \ (2)/ \ dist[1][3] = dist[3][1] = 2 - // \ / \(1) dist[1][4] = dist[4][1] = Infinity - // (1)\ / \ dist[3][4] = dist[4][3] = 1 - // 3 2 dist[2][4] = dist[4][2] = Infinity - // dist[2][3] = dist[3][2] = Infinity - // Output should be: - // [ [0, 1, 2, 3], - // [1, 0, 3, 4], - // [2, 3, 0, 1], - // [3, 4, 1, 0] ] - console.log(FloydWarshall( - [[0, 1, 2, Infinity], - [1, 0, Infinity, Infinity], - [2, Infinity, 0, 1], - [Infinity, Infinity, 1, 0] - ] - )) -} +export { FloydWarshall } + +// For the following graph (edge weights are shown in brackets) +// 4 1 dist[1][2] = dist[2][1] = 1 +// \ (2)/ \ dist[1][3] = dist[3][1] = 2 +// \ / \(1) dist[1][4] = dist[4][1] = Infinity +// (1)\ / \ dist[3][4] = dist[4][3] = 1 +// 3 2 dist[2][4] = dist[4][2] = Infinity +// dist[2][3] = dist[3][2] = Infinity +// Output should be: +// [ [0, 1, 2, 3], +// [1, 0, 3, 4], +// [2, 3, 0, 1], +// [3, 4, 1, 0] ] + +// FloydWarshall( +// [[0, 1, 2, Infinity], +// [1, 0, Infinity, Infinity], +// [2, Infinity, 0, 1], +// [Infinity, Infinity, 1, 0] +// ] +// ) -main() diff --git a/Graphs/KruskalMST.js b/Graphs/KruskalMST.js index 0a09c631b..7fe55d460 100644 --- a/Graphs/KruskalMST.js +++ b/Graphs/KruskalMST.js @@ -101,15 +101,12 @@ class GraphWeightedUndirectedAdjacencyList { } } -function main () { - const graph = new GraphWeightedUndirectedAdjacencyList() - graph.addEdge(1, 2, 1) - graph.addEdge(2, 3, 2) - graph.addEdge(3, 4, 1) - graph.addEdge(3, 5, 100) // Removed in MST - graph.addEdge(4, 5, 5) - console.log(graph) - console.log(graph.KruskalMST()) -} +export { GraphWeightedUndirectedAdjacencyList } -main() +// const graph = new GraphWeightedUndirectedAdjacencyList() +// graph.addEdge(1, 2, 1) +// graph.addEdge(2, 3, 2) +// graph.addEdge(3, 4, 1) +// graph.addEdge(3, 5, 100) // Removed in MST +// graph.addEdge(4, 5, 5) +// graph.KruskalMST() diff --git a/Graphs/NodeNeighbors.js b/Graphs/NodeNeighbors.js index c22b9905a..65f125b18 100644 --- a/Graphs/NodeNeighbors.js +++ b/Graphs/NodeNeighbors.js @@ -30,11 +30,11 @@ class Graph { } } -(() => { - const graph = new Graph() - graph.addEdge(1, 2) - graph.addEdge(2, 3) - graph.addEdge(3, 5) - graph.addEdge(1, 5) - console.log(graph.nodeNeighbors(1)) -})() +export { Graph } + +// const graph = new Graph() +// graph.addEdge(1, 2) +// graph.addEdge(2, 3) +// graph.addEdge(3, 5) +// graph.addEdge(1, 5) +// graph.nodeNeighbors(1) diff --git a/Graphs/NumberOfIslands.js b/Graphs/NumberOfIslands.js index 51a447dd0..84b666d37 100644 --- a/Graphs/NumberOfIslands.js +++ b/Graphs/NumberOfIslands.js @@ -46,12 +46,6 @@ Pseudocode: Return the count */ -const grid = [ - ['1', '1', '0', '0', '0'], - ['1', '1', '0', '0', '0'], - ['0', '0', '1', '0', '0'], - ['0', '0', '0', '1', '1'] -] const islands = (matrixGrid) => { const matrix = matrixGrid @@ -83,4 +77,12 @@ const islands = (matrixGrid) => { } return counter } -console.log(islands(grid)) + +export { islands } + +// islands( +// ['1', '1', '0', '0', '0'], +// ['1', '1', '0', '0', '0'], +// ['0', '0', '1', '0', '0'], +// ['0', '0', '0', '1', '1'] +// ) diff --git a/Graphs/PrimMST.js b/Graphs/PrimMST.js index be1e18c0d..17d68efb9 100644 --- a/Graphs/PrimMST.js +++ b/Graphs/PrimMST.js @@ -197,14 +197,12 @@ class GraphWeightedUndirectedAdjacencyList { } } -function main () { - const graph = new GraphWeightedUndirectedAdjacencyList() - graph.addEdge(1, 2, 1) - graph.addEdge(2, 3, 2) - graph.addEdge(3, 4, 1) - graph.addEdge(3, 5, 100) // Removed in MST - graph.addEdge(4, 5, 5) - console.log(graph.PrimMST(1)) -} +export { GraphWeightedUndirectedAdjacencyList } -main() +// const graph = new GraphWeightedUndirectedAdjacencyList() +// graph.addEdge(1, 2, 1) +// graph.addEdge(2, 3, 2) +// graph.addEdge(3, 4, 1) +// graph.addEdge(3, 5, 100) // Removed in MST +// graph.addEdge(4, 5, 5) +// graph.PrimMST(1) diff --git a/Maths/IsDivisible.js b/Maths/IsDivisible.js index 9c2ec81cf..2d9083c56 100644 --- a/Maths/IsDivisible.js +++ b/Maths/IsDivisible.js @@ -10,6 +10,6 @@ export const isDivisible = (num1, num2) => { return num1 % num2 === 0 } -console.log(isDivisible(10, 5)) // returns true -console.log(isDivisible(123498175, 5)) // returns true -console.log(isDivisible(99, 5)) // returns false +// isDivisible(10, 5) // returns true +// isDivisible(123498175, 5) // returns true +// isDivisible(99, 5) // returns false diff --git a/Maths/MatrixExponentiationRecursive.js b/Maths/MatrixExponentiationRecursive.js index 6ee00aa25..b672e69bb 100644 --- a/Maths/MatrixExponentiationRecursive.js +++ b/Maths/MatrixExponentiationRecursive.js @@ -45,7 +45,7 @@ const MatMult = (matA, matB) => { return matC } -const MatrixExponentiationRecursive = (mat, m) => { +export const MatrixExponentiationRecursive = (mat, m) => { // Input: mat: 2D Array of Numbers of size n x n // Output: mat^n: 2D Array of Numbers of size n x n // Complexity: O(n^3 log m) @@ -65,20 +65,16 @@ const MatrixExponentiationRecursive = (mat, m) => { } } -const main = () => { - const mat = [[1, 0, 2], [2, 1, 0], [0, 2, 1]] +// const mat = [[1, 0, 2], [2, 1, 0], [0, 2, 1]] - // mat ^ 0 = [ [ 1, 0, 0 ], [ 0, 1, 0 ], [ 0, 0, 1 ] ] - console.log(MatrixExponentiationRecursive(mat, 0)) +// // mat ^ 0 = [ [ 1, 0, 0 ], [ 0, 1, 0 ], [ 0, 0, 1 ] ] +// MatrixExponentiationRecursive(mat, 0) - // mat ^ 1 = [ [ 1, 0, 2 ], [ 2, 1, 0 ], [ 0, 2, 1 ] ] - console.log(MatrixExponentiationRecursive(mat, 1)) +// // mat ^ 1 = [ [ 1, 0, 2 ], [ 2, 1, 0 ], [ 0, 2, 1 ] ] +// MatrixExponentiationRecursive(mat, 1) - // mat ^ 2 = [ [ 1, 4, 4 ], [ 4, 1, 4 ], [ 4, 4, 1 ] ] - console.log(MatrixExponentiationRecursive(mat, 2)) +// // mat ^ 2 = [ [ 1, 4, 4 ], [ 4, 1, 4 ], [ 4, 4, 1 ] ] +// MatrixExponentiationRecursive(mat, 2) - // mat ^ 5 = [ [ 1, 4, 4 ], [ 4, 1, 4 ], [ 4, 4, 1 ] ] - console.log(MatrixExponentiationRecursive(mat, 5)) -} - -main() +// // mat ^ 5 = [ [ 1, 4, 4 ], [ 4, 1, 4 ], [ 4, 4, 1 ] ] +// MatrixExponentiationRecursive(mat, 5) diff --git a/Maths/MatrixMultiplication.js b/Maths/MatrixMultiplication.js index 306c689f6..9fc2a924b 100644 --- a/Maths/MatrixMultiplication.js +++ b/Maths/MatrixMultiplication.js @@ -10,7 +10,7 @@ const matrixCheck = (matrix) => { if (index === 0) { columnNumb = matrix[index].length } else if (matrix[index].length !== columnNumb) { - console.log('The columns in this array are not equal') + // The columns in this array are not equal } else { return columnNumb } @@ -21,7 +21,7 @@ const matrixCheck = (matrix) => { const twoMatricesCheck = (first, second) => { const [firstRowLength, secondRowLength, firstColLength, secondColLength] = [first.length, second.length, matrixCheck(first), matrixCheck(second)] if (firstRowLength !== secondColLength || secondRowLength !== firstColLength) { - console.log('These matrices do not have a common side') + // These matrices do not have a common side return false } else { return true @@ -44,7 +44,7 @@ const initiateEmptyArray = (first, second) => { // Finally, `matrixMult` uses `Array.prototype.push()`, multiple layers of nested `for` loops, the addition assignment `+=` operator and multiplication operator `*` to perform the dot product between two matrices of differing sizes. // Dot product, takes the row of the first matrix and multiplies it by the column of the second matrix, the `twoMatricesCheck` tested to see if they were the same size already. // The dot product for each iteration is then saved to its respective index into `multMatrix`. -const matrixMult = (firstArray, secondArray) => { +export const matrixMult = (firstArray, secondArray) => { const multMatrix = initiateEmptyArray(firstArray, secondArray) for (let rm = 0; rm < firstArray.length; rm++) { const rowMult = [] @@ -66,26 +66,26 @@ const matrixMult = (firstArray, secondArray) => { return multMatrix } -const firstMatrix = [ - [1, 2], - [3, 4] -] +// const firstMatrix = [ +// [1, 2], +// [3, 4] +// ] -const secondMatrix = [ - [5, 6], - [7, 8] -] +// const secondMatrix = [ +// [5, 6], +// [7, 8] +// ] -console.log(matrixMult(firstMatrix, secondMatrix)) // [ [ 19, 22 ], [ 43, 50 ] ] +// matrixMult(firstMatrix, secondMatrix) // [ [ 19, 22 ], [ 43, 50 ] ] -const thirdMatrix = [ - [-1, 4, 1], - [7, -6, 2] -] -const fourthMatrix = [ - [2, -2], - [5, 3], - [3, 2] -] +// const thirdMatrix = [ +// [-1, 4, 1], +// [7, -6, 2] +// ] +// const fourthMatrix = [ +// [2, -2], +// [5, 3], +// [3, 2] +// ] -console.log(matrixMult(thirdMatrix, fourthMatrix)) // [ [ 21, 16 ], [ -10, -28 ] ] +// matrixMult(thirdMatrix, fourthMatrix) // [ [ 21, 16 ], [ -10, -28 ] ] diff --git a/Maths/WhileLoopFactorial.js b/Maths/WhileLoopFactorial.js index 58501697f..7e04bbafa 100644 --- a/Maths/WhileLoopFactorial.js +++ b/Maths/WhileLoopFactorial.js @@ -1,7 +1,7 @@ /* author: Theepag */ -const factorialize = (num) => { +export const factorialize = (num) => { // Step 1. variable result to store num let result = num // If num = 0 OR 1, the factorial will return 1 @@ -14,6 +14,3 @@ const factorialize = (num) => { // Step 3. Return the factorial return result } -// test -console.log(factorialize(5)) -console.log(factorialize(4)) diff --git a/Maths/decimalIsolate.js b/Maths/decimalIsolate.js index aae6e8ed7..06a29fb8e 100644 --- a/Maths/decimalIsolate.js +++ b/Maths/decimalIsolate.js @@ -4,14 +4,7 @@ * Return the result. */ -const decimalIsolate = (number) => { +export const decimalIsolate = (number) => { const ans = parseFloat((number + '').replace(/^[-\d]+./, '.')) return isNaN(ans) === true ? 0 : ans } - -// testing -console.log(decimalIsolate(35.345)) -console.log(decimalIsolate(56.879)) -console.log(decimalIsolate(89.5643)) -console.log(decimalIsolate(38.00)) -console.log(decimalIsolate(33)) diff --git a/Maths/isOdd.js b/Maths/isOdd.js index fffe17930..5caeb4a6b 100644 --- a/Maths/isOdd.js +++ b/Maths/isOdd.js @@ -4,10 +4,6 @@ * else false */ -const isOdd = (value) => { +export const isOdd = (value) => { return !!((value & 1)) } - -// testing -console.log(isOdd(2)) -console.log(isOdd(3))