From 3a9f3f59f8be95dd272e445a6338a246ecded95e Mon Sep 17 00:00:00 2001 From: punit1009 Date: Sun, 5 Oct 2025 18:31:19 +0530 Subject: [PATCH 1/4] chore: add .gitattributes to enforce LF line endings --- .gitattributes | Bin 0 -> 42 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000000000000000000000000000000000000..713f7330977dacbcf6fab1cd4a9fe8de2029cf45 GIT binary patch literal 42 rcmezWPm4i;p@boop#n(SG9)sT0_l99SSpar0gB`>q%rU^a4`S?;*to7 literal 0 HcmV?d00001 From e28d0d611ccd232646759816ea11f0179c152a19 Mon Sep 17 00:00:00 2001 From: punit1009 Date: Sun, 5 Oct 2025 18:32:40 +0530 Subject: [PATCH 2/4] chore: normalize all line endings to LF --- .babelrc | 3 - .editorconfig | 11 - .eslintrc | 21 - .gitattributes | Bin 42 -> 0 bytes .github/FUNDING.yml | 3 - .github/workflows/CI.yml | 35 - .gitignore | 5 - .husky/.gitignore | 1 - .husky/pre-commit | 5 - .npmrc | 1 - .nvmrc | 1 - BACKERS.md | 48 - CODE_OF_CONDUCT.md | 40 - CONTRIBUTING.md | 25 - LICENSE | 21 - README.ar-AR.md | 328 - README.de-DE.md | 338 - README.es-ES.md | 306 - README.fr-FR.md | 300 - README.he-IL.md | 370 - README.id-ID.md | 311 - README.it-IT.md | 304 - README.ja-JP.md | 303 - README.ko-KR.md | 284 - README.md | 379 - README.pl-PL.md | 296 - README.pt-BR.md | 304 - README.ru-RU.md | 322 - README.tr-TR.md | 325 - README.uk-UA.md | 312 - README.uz-UZ.md | 359 - README.vi-VN.md | 329 - README.zh-CN.md | 299 - README.zh-TW.md | 229 - assets/big-o-graph.png | Bin 61894 -> 0 bytes jest.config.js | 40 - package-lock.json | 15788 ---------------- package.json | 54 - .../cryptography/caesar-cipher/README.md | 33 - .../caesar-cipher/README.ru-RU.md | 29 - .../__test__/caesarCipher.test.js | 40 - .../caesar-cipher/caesarCipher.js | 58 - .../cryptography/hill-cipher/README.md | 96 - .../hill-cipher/_test_/hillCipher.test.js | 46 - .../cryptography/hill-cipher/hillCipher.js | 87 - .../polynomial-hash/PolynomialHash.js | 89 - .../cryptography/polynomial-hash/README.md | 116 - .../polynomial-hash/SimplePolynomialHash.js | 63 - .../__test__/PolynomialHash.test.js | 59 - .../__test__/SimplePolynomialHash.test.js | 52 - .../cryptography/rail-fence-cipher/README.md | 28 - .../__test__/railFenceCipher.test.js | 43 - .../rail-fence-cipher/railFenceCipher.js | 242 - .../graph/articulation-points/README.md | 22 - .../__test__/articulationPoints.test.js | 232 - .../articulation-points/articulationPoints.js | 113 - src/algorithms/graph/bellman-ford/README.md | 21 - .../bellman-ford/__test__/bellmanFord.test.js | 117 - .../graph/bellman-ford/bellmanFord.js | 45 - .../graph/breadth-first-search/README.md | 16 - .../__test__/breadthFirstSearch.test.js | 174 - .../breadthFirstSearch.js | 75 - src/algorithms/graph/bridges/README.md | 26 - .../bridges/__test__/graphBridges.test.js | 203 - src/algorithms/graph/bridges/graphBridges.js | 95 - .../graph/depth-first-search/README.md | 16 - .../__test__/depthFirstSearch.test.js | 165 - .../depth-first-search/depthFirstSearch.js | 68 - src/algorithms/graph/detect-cycle/README.md | 60 - .../__test__/detectDirectedCycle.test.js | 42 - .../__test__/detectUndirectedCycle.test.js | 41 - ...ectUndirectedCycleUsingDisjointSet.test.js | 36 - .../graph/detect-cycle/detectDirectedCycle.js | 93 - .../detect-cycle/detectUndirectedCycle.js | 59 - .../detectUndirectedCycleUsingDisjointSet.js | 31 - src/algorithms/graph/dijkstra/README.ko-KR.md | 16 - src/algorithms/graph/dijkstra/README.md | 28 - .../graph/dijkstra/__test__/dijkstra.test.js | 117 - src/algorithms/graph/dijkstra/dijkstra.js | 80 - src/algorithms/graph/eulerian-path/README.md | 35 - .../__test__/eulerianPath.test.js | 139 - .../graph/eulerian-path/eulerianPath.js | 101 - src/algorithms/graph/floyd-warshall/README.md | 94 - .../__test__/floydWarshall.test.js | 220 - .../graph/floyd-warshall/floydWarshall.js | 72 - .../graph/hamiltonian-cycle/README.md | 48 - .../__test__/hamiltonianCycle.test.js | 90 - .../hamiltonian-cycle/hamiltonianCycle.js | 134 - src/algorithms/graph/kruskal/README.ko-KR.md | 29 - src/algorithms/graph/kruskal/README.md | 52 - .../graph/kruskal/__test__/kruskal.test.js | 91 - src/algorithms/graph/kruskal/kruskal.js | 62 - src/algorithms/graph/prim/README.md | 47 - .../graph/prim/__test__/prim.test.js | 91 - src/algorithms/graph/prim/prim.js | 73 - .../strongly-connected-components/README.md | 16 - .../stronglyConnectedComponents.test.js | 102 - .../stronglyConnectedComponents.js | 133 - .../graph/topological-sorting/README.md | 55 - .../__test__/topologicalSort.test.js | 53 - .../topological-sorting/topologicalSort.js | 47 - .../graph/travelling-salesman/README.md | 26 - .../__test__/bfTravellingSalesman.test.js | 51 - .../bfTravellingSalesman.js | 104 - .../image-processing/seam-carving/README.md | 509 - .../seam-carving/README.ru-RU.md | 509 - .../__tests__/resizeImageWidth.node.js | 85 - .../__tests__/test-image-after.png | Bin 6725 -> 0 bytes .../__tests__/test-image-before.png | Bin 11746 -> 0 bytes .../seam-carving/resizeImageWidth.js | 253 - .../image-processing/utils/imageData.js | 39 - .../linked-list/reverse-traversal/README.md | 23 - .../reverse-traversal/README.pt-BR.md | 23 - .../reverse-traversal/README.zh-CN.md | 19 - .../__test__/reverseTraversal.test.js | 35 - .../reverse-traversal/reverseTraversal.js | 24 - .../linked-list/traversal/README.md | 24 - .../linked-list/traversal/README.pt-BR.md | 24 - .../linked-list/traversal/README.ru-RU.md | 19 - .../linked-list/traversal/README.zh-CN.md | 19 - .../traversal/__test__/traversal.test.js | 22 - .../linked-list/traversal/traversal.js | 18 - .../math/binary-floating-point/README.md | 103 - .../__tests__/bitsToFloat.test.js | 32 - .../__tests__/floatAsBinaryString.test.js | 20 - .../math/binary-floating-point/bitsToFloat.js | 119 - .../floatAsBinaryString.js | 61 - ...cision-floating-point-number-explained.png | Bin 352613 -> 0 bytes .../images/03-scientific-notation.png | Bin 76251 -> 0 bytes .../math/binary-floating-point/testCases.js | 71 - src/algorithms/math/bits/README.fr-FR.md | 295 - src/algorithms/math/bits/README.md | 274 - src/algorithms/math/bits/README.zh-CN.md | 236 - .../math/bits/__test__/bitLength.test.js | 14 - .../math/bits/__test__/bitsDiff.test.js | 13 - .../math/bits/__test__/clearBit.test.js | 15 - .../math/bits/__test__/countSetBits.test.js | 20 - .../math/bits/__test__/divideByTwo.test.js | 12 - .../math/bits/__test__/fullAdder.test.js | 18 - .../math/bits/__test__/getBit.test.js | 23 - .../math/bits/__test__/isEven.test.js | 19 - .../math/bits/__test__/isPositive.test.js | 19 - .../math/bits/__test__/isPowerOfTwo.test.js | 20 - .../math/bits/__test__/multiply.test.js | 18 - .../math/bits/__test__/multiplyByTwo.test.js | 12 - .../bits/__test__/multiplyUnsigned.test.js | 15 - .../math/bits/__test__/setBit.test.js | 15 - .../math/bits/__test__/switchSign.test.js | 13 - .../math/bits/__test__/updateBit.test.js | 19 - src/algorithms/math/bits/bitLength.js | 15 - src/algorithms/math/bits/bitsDiff.js | 13 - src/algorithms/math/bits/clearBit.js | 10 - src/algorithms/math/bits/countSetBits.js | 18 - src/algorithms/math/bits/divideByTwo.js | 7 - src/algorithms/math/bits/fullAdder.js | 70 - src/algorithms/math/bits/getBit.js | 8 - src/algorithms/math/bits/isEven.js | 7 - src/algorithms/math/bits/isPositive.js | 13 - src/algorithms/math/bits/isPowerOfTwo.js | 7 - src/algorithms/math/bits/multiply.js | 41 - src/algorithms/math/bits/multiplyByTwo.js | 7 - src/algorithms/math/bits/multiplyUnsigned.js | 43 - src/algorithms/math/bits/setBit.js | 8 - src/algorithms/math/bits/switchSign.js | 8 - src/algorithms/math/bits/updateBit.js | 16 - .../math/complex-number/ComplexNumber.js | 160 - .../math/complex-number/README.fr-FR.md | 237 - src/algorithms/math/complex-number/README.md | 228 - .../__test__/ComplexNumber.test.js | 181 - .../math/euclidean-algorithm/README.fr-FR.md | 49 - .../math/euclidean-algorithm/README.md | 60 - .../__test__/euclideanAlgorithm.test.js | 26 - .../euclideanAlgorithmIterative.test.js | 26 - .../euclidean-algorithm/euclideanAlgorithm.js | 15 - .../euclideanAlgorithmIterative.js | 20 - .../math/euclidean-distance/README.md | 36 - .../__tests__/euclideanDistance.test.js | 23 - .../euclidean-distance/euclideanDistance.js | 28 - src/algorithms/math/factorial/README.fr-FR.md | 35 - src/algorithms/math/factorial/README.ka-GE.md | 32 - src/algorithms/math/factorial/README.md | 35 - src/algorithms/math/factorial/README.tr-TR.md | 38 - src/algorithms/math/factorial/README.uk-UA.md | 33 - src/algorithms/math/factorial/README.zh-CN.md | 27 - .../math/factorial/__test__/factorial.test.js | 11 - .../__test__/factorialRecursive.test.js | 11 - src/algorithms/math/factorial/factorial.js | 13 - .../math/factorial/factorialRecursive.js | 7 - .../math/fast-powering/README.fr-FR.md | 73 - src/algorithms/math/fast-powering/README.md | 71 - .../__test__/fastPowering.test.js | 23 - .../math/fast-powering/fastPowering.js | 30 - src/algorithms/math/fibonacci/README.fr-FR.md | 24 - src/algorithms/math/fibonacci/README.ka-GE.md | 20 - src/algorithms/math/fibonacci/README.md | 25 - src/algorithms/math/fibonacci/README.zh-CN.md | 23 - .../math/fibonacci/__test__/fibonacci.test.js | 16 - .../fibonacci/__test__/fibonacciNth.test.js | 23 - .../__test__/fibonacciNthClosedForm.test.js | 26 - src/algorithms/math/fibonacci/fibonacci.js | 29 - src/algorithms/math/fibonacci/fibonacciNth.js | 25 - .../math/fibonacci/fibonacciNthClosedForm.js | 23 - .../math/fourier-transform/README.fr-FR.md | 135 - .../math/fourier-transform/README.md | 133 - .../__test__/FourierTester.js | 295 - .../__test__/discreteFourierTransform.test.js | 8 - .../__test__/fastFourierTransform.test.js | 101 - .../inverseDiscreteFourierTransform.test.js | 8 - .../discreteFourierTransform.js | 69 - .../fourier-transform/fastFourierTransform.js | 77 - .../inverseDiscreteFourierTransform.js | 58 - src/algorithms/math/horner-method/README.md | 20 - .../__test__/classicPolynome.test.js | 14 - .../__test__/hornerMethod.test.js | 21 - .../math/horner-method/classicPolynome.js | 16 - .../math/horner-method/hornerMethod.js | 16 - .../math/integer-partition/README.md | 34 - .../__test__/integerPartition.test.js | 14 - .../integer-partition/integerPartition.js | 57 - src/algorithms/math/is-power-of-two/README.md | 51 - .../__test__/isPowerOfTwo.test.js | 23 - .../__test__/isPowerOfTwoBitwise.test.js | 23 - .../math/is-power-of-two/isPowerOfTwo.js | 25 - .../is-power-of-two/isPowerOfTwoBitwise.js | 26 - .../math/least-common-multiple/README.md | 62 - .../__test__/leastCommonMultiple.test.js | 18 - .../leastCommonMultiple.js | 11 - src/algorithms/math/liu-hui/README.md | 92 - .../math/liu-hui/__test__/liuHui.test.js | 19 - src/algorithms/math/liu-hui/liuHui.js | 54 - src/algorithms/math/matrix/Matrix.js | 309 - src/algorithms/math/matrix/README.md | 63 - .../math/matrix/__tests__/Matrix.test.js | 455 - src/algorithms/math/pascal-triangle/README.md | 64 - .../__test__/pascalTriangle.test.js | 14 - .../__test__/pascalTriangleRecursive.test.js | 14 - .../math/pascal-triangle/pascalTriangle.js | 16 - .../pascalTriangleRecursive.js | 30 - src/algorithms/math/primality-test/README.md | 25 - .../__test__/trialDivision.test.js | 37 - .../math/primality-test/trialDivision.js | 35 - src/algorithms/math/prime-factors/README.md | 37 - .../math/prime-factors/README.zh-CN.md | 38 - .../__test__/primeFactors.test.js | 87 - .../math/prime-factors/primeFactors.js | 42 - src/algorithms/math/radian/README.md | 36 - .../radian/__test__/degreeToRadian.test.js | 12 - .../radian/__test__/radianToDegree.test.js | 12 - src/algorithms/math/radian/degreeToRadian.js | 7 - src/algorithms/math/radian/radianToDegree.js | 7 - .../math/sieve-of-eratosthenes/README.md | 32 - .../__test__/sieveOfEratosthenes.test.js | 12 - .../sieveOfEratosthenes.js | 36 - src/algorithms/math/square-root/README.md | 62 - .../square-root/__test__/squareRoot.test.js | 69 - src/algorithms/math/square-root/squareRoot.js | 40 - src/algorithms/ml/k-means/README.md | 40 - src/algorithms/ml/k-means/README.pt-BR.md | 35 - .../ml/k-means/__test__/kMeans.test.js | 40 - src/algorithms/ml/k-means/kMeans.js | 85 - src/algorithms/ml/knn/README.md | 44 - src/algorithms/ml/knn/README.pt-BR.md | 44 - src/algorithms/ml/knn/__test__/knn.test.js | 71 - src/algorithms/ml/knn/kNN.js | 60 - .../search/binary-search/README.es-ES.md | 27 - src/algorithms/search/binary-search/README.md | 27 - .../search/binary-search/README.pt-BR.md | 23 - .../__test__/binarySearch.test.js | 34 - .../search/binary-search/binarySearch.js | 44 - .../search/interpolation-search/README.md | 40 - .../__test__/interpolationSearch.test.js | 24 - .../interpolationSearch.js | 52 - src/algorithms/search/jump-search/README.md | 27 - .../jump-search/__test__/jumpSearch.test.js | 39 - .../search/jump-search/jumpSearch.js | 51 - src/algorithms/search/linear-search/README.md | 23 - .../search/linear-search/README.pt-BR.md | 19 - .../__test__/linearSearch.test.js | 40 - .../search/linear-search/linearSearch.js | 22 - .../sets/cartesian-product/README.md | 14 - .../__test__/cartesianProduct.test.js | 19 - .../cartesian-product/cartesianProduct.js | 27 - src/algorithms/sets/combination-sum/README.md | 60 - .../__test__/combinationSum.test.js | 24 - .../sets/combination-sum/combinationSum.js | 65 - src/algorithms/sets/combinations/README.md | 68 - .../__test__/combineWithRepetitions.test.js | 59 - .../combineWithoutRepetitions.test.js | 64 - .../combinations/combineWithRepetitions.js | 32 - .../combinations/combineWithoutRepetitions.js | 32 - .../images/combinations-overview.jpg | Bin 352932 -> 0 bytes .../images/combinations-with-repetitions.jpg | Bin 331434 -> 0 bytes .../combinations-without-repetitions.jpg | Bin 309391 -> 0 bytes .../sets/combinations/images/overview.png | Bin 145014 -> 0 bytes src/algorithms/sets/fisher-yates/README.md | 15 - .../fisher-yates/__test__/fisherYates.test.js | 19 - .../sets/fisher-yates/fisherYates.js | 15 - .../sets/knapsack-problem/Knapsack.js | 195 - .../sets/knapsack-problem/KnapsackItem.js | 33 - .../sets/knapsack-problem/README.md | 69 - .../__test__/Knapsack.test.js | 162 - .../__test__/KnapsackItem.test.js | 35 - .../sets/longest-common-subsequence/README.md | 25 - .../__test__/longestCommonSubsequence.test.js | 31 - .../longestCommonSubsequenceRecursive.test.js | 17 - .../longestCommonSubsequence.js | 60 - .../longestCommonSubsequenceRecursive.js | 36 - .../longest-increasing-subsequence/README.md | 46 - .../dpLongestIncreasingSubsequence.test.js | 36 - .../dpLongestIncreasingSubsequence.js | 53 - .../sets/maximum-subarray/README.md | 29 - .../__test__/bfMaximumSubarray.test.js | 16 - .../__test__/dcMaximumSubarraySum.test.js | 16 - .../__test__/dpMaximumSubarray.test.js | 16 - .../maximum-subarray/bfMaximumSubarray.js | 26 - .../maximum-subarray/dcMaximumSubarraySum.js | 33 - .../maximum-subarray/dpMaximumSubarray.js | 45 - src/algorithms/sets/permutations/README.md | 55 - .../__test__/permutateWithRepetitions.test.js | 52 - .../permutateWithoutRepetitions.test.js | 68 - .../sets/permutations/images/overview.png | Bin 145014 -> 0 bytes .../images/permutations-overview.jpeg | Bin 314729 -> 0 bytes .../images/permutations-with-repetitions.jpg | Bin 307854 -> 0 bytes .../permutations-without-repetitions.jpg | Bin 373106 -> 0 bytes .../permutations/permutateWithRepetitions.js | 31 - .../permutateWithoutRepetitions.js | 31 - src/algorithms/sets/power-set/README.md | 112 - .../power-set/__test__/btPowerSet.test.js | 21 - .../power-set/__test__/bwPowerSet.test.js | 21 - .../power-set/__test__/caPowerSet.test.js | 28 - src/algorithms/sets/power-set/btPowerSet.js | 41 - src/algorithms/sets/power-set/bwPowerSet.js | 34 - src/algorithms/sets/power-set/caPowerSet.js | 37 - .../shortest-common-supersequence/README.md | 24 - .../shortestCommonSupersequence.test.js | 35 - .../shortestCommonSupersequence.js | 71 - src/algorithms/sorting/Sort.js | 34 - src/algorithms/sorting/SortTester.js | 72 - src/algorithms/sorting/__test__/Sort.test.js | 12 - .../sorting/bubble-sort/BubbleSort.js | 38 - src/algorithms/sorting/bubble-sort/README.md | 25 - .../sorting/bubble-sort/README.pt-BR.md | 20 - .../bubble-sort/__test__/BubbleSort.test.js | 64 - .../sorting/bucket-sort/BucketSort.js | 46 - src/algorithms/sorting/bucket-sort/README.md | 35 - .../bucket-sort/__test__/BucketSort.test.js | 33 - .../bucket-sort/images/bucket_sort_1.png | Bin 11151 -> 0 bytes .../bucket-sort/images/bucket_sort_2.png | Bin 12936 -> 0 bytes .../sorting/counting-sort/CountingSort.js | 78 - .../sorting/counting-sort/README.md | 70 - .../sorting/counting-sort/README.pt-br.md | 70 - .../__test__/CountingSort.test.js | 74 - src/algorithms/sorting/heap-sort/HeapSort.js | 30 - src/algorithms/sorting/heap-sort/README.md | 27 - .../sorting/heap-sort/README.pt-BR.md | 20 - .../heap-sort/__test__/HeapSort.test.js | 62 - .../sorting/insertion-sort/InsertionSort.js | 39 - .../sorting/insertion-sort/README.md | 24 - .../sorting/insertion-sort/README.pt-BR.md | 22 - .../__test__/InsertionSort.test.js | 64 - .../sorting/merge-sort/MergeSort.js | 60 - .../sorting/merge-sort/README.ko-KR.md | 22 - src/algorithms/sorting/merge-sort/README.md | 38 - .../sorting/merge-sort/README.pt-BR.md | 38 - .../merge-sort/__test__/MergeSort.test.js | 64 - .../sorting/quick-sort/QuickSort.js | 48 - .../sorting/quick-sort/QuickSortInPlace.js | 78 - src/algorithms/sorting/quick-sort/README.md | 39 - .../sorting/quick-sort/README.pt-BR.md | 39 - .../sorting/quick-sort/README.zh-CN.md | 27 - .../quick-sort/__test__/QuickSort.test.js | 64 - .../__test__/QuickSortInPlace.test.js | 60 - src/algorithms/sorting/radix-sort/README.md | 48 - .../sorting/radix-sort/README.pt-BR.md | 48 - .../sorting/radix-sort/RadixSort.js | 152 - .../radix-sort/__test__/RadixSort.test.js | 27 - .../sorting/radix-sort/images/radix-sort.png | Bin 12619 -> 0 bytes .../sorting/selection-sort/README.md | 27 - .../sorting/selection-sort/README.pt-BR.md | 20 - .../sorting/selection-sort/SelectionSort.js | 32 - .../__test__/SelectionSort.test.js | 60 - src/algorithms/sorting/shell-sort/README.md | 60 - .../sorting/shell-sort/README.pt-BR.md | 60 - .../sorting/shell-sort/ShellSort.js | 41 - .../shell-sort/__test__/ShellSort.test.js | 60 - .../stack/valid-parentheses/README.md | 44 - .../__test__/validParentheses.test.js | 23 - .../valid-parentheses/validParentheses.js | 42 - .../statistics/weighted-random/README.md | 143 - .../__test__/weightedRandom.test.js | 64 - .../weighted-random/images/cover.png | Bin 305130 -> 0 bytes .../weighted-random/weightedRandom.js | 52 - .../string/hamming-distance/README.md | 23 - .../__test__/hammingDistance.test.js | 21 - .../hamming-distance/hammingDistance.js | 20 - .../string/knuth-morris-pratt/README.md | 19 - .../__test__/knuthMorrisPratt.test.js | 15 - .../knuth-morris-pratt/knuthMorrisPratt.js | 59 - .../string/levenshtein-distance/README.md | 115 - .../__test__/levenshteinDistance.test.js | 29 - .../levenshteinDistance.js | 37 - .../string/longest-common-substring/README.md | 24 - .../__test__/longestCommonSubstring.test.js | 24 - .../longestCommonSubstring.js | 68 - src/algorithms/string/palindrome/README.md | 29 - .../palindrome/__test__/isPalindrome.test.js | 15 - .../string/palindrome/isPalindrome.js | 19 - src/algorithms/string/rabin-karp/README.md | 56 - .../rabin-karp/__test__/rabinKarp.test.js | 43 - src/algorithms/string/rabin-karp/rabinKarp.js | 42 - .../regular-expression-matching/README.md | 73 - .../regularExpressionMatching.test.js | 34 - .../regularExpressionMatching.js | 135 - src/algorithms/string/z-algorithm/README.md | 62 - .../z-algorithm/__test__/zAlgorithm.test.js | 16 - .../string/z-algorithm/zAlgorithm.js | 132 - .../tree/breadth-first-search/README.md | 39 - .../__test__/breadthFirstSearch.test.js | 102 - .../breadthFirstSearch.js | 58 - .../tree/depth-first-search/README.md | 15 - .../__test__/depthFirstSearch.test.js | 102 - .../depth-first-search/depthFirstSearch.js | 76 - .../best-time-to-buy-sell-stocks/README.md | 107 - ...accumulatorBestTimeToBuySellStocks.test.js | 48 - .../dpBestTimeToBuySellStocks.test.js | 48 - .../dqBestTimeToBuySellStocks.test.js | 48 - .../peakvalleyBestTimeToBuySellStocks.test.js | 48 - .../accumulatorBestTimeToBuySellStocks.js | 20 - .../dpBestTimeToBuySellStocks.js | 25 - .../dqBestTimeToBuySellStocks.js | 42 - .../peakvalleyBestTimeToBuySellStocks.js | 35 - .../uncategorized/hanoi-tower/README.md | 29 - .../hanoi-tower/__test__/hanoiTower.test.js | 62 - .../uncategorized/hanoi-tower/hanoiTower.js | 84 - .../uncategorized/jump-game/README.md | 128 - .../__test__/backtrackingJumpGame.test.js | 17 - .../__test__/dpBottomUpJumpGame.test.js | 17 - .../__test__/dpTopDownJumpGame.test.js | 17 - .../jump-game/__test__/greedyJumpGame.test.js | 17 - .../jump-game/backtrackingJumpGame.js | 48 - .../jump-game/dpBottomUpJumpGame.js | 46 - .../jump-game/dpTopDownJumpGame.js | 80 - .../uncategorized/jump-game/greedyJumpGame.js | 40 - .../uncategorized/knight-tour/README.md | 33 - .../knight-tour/__test__/knightTour.test.js | 43 - .../uncategorized/knight-tour/knightTour.js | 112 - .../uncategorized/n-queens/QueenPosition.js | 39 - .../uncategorized/n-queens/README.md | 117 - .../n-queens/__test__/QueensPosition.test.js | 16 - .../n-queens/__test__/nQueens.test.js | 38 - .../n-queens/__test__/nQueensBitwise.test.js | 14 - .../uncategorized/n-queens/nQueens.js | 103 - .../uncategorized/n-queens/nQueensBitwise.js | 101 - .../uncategorized/rain-terraces/README.md | 122 - .../__test__/bfRainTerraces.test.js | 21 - .../__test__/dpRainTerraces.test.js | 21 - .../rain-terraces/bfRainTerraces.js | 33 - .../rain-terraces/dpRainTerraces.js | 47 - .../recursive-staircase/README.md | 21 - .../__test__/recursiveStaircaseBF.test.js | 18 - .../__test__/recursiveStaircaseDP.test.js | 18 - .../__test__/recursiveStaircaseIT.test.js | 18 - .../__test__/recursiveStaircaseMEM.test.js | 18 - .../recursiveStaircaseBF.js | 27 - .../recursiveStaircaseDP.js | 33 - .../recursiveStaircaseIT.js | 31 - .../recursiveStaircaseMEM.js | 44 - .../square-matrix-rotation/README.md | 110 - .../__test__/squareMatrixRotation.test.js | 59 - .../squareMatrixRotation.js | 37 - .../uncategorized/unique-paths/README.md | 106 - .../__test__/btUniquePaths.test.js | 12 - .../__test__/dpUniquePaths.test.js | 12 - .../unique-paths/__test__/uniquePaths.test.js | 12 - .../unique-paths/btUniquePaths.js | 58 - .../unique-paths/dpUniquePaths.js | 40 - .../uncategorized/unique-paths/uniquePaths.js | 13 - .../bloom-filter/BloomFilter.js | 131 - src/data-structures/bloom-filter/README.md | 133 - .../bloom-filter/README.pt-BR.md | 129 - .../bloom-filter/README.ru-RU.md | 55 - .../bloom-filter/README.uk-UA.md | 54 - .../bloom-filter/__test__/BloomFilter.test.js | 62 - .../disjoint-set/DisjointSet.js | 97 - .../disjoint-set/DisjointSetAdhoc.js | 78 - .../disjoint-set/DisjointSetItem.js | 96 - src/data-structures/disjoint-set/README.md | 30 - .../disjoint-set/README.pt-BR.md | 28 - .../disjoint-set/README.ru-RU.md | 21 - .../disjoint-set/README.uk-UA.md | 22 - .../disjoint-set/__test__/DisjointSet.test.js | 140 - .../__test__/DisjointSetAdhoc.test.js | 50 - .../__test__/DisjointSetItem.test.js | 115 - .../doubly-linked-list/DoublyLinkedList.js | 263 - .../DoublyLinkedListNode.js | 11 - .../doubly-linked-list/README.es-ES.md | 104 - .../doubly-linked-list/README.ja-JP.md | 97 - .../doubly-linked-list/README.ko-KR.md | 109 - .../doubly-linked-list/README.md | 119 - .../doubly-linked-list/README.pt-BR.md | 113 - .../doubly-linked-list/README.ru-RU.md | 110 - .../doubly-linked-list/README.uk-UA.md | 109 - .../doubly-linked-list/README.zh-CN.md | 101 - .../__test__/DoublyLinkedList.test.js | 280 - .../__test__/DoublyLinkedListNode.test.js | 55 - .../images/doubly-linked-list.jpeg | Bin 217712 -> 0 bytes src/data-structures/graph/Graph.js | 197 - src/data-structures/graph/GraphEdge.js | 40 - src/data-structures/graph/GraphVertex.js | 138 - src/data-structures/graph/README.fr-FR.md | 25 - src/data-structures/graph/README.md | 35 - src/data-structures/graph/README.pt-BR.md | 28 - src/data-structures/graph/README.ru-RU.md | 26 - src/data-structures/graph/README.uk-UA.md | 24 - src/data-structures/graph/README.zh-CN.md | 22 - .../graph/__test__/Graph.test.js | 388 - .../graph/__test__/GraphEdge.test.js | 42 - .../graph/__test__/GraphVertex.test.js | 188 - src/data-structures/graph/images/graph.jpeg | Bin 134354 -> 0 bytes src/data-structures/hash-table/HashTable.js | 121 - .../hash-table/README.fr-FR.md | 31 - .../hash-table/README.ja-JP.md | 18 - .../hash-table/README.ko-KR.md | 27 - src/data-structures/hash-table/README.md | 37 - .../hash-table/README.pt-BR.md | 27 - .../hash-table/README.ru-RU.md | 29 - .../hash-table/README.uk-UA.md | 29 - .../hash-table/README.zh-CN.md | 25 - .../hash-table/__test__/HashTable.test.js | 117 - .../images/collision-resolution.jpeg | Bin 267727 -> 0 bytes .../hash-table/images/hash-table.jpeg | Bin 164355 -> 0 bytes src/data-structures/heap/Heap.js | 286 - src/data-structures/heap/MaxHeap.js | 16 - src/data-structures/heap/MaxHeapAdhoc.js | 115 - src/data-structures/heap/MinHeap.js | 16 - src/data-structures/heap/MinHeapAdhoc.js | 117 - src/data-structures/heap/README.fr-FR.md | 22 - src/data-structures/heap/README.ja-JP.md | 22 - src/data-structures/heap/README.ko-KR.md | 23 - src/data-structures/heap/README.md | 69 - src/data-structures/heap/README.pt-BR.md | 25 - src/data-structures/heap/README.ru-RU.md | 26 - src/data-structures/heap/README.tr-TR.md | 22 - src/data-structures/heap/README.uk-UA.md | 25 - src/data-structures/heap/README.zh-CN.md | 23 - .../heap/__test__/Heap.test.js | 12 - .../heap/__test__/MaxHeap.test.js | 172 - .../heap/__test__/MaxHeapAdhoc.test.js | 91 - .../heap/__test__/MinHeap.test.js | 194 - .../heap/__test__/MinHeapAdhoc.test.js | 91 - .../heap/images/array-representation.jpeg | Bin 131761 -> 0 bytes src/data-structures/heap/images/max-heap.jpeg | Bin 163685 -> 0 bytes src/data-structures/heap/images/min-heap.jpeg | Bin 160107 -> 0 bytes src/data-structures/linked-list/LinkedList.js | 272 - .../linked-list/LinkedListNode.js | 10 - .../linked-list/README.es-ES.md | 165 - .../linked-list/README.ja-JP.md | 143 - .../linked-list/README.ko-KR.md | 151 - src/data-structures/linked-list/README.md | 170 - .../linked-list/README.pt-BR.md | 159 - .../linked-list/README.ru-RU.md | 147 - .../linked-list/README.tr-TR.md | 161 - .../linked-list/README.uk-UA.md | 147 - .../linked-list/README.vi-VN.md | 155 - .../linked-list/README.zh-CN.md | 149 - .../linked-list/__test__/LinkedList.test.js | 282 - .../__test__/LinkedListNode.test.js | 46 - .../linked-list/images/linked-list.jpeg | Bin 185069 -> 0 bytes src/data-structures/lru-cache/LRUCache.js | 153 - .../lru-cache/LRUCacheOnMap.js | 53 - src/data-structures/lru-cache/README.ko-KR.md | 51 - src/data-structures/lru-cache/README.md | 54 - .../lru-cache/__test__/LRUCache.test.js | 150 - .../lru-cache/__test__/LRUCacheOnMap.test.js | 148 - .../lru-cache/images/lru-cache.jpg | Bin 665297 -> 0 bytes .../priority-queue/PriorityQueue.js | 98 - .../priority-queue/README.fr-FR.md | 22 - .../priority-queue/README.ja-JP.md | 10 - .../priority-queue/README.ko-KR.md | 12 - src/data-structures/priority-queue/README.md | 29 - .../priority-queue/README.pt-BR.md | 23 - .../priority-queue/README.ru-RU.md | 22 - .../priority-queue/README.uk-UA.md | 21 - .../priority-queue/README.zh-CN.md | 15 - .../__test__/PriorityQueue.test.js | 124 - src/data-structures/queue/Queue.js | 58 - src/data-structures/queue/README.fr-FR.md | 30 - src/data-structures/queue/README.ja-JP.md | 14 - src/data-structures/queue/README.ko-KR.md | 23 - src/data-structures/queue/README.md | 37 - src/data-structures/queue/README.pt-BR.md | 30 - src/data-structures/queue/README.ru-RU.md | 21 - src/data-structures/queue/README.uk-UA.md | 21 - src/data-structures/queue/README.vi-VN.md | 22 - src/data-structures/queue/README.zh-CN.md | 17 - .../queue/__test__/Queue.test.js | 65 - src/data-structures/queue/images/queue.jpeg | Bin 163552 -> 0 bytes src/data-structures/stack/README.fr-FR.md | 30 - src/data-structures/stack/README.ja-JP.md | 19 - src/data-structures/stack/README.ko-KR.md | 26 - src/data-structures/stack/README.md | 36 - src/data-structures/stack/README.pt-BR.md | 28 - src/data-structures/stack/README.ru-RU.md | 25 - src/data-structures/stack/README.uk-UA.md | 25 - src/data-structures/stack/README.vi-VN.md | 27 - src/data-structures/stack/README.zh-CN.md | 23 - src/data-structures/stack/Stack.js | 67 - .../stack/__test__/Stack.test.js | 77 - src/data-structures/stack/images/stack.jpeg | Bin 153582 -> 0 bytes src/data-structures/stack/images/stack.jpg | Bin 203274 -> 0 bytes src/data-structures/tree/BinaryTreeNode.js | 219 - src/data-structures/tree/README.md | 37 - src/data-structures/tree/README.pt-BR.md | 32 - src/data-structures/tree/README.zh-CN.md | 26 - .../tree/__test__/BinaryTreeNode.test.js | 297 - src/data-structures/tree/avl-tree/AvlTree.js | 163 - src/data-structures/tree/avl-tree/README.md | 51 - .../tree/avl-tree/README.pt-BR.md | 50 - .../tree/avl-tree/__test__/AvlTRee.test.js | 303 - .../binary-search-tree/BinarySearchTree.js | 44 - .../BinarySearchTreeNode.js | 151 - .../tree/binary-search-tree/README.md | 280 - .../tree/binary-search-tree/README.pt-BR.md | 278 - .../__test__/BinarySearchTree.test.js | 98 - .../__test__/BinarySearchTreeNode.test.js | 255 - .../images/binary-search-tree.jpg | Bin 196992 -> 0 bytes .../tree/fenwick-tree/FenwickTree.js | 72 - .../tree/fenwick-tree/README.md | 40 - .../tree/fenwick-tree/README.pt-BR.md | 42 - .../fenwick-tree/__test__/FenwickTree.test.js | 114 - src/data-structures/tree/images/tree.jpeg | Bin 234561 -> 0 bytes .../tree/red-black-tree/README.md | 96 - .../tree/red-black-tree/README.pt-BR.md | 92 - .../tree/red-black-tree/RedBlackTree.js | 323 - .../__test__/RedBlackTree.test.js | 324 - .../tree/segment-tree/README.md | 53 - .../tree/segment-tree/README.pt-BR.md | 48 - .../tree/segment-tree/SegmentTree.js | 168 - .../segment-tree/__test__/SegmentTree.test.js | 101 - src/data-structures/trie/README.ko-KO.md | 19 - src/data-structures/trie/README.md | 32 - src/data-structures/trie/README.pt-BR.md | 27 - src/data-structures/trie/README.ru-RU.md | 28 - src/data-structures/trie/README.uk-UA.md | 27 - src/data-structures/trie/README.zh-CN.md | 18 - src/data-structures/trie/Trie.js | 110 - src/data-structures/trie/TrieNode.js | 94 - .../trie/__test__/Trie.test.js | 94 - .../trie/__test__/TrieNode.test.js | 90 - src/data-structures/trie/images/trie.jpg | Bin 309646 -> 0 bytes src/playground/README.md | 11 - src/playground/__test__/playground.test.js | 8 - src/playground/playground.js | 12 - src/utils/comparator/Comparator.js | 82 - .../comparator/__test__/Comparator.test.js | 50 - 655 files changed, 59055 deletions(-) delete mode 100644 .babelrc delete mode 100644 .editorconfig delete mode 100644 .eslintrc delete mode 100644 .gitattributes delete mode 100644 .github/FUNDING.yml delete mode 100644 .github/workflows/CI.yml delete mode 100644 .gitignore delete mode 100644 .husky/.gitignore delete mode 100755 .husky/pre-commit delete mode 100644 .npmrc delete mode 100644 .nvmrc delete mode 100644 BACKERS.md delete mode 100644 CODE_OF_CONDUCT.md delete mode 100644 CONTRIBUTING.md delete mode 100644 LICENSE delete mode 100644 README.ar-AR.md delete mode 100644 README.de-DE.md delete mode 100644 README.es-ES.md delete mode 100644 README.fr-FR.md delete mode 100644 README.he-IL.md delete mode 100644 README.id-ID.md delete mode 100644 README.it-IT.md delete mode 100644 README.ja-JP.md delete mode 100644 README.ko-KR.md delete mode 100644 README.md delete mode 100644 README.pl-PL.md delete mode 100644 README.pt-BR.md delete mode 100644 README.ru-RU.md delete mode 100644 README.tr-TR.md delete mode 100644 README.uk-UA.md delete mode 100644 README.uz-UZ.md delete mode 100644 README.vi-VN.md delete mode 100644 README.zh-CN.md delete mode 100644 README.zh-TW.md delete mode 100644 assets/big-o-graph.png delete mode 100644 jest.config.js delete mode 100644 package-lock.json delete mode 100644 package.json delete mode 100644 src/algorithms/cryptography/caesar-cipher/README.md delete mode 100644 src/algorithms/cryptography/caesar-cipher/README.ru-RU.md delete mode 100644 src/algorithms/cryptography/caesar-cipher/__test__/caesarCipher.test.js delete mode 100644 src/algorithms/cryptography/caesar-cipher/caesarCipher.js delete mode 100644 src/algorithms/cryptography/hill-cipher/README.md delete mode 100644 src/algorithms/cryptography/hill-cipher/_test_/hillCipher.test.js delete mode 100644 src/algorithms/cryptography/hill-cipher/hillCipher.js delete mode 100644 src/algorithms/cryptography/polynomial-hash/PolynomialHash.js delete mode 100644 src/algorithms/cryptography/polynomial-hash/README.md delete mode 100644 src/algorithms/cryptography/polynomial-hash/SimplePolynomialHash.js delete mode 100644 src/algorithms/cryptography/polynomial-hash/__test__/PolynomialHash.test.js delete mode 100644 src/algorithms/cryptography/polynomial-hash/__test__/SimplePolynomialHash.test.js delete mode 100644 src/algorithms/cryptography/rail-fence-cipher/README.md delete mode 100644 src/algorithms/cryptography/rail-fence-cipher/__test__/railFenceCipher.test.js delete mode 100644 src/algorithms/cryptography/rail-fence-cipher/railFenceCipher.js delete mode 100644 src/algorithms/graph/articulation-points/README.md delete mode 100644 src/algorithms/graph/articulation-points/__test__/articulationPoints.test.js delete mode 100644 src/algorithms/graph/articulation-points/articulationPoints.js delete mode 100644 src/algorithms/graph/bellman-ford/README.md delete mode 100644 src/algorithms/graph/bellman-ford/__test__/bellmanFord.test.js delete mode 100644 src/algorithms/graph/bellman-ford/bellmanFord.js delete mode 100644 src/algorithms/graph/breadth-first-search/README.md delete mode 100644 src/algorithms/graph/breadth-first-search/__test__/breadthFirstSearch.test.js delete mode 100644 src/algorithms/graph/breadth-first-search/breadthFirstSearch.js delete mode 100644 src/algorithms/graph/bridges/README.md delete mode 100644 src/algorithms/graph/bridges/__test__/graphBridges.test.js delete mode 100644 src/algorithms/graph/bridges/graphBridges.js delete mode 100644 src/algorithms/graph/depth-first-search/README.md delete mode 100644 src/algorithms/graph/depth-first-search/__test__/depthFirstSearch.test.js delete mode 100644 src/algorithms/graph/depth-first-search/depthFirstSearch.js delete mode 100644 src/algorithms/graph/detect-cycle/README.md delete mode 100644 src/algorithms/graph/detect-cycle/__test__/detectDirectedCycle.test.js delete mode 100644 src/algorithms/graph/detect-cycle/__test__/detectUndirectedCycle.test.js delete mode 100644 src/algorithms/graph/detect-cycle/__test__/detectUndirectedCycleUsingDisjointSet.test.js delete mode 100644 src/algorithms/graph/detect-cycle/detectDirectedCycle.js delete mode 100644 src/algorithms/graph/detect-cycle/detectUndirectedCycle.js delete mode 100644 src/algorithms/graph/detect-cycle/detectUndirectedCycleUsingDisjointSet.js delete mode 100644 src/algorithms/graph/dijkstra/README.ko-KR.md delete mode 100644 src/algorithms/graph/dijkstra/README.md delete mode 100644 src/algorithms/graph/dijkstra/__test__/dijkstra.test.js delete mode 100644 src/algorithms/graph/dijkstra/dijkstra.js delete mode 100644 src/algorithms/graph/eulerian-path/README.md delete mode 100644 src/algorithms/graph/eulerian-path/__test__/eulerianPath.test.js delete mode 100644 src/algorithms/graph/eulerian-path/eulerianPath.js delete mode 100644 src/algorithms/graph/floyd-warshall/README.md delete mode 100644 src/algorithms/graph/floyd-warshall/__test__/floydWarshall.test.js delete mode 100644 src/algorithms/graph/floyd-warshall/floydWarshall.js delete mode 100644 src/algorithms/graph/hamiltonian-cycle/README.md delete mode 100644 src/algorithms/graph/hamiltonian-cycle/__test__/hamiltonianCycle.test.js delete mode 100644 src/algorithms/graph/hamiltonian-cycle/hamiltonianCycle.js delete mode 100644 src/algorithms/graph/kruskal/README.ko-KR.md delete mode 100644 src/algorithms/graph/kruskal/README.md delete mode 100644 src/algorithms/graph/kruskal/__test__/kruskal.test.js delete mode 100644 src/algorithms/graph/kruskal/kruskal.js delete mode 100644 src/algorithms/graph/prim/README.md delete mode 100644 src/algorithms/graph/prim/__test__/prim.test.js delete mode 100644 src/algorithms/graph/prim/prim.js delete mode 100644 src/algorithms/graph/strongly-connected-components/README.md delete mode 100644 src/algorithms/graph/strongly-connected-components/__test__/stronglyConnectedComponents.test.js delete mode 100644 src/algorithms/graph/strongly-connected-components/stronglyConnectedComponents.js delete mode 100644 src/algorithms/graph/topological-sorting/README.md delete mode 100644 src/algorithms/graph/topological-sorting/__test__/topologicalSort.test.js delete mode 100644 src/algorithms/graph/topological-sorting/topologicalSort.js delete mode 100644 src/algorithms/graph/travelling-salesman/README.md delete mode 100644 src/algorithms/graph/travelling-salesman/__test__/bfTravellingSalesman.test.js delete mode 100644 src/algorithms/graph/travelling-salesman/bfTravellingSalesman.js delete mode 100644 src/algorithms/image-processing/seam-carving/README.md delete mode 100644 src/algorithms/image-processing/seam-carving/README.ru-RU.md delete mode 100644 src/algorithms/image-processing/seam-carving/__tests__/resizeImageWidth.node.js delete mode 100644 src/algorithms/image-processing/seam-carving/__tests__/test-image-after.png delete mode 100644 src/algorithms/image-processing/seam-carving/__tests__/test-image-before.png delete mode 100644 src/algorithms/image-processing/seam-carving/resizeImageWidth.js delete mode 100644 src/algorithms/image-processing/utils/imageData.js delete mode 100644 src/algorithms/linked-list/reverse-traversal/README.md delete mode 100644 src/algorithms/linked-list/reverse-traversal/README.pt-BR.md delete mode 100644 src/algorithms/linked-list/reverse-traversal/README.zh-CN.md delete mode 100644 src/algorithms/linked-list/reverse-traversal/__test__/reverseTraversal.test.js delete mode 100644 src/algorithms/linked-list/reverse-traversal/reverseTraversal.js delete mode 100644 src/algorithms/linked-list/traversal/README.md delete mode 100644 src/algorithms/linked-list/traversal/README.pt-BR.md delete mode 100644 src/algorithms/linked-list/traversal/README.ru-RU.md delete mode 100644 src/algorithms/linked-list/traversal/README.zh-CN.md delete mode 100644 src/algorithms/linked-list/traversal/__test__/traversal.test.js delete mode 100644 src/algorithms/linked-list/traversal/traversal.js delete mode 100644 src/algorithms/math/binary-floating-point/README.md delete mode 100644 src/algorithms/math/binary-floating-point/__tests__/bitsToFloat.test.js delete mode 100644 src/algorithms/math/binary-floating-point/__tests__/floatAsBinaryString.test.js delete mode 100644 src/algorithms/math/binary-floating-point/bitsToFloat.js delete mode 100644 src/algorithms/math/binary-floating-point/floatAsBinaryString.js delete mode 100644 src/algorithms/math/binary-floating-point/images/02-half-precision-floating-point-number-explained.png delete mode 100644 src/algorithms/math/binary-floating-point/images/03-scientific-notation.png delete mode 100644 src/algorithms/math/binary-floating-point/testCases.js delete mode 100644 src/algorithms/math/bits/README.fr-FR.md delete mode 100644 src/algorithms/math/bits/README.md delete mode 100644 src/algorithms/math/bits/README.zh-CN.md delete mode 100644 src/algorithms/math/bits/__test__/bitLength.test.js delete mode 100644 src/algorithms/math/bits/__test__/bitsDiff.test.js delete mode 100644 src/algorithms/math/bits/__test__/clearBit.test.js delete mode 100644 src/algorithms/math/bits/__test__/countSetBits.test.js delete mode 100644 src/algorithms/math/bits/__test__/divideByTwo.test.js delete mode 100644 src/algorithms/math/bits/__test__/fullAdder.test.js delete mode 100644 src/algorithms/math/bits/__test__/getBit.test.js delete mode 100644 src/algorithms/math/bits/__test__/isEven.test.js delete mode 100644 src/algorithms/math/bits/__test__/isPositive.test.js delete mode 100644 src/algorithms/math/bits/__test__/isPowerOfTwo.test.js delete mode 100644 src/algorithms/math/bits/__test__/multiply.test.js delete mode 100644 src/algorithms/math/bits/__test__/multiplyByTwo.test.js delete mode 100644 src/algorithms/math/bits/__test__/multiplyUnsigned.test.js delete mode 100644 src/algorithms/math/bits/__test__/setBit.test.js delete mode 100644 src/algorithms/math/bits/__test__/switchSign.test.js delete mode 100644 src/algorithms/math/bits/__test__/updateBit.test.js delete mode 100644 src/algorithms/math/bits/bitLength.js delete mode 100644 src/algorithms/math/bits/bitsDiff.js delete mode 100644 src/algorithms/math/bits/clearBit.js delete mode 100644 src/algorithms/math/bits/countSetBits.js delete mode 100644 src/algorithms/math/bits/divideByTwo.js delete mode 100644 src/algorithms/math/bits/fullAdder.js delete mode 100644 src/algorithms/math/bits/getBit.js delete mode 100644 src/algorithms/math/bits/isEven.js delete mode 100644 src/algorithms/math/bits/isPositive.js delete mode 100644 src/algorithms/math/bits/isPowerOfTwo.js delete mode 100644 src/algorithms/math/bits/multiply.js delete mode 100644 src/algorithms/math/bits/multiplyByTwo.js delete mode 100644 src/algorithms/math/bits/multiplyUnsigned.js delete mode 100644 src/algorithms/math/bits/setBit.js delete mode 100644 src/algorithms/math/bits/switchSign.js delete mode 100644 src/algorithms/math/bits/updateBit.js delete mode 100644 src/algorithms/math/complex-number/ComplexNumber.js delete mode 100644 src/algorithms/math/complex-number/README.fr-FR.md delete mode 100644 src/algorithms/math/complex-number/README.md delete mode 100644 src/algorithms/math/complex-number/__test__/ComplexNumber.test.js delete mode 100644 src/algorithms/math/euclidean-algorithm/README.fr-FR.md delete mode 100644 src/algorithms/math/euclidean-algorithm/README.md delete mode 100644 src/algorithms/math/euclidean-algorithm/__test__/euclideanAlgorithm.test.js delete mode 100644 src/algorithms/math/euclidean-algorithm/__test__/euclideanAlgorithmIterative.test.js delete mode 100644 src/algorithms/math/euclidean-algorithm/euclideanAlgorithm.js delete mode 100644 src/algorithms/math/euclidean-algorithm/euclideanAlgorithmIterative.js delete mode 100644 src/algorithms/math/euclidean-distance/README.md delete mode 100644 src/algorithms/math/euclidean-distance/__tests__/euclideanDistance.test.js delete mode 100644 src/algorithms/math/euclidean-distance/euclideanDistance.js delete mode 100644 src/algorithms/math/factorial/README.fr-FR.md delete mode 100644 src/algorithms/math/factorial/README.ka-GE.md delete mode 100644 src/algorithms/math/factorial/README.md delete mode 100644 src/algorithms/math/factorial/README.tr-TR.md delete mode 100644 src/algorithms/math/factorial/README.uk-UA.md delete mode 100644 src/algorithms/math/factorial/README.zh-CN.md delete mode 100644 src/algorithms/math/factorial/__test__/factorial.test.js delete mode 100644 src/algorithms/math/factorial/__test__/factorialRecursive.test.js delete mode 100644 src/algorithms/math/factorial/factorial.js delete mode 100644 src/algorithms/math/factorial/factorialRecursive.js delete mode 100644 src/algorithms/math/fast-powering/README.fr-FR.md delete mode 100644 src/algorithms/math/fast-powering/README.md delete mode 100644 src/algorithms/math/fast-powering/__test__/fastPowering.test.js delete mode 100644 src/algorithms/math/fast-powering/fastPowering.js delete mode 100644 src/algorithms/math/fibonacci/README.fr-FR.md delete mode 100644 src/algorithms/math/fibonacci/README.ka-GE.md delete mode 100644 src/algorithms/math/fibonacci/README.md delete mode 100644 src/algorithms/math/fibonacci/README.zh-CN.md delete mode 100644 src/algorithms/math/fibonacci/__test__/fibonacci.test.js delete mode 100644 src/algorithms/math/fibonacci/__test__/fibonacciNth.test.js delete mode 100644 src/algorithms/math/fibonacci/__test__/fibonacciNthClosedForm.test.js delete mode 100644 src/algorithms/math/fibonacci/fibonacci.js delete mode 100644 src/algorithms/math/fibonacci/fibonacciNth.js delete mode 100644 src/algorithms/math/fibonacci/fibonacciNthClosedForm.js delete mode 100644 src/algorithms/math/fourier-transform/README.fr-FR.md delete mode 100644 src/algorithms/math/fourier-transform/README.md delete mode 100644 src/algorithms/math/fourier-transform/__test__/FourierTester.js delete mode 100644 src/algorithms/math/fourier-transform/__test__/discreteFourierTransform.test.js delete mode 100644 src/algorithms/math/fourier-transform/__test__/fastFourierTransform.test.js delete mode 100644 src/algorithms/math/fourier-transform/__test__/inverseDiscreteFourierTransform.test.js delete mode 100644 src/algorithms/math/fourier-transform/discreteFourierTransform.js delete mode 100644 src/algorithms/math/fourier-transform/fastFourierTransform.js delete mode 100644 src/algorithms/math/fourier-transform/inverseDiscreteFourierTransform.js delete mode 100644 src/algorithms/math/horner-method/README.md delete mode 100644 src/algorithms/math/horner-method/__test__/classicPolynome.test.js delete mode 100644 src/algorithms/math/horner-method/__test__/hornerMethod.test.js delete mode 100644 src/algorithms/math/horner-method/classicPolynome.js delete mode 100644 src/algorithms/math/horner-method/hornerMethod.js delete mode 100644 src/algorithms/math/integer-partition/README.md delete mode 100644 src/algorithms/math/integer-partition/__test__/integerPartition.test.js delete mode 100644 src/algorithms/math/integer-partition/integerPartition.js delete mode 100644 src/algorithms/math/is-power-of-two/README.md delete mode 100644 src/algorithms/math/is-power-of-two/__test__/isPowerOfTwo.test.js delete mode 100644 src/algorithms/math/is-power-of-two/__test__/isPowerOfTwoBitwise.test.js delete mode 100644 src/algorithms/math/is-power-of-two/isPowerOfTwo.js delete mode 100644 src/algorithms/math/is-power-of-two/isPowerOfTwoBitwise.js delete mode 100644 src/algorithms/math/least-common-multiple/README.md delete mode 100644 src/algorithms/math/least-common-multiple/__test__/leastCommonMultiple.test.js delete mode 100644 src/algorithms/math/least-common-multiple/leastCommonMultiple.js delete mode 100644 src/algorithms/math/liu-hui/README.md delete mode 100644 src/algorithms/math/liu-hui/__test__/liuHui.test.js delete mode 100644 src/algorithms/math/liu-hui/liuHui.js delete mode 100644 src/algorithms/math/matrix/Matrix.js delete mode 100644 src/algorithms/math/matrix/README.md delete mode 100644 src/algorithms/math/matrix/__tests__/Matrix.test.js delete mode 100644 src/algorithms/math/pascal-triangle/README.md delete mode 100644 src/algorithms/math/pascal-triangle/__test__/pascalTriangle.test.js delete mode 100644 src/algorithms/math/pascal-triangle/__test__/pascalTriangleRecursive.test.js delete mode 100644 src/algorithms/math/pascal-triangle/pascalTriangle.js delete mode 100644 src/algorithms/math/pascal-triangle/pascalTriangleRecursive.js delete mode 100644 src/algorithms/math/primality-test/README.md delete mode 100644 src/algorithms/math/primality-test/__test__/trialDivision.test.js delete mode 100644 src/algorithms/math/primality-test/trialDivision.js delete mode 100644 src/algorithms/math/prime-factors/README.md delete mode 100644 src/algorithms/math/prime-factors/README.zh-CN.md delete mode 100644 src/algorithms/math/prime-factors/__test__/primeFactors.test.js delete mode 100644 src/algorithms/math/prime-factors/primeFactors.js delete mode 100644 src/algorithms/math/radian/README.md delete mode 100644 src/algorithms/math/radian/__test__/degreeToRadian.test.js delete mode 100644 src/algorithms/math/radian/__test__/radianToDegree.test.js delete mode 100644 src/algorithms/math/radian/degreeToRadian.js delete mode 100644 src/algorithms/math/radian/radianToDegree.js delete mode 100644 src/algorithms/math/sieve-of-eratosthenes/README.md delete mode 100644 src/algorithms/math/sieve-of-eratosthenes/__test__/sieveOfEratosthenes.test.js delete mode 100644 src/algorithms/math/sieve-of-eratosthenes/sieveOfEratosthenes.js delete mode 100644 src/algorithms/math/square-root/README.md delete mode 100644 src/algorithms/math/square-root/__test__/squareRoot.test.js delete mode 100644 src/algorithms/math/square-root/squareRoot.js delete mode 100644 src/algorithms/ml/k-means/README.md delete mode 100644 src/algorithms/ml/k-means/README.pt-BR.md delete mode 100644 src/algorithms/ml/k-means/__test__/kMeans.test.js delete mode 100644 src/algorithms/ml/k-means/kMeans.js delete mode 100644 src/algorithms/ml/knn/README.md delete mode 100644 src/algorithms/ml/knn/README.pt-BR.md delete mode 100644 src/algorithms/ml/knn/__test__/knn.test.js delete mode 100644 src/algorithms/ml/knn/kNN.js delete mode 100644 src/algorithms/search/binary-search/README.es-ES.md delete mode 100644 src/algorithms/search/binary-search/README.md delete mode 100644 src/algorithms/search/binary-search/README.pt-BR.md delete mode 100644 src/algorithms/search/binary-search/__test__/binarySearch.test.js delete mode 100644 src/algorithms/search/binary-search/binarySearch.js delete mode 100644 src/algorithms/search/interpolation-search/README.md delete mode 100644 src/algorithms/search/interpolation-search/__test__/interpolationSearch.test.js delete mode 100644 src/algorithms/search/interpolation-search/interpolationSearch.js delete mode 100644 src/algorithms/search/jump-search/README.md delete mode 100644 src/algorithms/search/jump-search/__test__/jumpSearch.test.js delete mode 100644 src/algorithms/search/jump-search/jumpSearch.js delete mode 100644 src/algorithms/search/linear-search/README.md delete mode 100644 src/algorithms/search/linear-search/README.pt-BR.md delete mode 100644 src/algorithms/search/linear-search/__test__/linearSearch.test.js delete mode 100644 src/algorithms/search/linear-search/linearSearch.js delete mode 100644 src/algorithms/sets/cartesian-product/README.md delete mode 100644 src/algorithms/sets/cartesian-product/__test__/cartesianProduct.test.js delete mode 100644 src/algorithms/sets/cartesian-product/cartesianProduct.js delete mode 100644 src/algorithms/sets/combination-sum/README.md delete mode 100644 src/algorithms/sets/combination-sum/__test__/combinationSum.test.js delete mode 100644 src/algorithms/sets/combination-sum/combinationSum.js delete mode 100644 src/algorithms/sets/combinations/README.md delete mode 100644 src/algorithms/sets/combinations/__test__/combineWithRepetitions.test.js delete mode 100644 src/algorithms/sets/combinations/__test__/combineWithoutRepetitions.test.js delete mode 100644 src/algorithms/sets/combinations/combineWithRepetitions.js delete mode 100644 src/algorithms/sets/combinations/combineWithoutRepetitions.js delete mode 100644 src/algorithms/sets/combinations/images/combinations-overview.jpg delete mode 100644 src/algorithms/sets/combinations/images/combinations-with-repetitions.jpg delete mode 100644 src/algorithms/sets/combinations/images/combinations-without-repetitions.jpg delete mode 100644 src/algorithms/sets/combinations/images/overview.png delete mode 100644 src/algorithms/sets/fisher-yates/README.md delete mode 100644 src/algorithms/sets/fisher-yates/__test__/fisherYates.test.js delete mode 100644 src/algorithms/sets/fisher-yates/fisherYates.js delete mode 100644 src/algorithms/sets/knapsack-problem/Knapsack.js delete mode 100644 src/algorithms/sets/knapsack-problem/KnapsackItem.js delete mode 100644 src/algorithms/sets/knapsack-problem/README.md delete mode 100644 src/algorithms/sets/knapsack-problem/__test__/Knapsack.test.js delete mode 100644 src/algorithms/sets/knapsack-problem/__test__/KnapsackItem.test.js delete mode 100644 src/algorithms/sets/longest-common-subsequence/README.md delete mode 100644 src/algorithms/sets/longest-common-subsequence/__test__/longestCommonSubsequence.test.js delete mode 100644 src/algorithms/sets/longest-common-subsequence/__test__/longestCommonSubsequenceRecursive.test.js delete mode 100644 src/algorithms/sets/longest-common-subsequence/longestCommonSubsequence.js delete mode 100644 src/algorithms/sets/longest-common-subsequence/longestCommonSubsequenceRecursive.js delete mode 100644 src/algorithms/sets/longest-increasing-subsequence/README.md delete mode 100644 src/algorithms/sets/longest-increasing-subsequence/__test__/dpLongestIncreasingSubsequence.test.js delete mode 100644 src/algorithms/sets/longest-increasing-subsequence/dpLongestIncreasingSubsequence.js delete mode 100644 src/algorithms/sets/maximum-subarray/README.md delete mode 100644 src/algorithms/sets/maximum-subarray/__test__/bfMaximumSubarray.test.js delete mode 100644 src/algorithms/sets/maximum-subarray/__test__/dcMaximumSubarraySum.test.js delete mode 100644 src/algorithms/sets/maximum-subarray/__test__/dpMaximumSubarray.test.js delete mode 100644 src/algorithms/sets/maximum-subarray/bfMaximumSubarray.js delete mode 100644 src/algorithms/sets/maximum-subarray/dcMaximumSubarraySum.js delete mode 100644 src/algorithms/sets/maximum-subarray/dpMaximumSubarray.js delete mode 100644 src/algorithms/sets/permutations/README.md delete mode 100644 src/algorithms/sets/permutations/__test__/permutateWithRepetitions.test.js delete mode 100644 src/algorithms/sets/permutations/__test__/permutateWithoutRepetitions.test.js delete mode 100644 src/algorithms/sets/permutations/images/overview.png delete mode 100644 src/algorithms/sets/permutations/images/permutations-overview.jpeg delete mode 100644 src/algorithms/sets/permutations/images/permutations-with-repetitions.jpg delete mode 100644 src/algorithms/sets/permutations/images/permutations-without-repetitions.jpg delete mode 100644 src/algorithms/sets/permutations/permutateWithRepetitions.js delete mode 100644 src/algorithms/sets/permutations/permutateWithoutRepetitions.js delete mode 100644 src/algorithms/sets/power-set/README.md delete mode 100644 src/algorithms/sets/power-set/__test__/btPowerSet.test.js delete mode 100644 src/algorithms/sets/power-set/__test__/bwPowerSet.test.js delete mode 100644 src/algorithms/sets/power-set/__test__/caPowerSet.test.js delete mode 100644 src/algorithms/sets/power-set/btPowerSet.js delete mode 100644 src/algorithms/sets/power-set/bwPowerSet.js delete mode 100644 src/algorithms/sets/power-set/caPowerSet.js delete mode 100644 src/algorithms/sets/shortest-common-supersequence/README.md delete mode 100644 src/algorithms/sets/shortest-common-supersequence/__test__/shortestCommonSupersequence.test.js delete mode 100644 src/algorithms/sets/shortest-common-supersequence/shortestCommonSupersequence.js delete mode 100644 src/algorithms/sorting/Sort.js delete mode 100644 src/algorithms/sorting/SortTester.js delete mode 100644 src/algorithms/sorting/__test__/Sort.test.js delete mode 100644 src/algorithms/sorting/bubble-sort/BubbleSort.js delete mode 100644 src/algorithms/sorting/bubble-sort/README.md delete mode 100644 src/algorithms/sorting/bubble-sort/README.pt-BR.md delete mode 100644 src/algorithms/sorting/bubble-sort/__test__/BubbleSort.test.js delete mode 100644 src/algorithms/sorting/bucket-sort/BucketSort.js delete mode 100644 src/algorithms/sorting/bucket-sort/README.md delete mode 100644 src/algorithms/sorting/bucket-sort/__test__/BucketSort.test.js delete mode 100644 src/algorithms/sorting/bucket-sort/images/bucket_sort_1.png delete mode 100644 src/algorithms/sorting/bucket-sort/images/bucket_sort_2.png delete mode 100644 src/algorithms/sorting/counting-sort/CountingSort.js delete mode 100644 src/algorithms/sorting/counting-sort/README.md delete mode 100644 src/algorithms/sorting/counting-sort/README.pt-br.md delete mode 100644 src/algorithms/sorting/counting-sort/__test__/CountingSort.test.js delete mode 100644 src/algorithms/sorting/heap-sort/HeapSort.js delete mode 100644 src/algorithms/sorting/heap-sort/README.md delete mode 100644 src/algorithms/sorting/heap-sort/README.pt-BR.md delete mode 100644 src/algorithms/sorting/heap-sort/__test__/HeapSort.test.js delete mode 100644 src/algorithms/sorting/insertion-sort/InsertionSort.js delete mode 100644 src/algorithms/sorting/insertion-sort/README.md delete mode 100644 src/algorithms/sorting/insertion-sort/README.pt-BR.md delete mode 100644 src/algorithms/sorting/insertion-sort/__test__/InsertionSort.test.js delete mode 100644 src/algorithms/sorting/merge-sort/MergeSort.js delete mode 100644 src/algorithms/sorting/merge-sort/README.ko-KR.md delete mode 100644 src/algorithms/sorting/merge-sort/README.md delete mode 100644 src/algorithms/sorting/merge-sort/README.pt-BR.md delete mode 100644 src/algorithms/sorting/merge-sort/__test__/MergeSort.test.js delete mode 100644 src/algorithms/sorting/quick-sort/QuickSort.js delete mode 100644 src/algorithms/sorting/quick-sort/QuickSortInPlace.js delete mode 100644 src/algorithms/sorting/quick-sort/README.md delete mode 100644 src/algorithms/sorting/quick-sort/README.pt-BR.md delete mode 100644 src/algorithms/sorting/quick-sort/README.zh-CN.md delete mode 100644 src/algorithms/sorting/quick-sort/__test__/QuickSort.test.js delete mode 100644 src/algorithms/sorting/quick-sort/__test__/QuickSortInPlace.test.js delete mode 100644 src/algorithms/sorting/radix-sort/README.md delete mode 100644 src/algorithms/sorting/radix-sort/README.pt-BR.md delete mode 100644 src/algorithms/sorting/radix-sort/RadixSort.js delete mode 100644 src/algorithms/sorting/radix-sort/__test__/RadixSort.test.js delete mode 100644 src/algorithms/sorting/radix-sort/images/radix-sort.png delete mode 100644 src/algorithms/sorting/selection-sort/README.md delete mode 100644 src/algorithms/sorting/selection-sort/README.pt-BR.md delete mode 100644 src/algorithms/sorting/selection-sort/SelectionSort.js delete mode 100644 src/algorithms/sorting/selection-sort/__test__/SelectionSort.test.js delete mode 100644 src/algorithms/sorting/shell-sort/README.md delete mode 100644 src/algorithms/sorting/shell-sort/README.pt-BR.md delete mode 100644 src/algorithms/sorting/shell-sort/ShellSort.js delete mode 100644 src/algorithms/sorting/shell-sort/__test__/ShellSort.test.js delete mode 100644 src/algorithms/stack/valid-parentheses/README.md delete mode 100644 src/algorithms/stack/valid-parentheses/__test__/validParentheses.test.js delete mode 100644 src/algorithms/stack/valid-parentheses/validParentheses.js delete mode 100644 src/algorithms/statistics/weighted-random/README.md delete mode 100644 src/algorithms/statistics/weighted-random/__test__/weightedRandom.test.js delete mode 100644 src/algorithms/statistics/weighted-random/images/cover.png delete mode 100644 src/algorithms/statistics/weighted-random/weightedRandom.js delete mode 100644 src/algorithms/string/hamming-distance/README.md delete mode 100644 src/algorithms/string/hamming-distance/__test__/hammingDistance.test.js delete mode 100644 src/algorithms/string/hamming-distance/hammingDistance.js delete mode 100644 src/algorithms/string/knuth-morris-pratt/README.md delete mode 100644 src/algorithms/string/knuth-morris-pratt/__test__/knuthMorrisPratt.test.js delete mode 100644 src/algorithms/string/knuth-morris-pratt/knuthMorrisPratt.js delete mode 100644 src/algorithms/string/levenshtein-distance/README.md delete mode 100644 src/algorithms/string/levenshtein-distance/__test__/levenshteinDistance.test.js delete mode 100644 src/algorithms/string/levenshtein-distance/levenshteinDistance.js delete mode 100644 src/algorithms/string/longest-common-substring/README.md delete mode 100644 src/algorithms/string/longest-common-substring/__test__/longestCommonSubstring.test.js delete mode 100644 src/algorithms/string/longest-common-substring/longestCommonSubstring.js delete mode 100644 src/algorithms/string/palindrome/README.md delete mode 100644 src/algorithms/string/palindrome/__test__/isPalindrome.test.js delete mode 100644 src/algorithms/string/palindrome/isPalindrome.js delete mode 100644 src/algorithms/string/rabin-karp/README.md delete mode 100644 src/algorithms/string/rabin-karp/__test__/rabinKarp.test.js delete mode 100644 src/algorithms/string/rabin-karp/rabinKarp.js delete mode 100644 src/algorithms/string/regular-expression-matching/README.md delete mode 100644 src/algorithms/string/regular-expression-matching/__test__/regularExpressionMatching.test.js delete mode 100644 src/algorithms/string/regular-expression-matching/regularExpressionMatching.js delete mode 100644 src/algorithms/string/z-algorithm/README.md delete mode 100644 src/algorithms/string/z-algorithm/__test__/zAlgorithm.test.js delete mode 100644 src/algorithms/string/z-algorithm/zAlgorithm.js delete mode 100644 src/algorithms/tree/breadth-first-search/README.md delete mode 100644 src/algorithms/tree/breadth-first-search/__test__/breadthFirstSearch.test.js delete mode 100644 src/algorithms/tree/breadth-first-search/breadthFirstSearch.js delete mode 100644 src/algorithms/tree/depth-first-search/README.md delete mode 100644 src/algorithms/tree/depth-first-search/__test__/depthFirstSearch.test.js delete mode 100644 src/algorithms/tree/depth-first-search/depthFirstSearch.js delete mode 100644 src/algorithms/uncategorized/best-time-to-buy-sell-stocks/README.md delete mode 100644 src/algorithms/uncategorized/best-time-to-buy-sell-stocks/__tests__/accumulatorBestTimeToBuySellStocks.test.js delete mode 100644 src/algorithms/uncategorized/best-time-to-buy-sell-stocks/__tests__/dpBestTimeToBuySellStocks.test.js delete mode 100644 src/algorithms/uncategorized/best-time-to-buy-sell-stocks/__tests__/dqBestTimeToBuySellStocks.test.js delete mode 100644 src/algorithms/uncategorized/best-time-to-buy-sell-stocks/__tests__/peakvalleyBestTimeToBuySellStocks.test.js delete mode 100644 src/algorithms/uncategorized/best-time-to-buy-sell-stocks/accumulatorBestTimeToBuySellStocks.js delete mode 100644 src/algorithms/uncategorized/best-time-to-buy-sell-stocks/dpBestTimeToBuySellStocks.js delete mode 100644 src/algorithms/uncategorized/best-time-to-buy-sell-stocks/dqBestTimeToBuySellStocks.js delete mode 100644 src/algorithms/uncategorized/best-time-to-buy-sell-stocks/peakvalleyBestTimeToBuySellStocks.js delete mode 100644 src/algorithms/uncategorized/hanoi-tower/README.md delete mode 100644 src/algorithms/uncategorized/hanoi-tower/__test__/hanoiTower.test.js delete mode 100644 src/algorithms/uncategorized/hanoi-tower/hanoiTower.js delete mode 100644 src/algorithms/uncategorized/jump-game/README.md delete mode 100644 src/algorithms/uncategorized/jump-game/__test__/backtrackingJumpGame.test.js delete mode 100644 src/algorithms/uncategorized/jump-game/__test__/dpBottomUpJumpGame.test.js delete mode 100644 src/algorithms/uncategorized/jump-game/__test__/dpTopDownJumpGame.test.js delete mode 100644 src/algorithms/uncategorized/jump-game/__test__/greedyJumpGame.test.js delete mode 100644 src/algorithms/uncategorized/jump-game/backtrackingJumpGame.js delete mode 100644 src/algorithms/uncategorized/jump-game/dpBottomUpJumpGame.js delete mode 100644 src/algorithms/uncategorized/jump-game/dpTopDownJumpGame.js delete mode 100644 src/algorithms/uncategorized/jump-game/greedyJumpGame.js delete mode 100644 src/algorithms/uncategorized/knight-tour/README.md delete mode 100644 src/algorithms/uncategorized/knight-tour/__test__/knightTour.test.js delete mode 100644 src/algorithms/uncategorized/knight-tour/knightTour.js delete mode 100644 src/algorithms/uncategorized/n-queens/QueenPosition.js delete mode 100644 src/algorithms/uncategorized/n-queens/README.md delete mode 100644 src/algorithms/uncategorized/n-queens/__test__/QueensPosition.test.js delete mode 100644 src/algorithms/uncategorized/n-queens/__test__/nQueens.test.js delete mode 100644 src/algorithms/uncategorized/n-queens/__test__/nQueensBitwise.test.js delete mode 100644 src/algorithms/uncategorized/n-queens/nQueens.js delete mode 100644 src/algorithms/uncategorized/n-queens/nQueensBitwise.js delete mode 100644 src/algorithms/uncategorized/rain-terraces/README.md delete mode 100644 src/algorithms/uncategorized/rain-terraces/__test__/bfRainTerraces.test.js delete mode 100644 src/algorithms/uncategorized/rain-terraces/__test__/dpRainTerraces.test.js delete mode 100644 src/algorithms/uncategorized/rain-terraces/bfRainTerraces.js delete mode 100644 src/algorithms/uncategorized/rain-terraces/dpRainTerraces.js delete mode 100644 src/algorithms/uncategorized/recursive-staircase/README.md delete mode 100644 src/algorithms/uncategorized/recursive-staircase/__test__/recursiveStaircaseBF.test.js delete mode 100644 src/algorithms/uncategorized/recursive-staircase/__test__/recursiveStaircaseDP.test.js delete mode 100644 src/algorithms/uncategorized/recursive-staircase/__test__/recursiveStaircaseIT.test.js delete mode 100644 src/algorithms/uncategorized/recursive-staircase/__test__/recursiveStaircaseMEM.test.js delete mode 100644 src/algorithms/uncategorized/recursive-staircase/recursiveStaircaseBF.js delete mode 100644 src/algorithms/uncategorized/recursive-staircase/recursiveStaircaseDP.js delete mode 100644 src/algorithms/uncategorized/recursive-staircase/recursiveStaircaseIT.js delete mode 100644 src/algorithms/uncategorized/recursive-staircase/recursiveStaircaseMEM.js delete mode 100644 src/algorithms/uncategorized/square-matrix-rotation/README.md delete mode 100644 src/algorithms/uncategorized/square-matrix-rotation/__test__/squareMatrixRotation.test.js delete mode 100644 src/algorithms/uncategorized/square-matrix-rotation/squareMatrixRotation.js delete mode 100644 src/algorithms/uncategorized/unique-paths/README.md delete mode 100644 src/algorithms/uncategorized/unique-paths/__test__/btUniquePaths.test.js delete mode 100644 src/algorithms/uncategorized/unique-paths/__test__/dpUniquePaths.test.js delete mode 100644 src/algorithms/uncategorized/unique-paths/__test__/uniquePaths.test.js delete mode 100644 src/algorithms/uncategorized/unique-paths/btUniquePaths.js delete mode 100644 src/algorithms/uncategorized/unique-paths/dpUniquePaths.js delete mode 100644 src/algorithms/uncategorized/unique-paths/uniquePaths.js delete mode 100644 src/data-structures/bloom-filter/BloomFilter.js delete mode 100644 src/data-structures/bloom-filter/README.md delete mode 100644 src/data-structures/bloom-filter/README.pt-BR.md delete mode 100644 src/data-structures/bloom-filter/README.ru-RU.md delete mode 100644 src/data-structures/bloom-filter/README.uk-UA.md delete mode 100644 src/data-structures/bloom-filter/__test__/BloomFilter.test.js delete mode 100644 src/data-structures/disjoint-set/DisjointSet.js delete mode 100644 src/data-structures/disjoint-set/DisjointSetAdhoc.js delete mode 100644 src/data-structures/disjoint-set/DisjointSetItem.js delete mode 100644 src/data-structures/disjoint-set/README.md delete mode 100644 src/data-structures/disjoint-set/README.pt-BR.md delete mode 100644 src/data-structures/disjoint-set/README.ru-RU.md delete mode 100644 src/data-structures/disjoint-set/README.uk-UA.md delete mode 100644 src/data-structures/disjoint-set/__test__/DisjointSet.test.js delete mode 100644 src/data-structures/disjoint-set/__test__/DisjointSetAdhoc.test.js delete mode 100644 src/data-structures/disjoint-set/__test__/DisjointSetItem.test.js delete mode 100644 src/data-structures/doubly-linked-list/DoublyLinkedList.js delete mode 100644 src/data-structures/doubly-linked-list/DoublyLinkedListNode.js delete mode 100644 src/data-structures/doubly-linked-list/README.es-ES.md delete mode 100644 src/data-structures/doubly-linked-list/README.ja-JP.md delete mode 100644 src/data-structures/doubly-linked-list/README.ko-KR.md delete mode 100644 src/data-structures/doubly-linked-list/README.md delete mode 100644 src/data-structures/doubly-linked-list/README.pt-BR.md delete mode 100644 src/data-structures/doubly-linked-list/README.ru-RU.md delete mode 100644 src/data-structures/doubly-linked-list/README.uk-UA.md delete mode 100644 src/data-structures/doubly-linked-list/README.zh-CN.md delete mode 100644 src/data-structures/doubly-linked-list/__test__/DoublyLinkedList.test.js delete mode 100644 src/data-structures/doubly-linked-list/__test__/DoublyLinkedListNode.test.js delete mode 100644 src/data-structures/doubly-linked-list/images/doubly-linked-list.jpeg delete mode 100644 src/data-structures/graph/Graph.js delete mode 100644 src/data-structures/graph/GraphEdge.js delete mode 100644 src/data-structures/graph/GraphVertex.js delete mode 100644 src/data-structures/graph/README.fr-FR.md delete mode 100644 src/data-structures/graph/README.md delete mode 100644 src/data-structures/graph/README.pt-BR.md delete mode 100644 src/data-structures/graph/README.ru-RU.md delete mode 100644 src/data-structures/graph/README.uk-UA.md delete mode 100644 src/data-structures/graph/README.zh-CN.md delete mode 100644 src/data-structures/graph/__test__/Graph.test.js delete mode 100644 src/data-structures/graph/__test__/GraphEdge.test.js delete mode 100644 src/data-structures/graph/__test__/GraphVertex.test.js delete mode 100644 src/data-structures/graph/images/graph.jpeg delete mode 100644 src/data-structures/hash-table/HashTable.js delete mode 100644 src/data-structures/hash-table/README.fr-FR.md delete mode 100644 src/data-structures/hash-table/README.ja-JP.md delete mode 100644 src/data-structures/hash-table/README.ko-KR.md delete mode 100644 src/data-structures/hash-table/README.md delete mode 100644 src/data-structures/hash-table/README.pt-BR.md delete mode 100644 src/data-structures/hash-table/README.ru-RU.md delete mode 100644 src/data-structures/hash-table/README.uk-UA.md delete mode 100644 src/data-structures/hash-table/README.zh-CN.md delete mode 100644 src/data-structures/hash-table/__test__/HashTable.test.js delete mode 100644 src/data-structures/hash-table/images/collision-resolution.jpeg delete mode 100644 src/data-structures/hash-table/images/hash-table.jpeg delete mode 100644 src/data-structures/heap/Heap.js delete mode 100644 src/data-structures/heap/MaxHeap.js delete mode 100644 src/data-structures/heap/MaxHeapAdhoc.js delete mode 100644 src/data-structures/heap/MinHeap.js delete mode 100644 src/data-structures/heap/MinHeapAdhoc.js delete mode 100644 src/data-structures/heap/README.fr-FR.md delete mode 100644 src/data-structures/heap/README.ja-JP.md delete mode 100644 src/data-structures/heap/README.ko-KR.md delete mode 100644 src/data-structures/heap/README.md delete mode 100644 src/data-structures/heap/README.pt-BR.md delete mode 100644 src/data-structures/heap/README.ru-RU.md delete mode 100644 src/data-structures/heap/README.tr-TR.md delete mode 100644 src/data-structures/heap/README.uk-UA.md delete mode 100644 src/data-structures/heap/README.zh-CN.md delete mode 100644 src/data-structures/heap/__test__/Heap.test.js delete mode 100644 src/data-structures/heap/__test__/MaxHeap.test.js delete mode 100644 src/data-structures/heap/__test__/MaxHeapAdhoc.test.js delete mode 100644 src/data-structures/heap/__test__/MinHeap.test.js delete mode 100644 src/data-structures/heap/__test__/MinHeapAdhoc.test.js delete mode 100644 src/data-structures/heap/images/array-representation.jpeg delete mode 100644 src/data-structures/heap/images/max-heap.jpeg delete mode 100644 src/data-structures/heap/images/min-heap.jpeg delete mode 100644 src/data-structures/linked-list/LinkedList.js delete mode 100644 src/data-structures/linked-list/LinkedListNode.js delete mode 100644 src/data-structures/linked-list/README.es-ES.md delete mode 100644 src/data-structures/linked-list/README.ja-JP.md delete mode 100644 src/data-structures/linked-list/README.ko-KR.md delete mode 100644 src/data-structures/linked-list/README.md delete mode 100644 src/data-structures/linked-list/README.pt-BR.md delete mode 100644 src/data-structures/linked-list/README.ru-RU.md delete mode 100644 src/data-structures/linked-list/README.tr-TR.md delete mode 100644 src/data-structures/linked-list/README.uk-UA.md delete mode 100644 src/data-structures/linked-list/README.vi-VN.md delete mode 100644 src/data-structures/linked-list/README.zh-CN.md delete mode 100644 src/data-structures/linked-list/__test__/LinkedList.test.js delete mode 100644 src/data-structures/linked-list/__test__/LinkedListNode.test.js delete mode 100644 src/data-structures/linked-list/images/linked-list.jpeg delete mode 100644 src/data-structures/lru-cache/LRUCache.js delete mode 100644 src/data-structures/lru-cache/LRUCacheOnMap.js delete mode 100644 src/data-structures/lru-cache/README.ko-KR.md delete mode 100644 src/data-structures/lru-cache/README.md delete mode 100644 src/data-structures/lru-cache/__test__/LRUCache.test.js delete mode 100644 src/data-structures/lru-cache/__test__/LRUCacheOnMap.test.js delete mode 100644 src/data-structures/lru-cache/images/lru-cache.jpg delete mode 100644 src/data-structures/priority-queue/PriorityQueue.js delete mode 100644 src/data-structures/priority-queue/README.fr-FR.md delete mode 100644 src/data-structures/priority-queue/README.ja-JP.md delete mode 100644 src/data-structures/priority-queue/README.ko-KR.md delete mode 100644 src/data-structures/priority-queue/README.md delete mode 100644 src/data-structures/priority-queue/README.pt-BR.md delete mode 100644 src/data-structures/priority-queue/README.ru-RU.md delete mode 100644 src/data-structures/priority-queue/README.uk-UA.md delete mode 100644 src/data-structures/priority-queue/README.zh-CN.md delete mode 100644 src/data-structures/priority-queue/__test__/PriorityQueue.test.js delete mode 100644 src/data-structures/queue/Queue.js delete mode 100644 src/data-structures/queue/README.fr-FR.md delete mode 100644 src/data-structures/queue/README.ja-JP.md delete mode 100644 src/data-structures/queue/README.ko-KR.md delete mode 100644 src/data-structures/queue/README.md delete mode 100644 src/data-structures/queue/README.pt-BR.md delete mode 100644 src/data-structures/queue/README.ru-RU.md delete mode 100644 src/data-structures/queue/README.uk-UA.md delete mode 100644 src/data-structures/queue/README.vi-VN.md delete mode 100644 src/data-structures/queue/README.zh-CN.md delete mode 100644 src/data-structures/queue/__test__/Queue.test.js delete mode 100644 src/data-structures/queue/images/queue.jpeg delete mode 100644 src/data-structures/stack/README.fr-FR.md delete mode 100644 src/data-structures/stack/README.ja-JP.md delete mode 100644 src/data-structures/stack/README.ko-KR.md delete mode 100644 src/data-structures/stack/README.md delete mode 100644 src/data-structures/stack/README.pt-BR.md delete mode 100644 src/data-structures/stack/README.ru-RU.md delete mode 100644 src/data-structures/stack/README.uk-UA.md delete mode 100644 src/data-structures/stack/README.vi-VN.md delete mode 100644 src/data-structures/stack/README.zh-CN.md delete mode 100644 src/data-structures/stack/Stack.js delete mode 100644 src/data-structures/stack/__test__/Stack.test.js delete mode 100644 src/data-structures/stack/images/stack.jpeg delete mode 100644 src/data-structures/stack/images/stack.jpg delete mode 100644 src/data-structures/tree/BinaryTreeNode.js delete mode 100644 src/data-structures/tree/README.md delete mode 100644 src/data-structures/tree/README.pt-BR.md delete mode 100644 src/data-structures/tree/README.zh-CN.md delete mode 100644 src/data-structures/tree/__test__/BinaryTreeNode.test.js delete mode 100644 src/data-structures/tree/avl-tree/AvlTree.js delete mode 100644 src/data-structures/tree/avl-tree/README.md delete mode 100644 src/data-structures/tree/avl-tree/README.pt-BR.md delete mode 100644 src/data-structures/tree/avl-tree/__test__/AvlTRee.test.js delete mode 100644 src/data-structures/tree/binary-search-tree/BinarySearchTree.js delete mode 100644 src/data-structures/tree/binary-search-tree/BinarySearchTreeNode.js delete mode 100644 src/data-structures/tree/binary-search-tree/README.md delete mode 100644 src/data-structures/tree/binary-search-tree/README.pt-BR.md delete mode 100644 src/data-structures/tree/binary-search-tree/__test__/BinarySearchTree.test.js delete mode 100644 src/data-structures/tree/binary-search-tree/__test__/BinarySearchTreeNode.test.js delete mode 100644 src/data-structures/tree/binary-search-tree/images/binary-search-tree.jpg delete mode 100644 src/data-structures/tree/fenwick-tree/FenwickTree.js delete mode 100644 src/data-structures/tree/fenwick-tree/README.md delete mode 100644 src/data-structures/tree/fenwick-tree/README.pt-BR.md delete mode 100644 src/data-structures/tree/fenwick-tree/__test__/FenwickTree.test.js delete mode 100644 src/data-structures/tree/images/tree.jpeg delete mode 100644 src/data-structures/tree/red-black-tree/README.md delete mode 100644 src/data-structures/tree/red-black-tree/README.pt-BR.md delete mode 100644 src/data-structures/tree/red-black-tree/RedBlackTree.js delete mode 100644 src/data-structures/tree/red-black-tree/__test__/RedBlackTree.test.js delete mode 100644 src/data-structures/tree/segment-tree/README.md delete mode 100644 src/data-structures/tree/segment-tree/README.pt-BR.md delete mode 100644 src/data-structures/tree/segment-tree/SegmentTree.js delete mode 100644 src/data-structures/tree/segment-tree/__test__/SegmentTree.test.js delete mode 100644 src/data-structures/trie/README.ko-KO.md delete mode 100644 src/data-structures/trie/README.md delete mode 100644 src/data-structures/trie/README.pt-BR.md delete mode 100644 src/data-structures/trie/README.ru-RU.md delete mode 100644 src/data-structures/trie/README.uk-UA.md delete mode 100644 src/data-structures/trie/README.zh-CN.md delete mode 100644 src/data-structures/trie/Trie.js delete mode 100644 src/data-structures/trie/TrieNode.js delete mode 100644 src/data-structures/trie/__test__/Trie.test.js delete mode 100644 src/data-structures/trie/__test__/TrieNode.test.js delete mode 100644 src/data-structures/trie/images/trie.jpg delete mode 100644 src/playground/README.md delete mode 100644 src/playground/__test__/playground.test.js delete mode 100644 src/playground/playground.js delete mode 100644 src/utils/comparator/Comparator.js delete mode 100644 src/utils/comparator/__test__/Comparator.test.js diff --git a/.babelrc b/.babelrc deleted file mode 100644 index 1320b9a327..0000000000 --- a/.babelrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "presets": ["@babel/preset-env"] -} diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 086af2d930..0000000000 --- a/.editorconfig +++ /dev/null @@ -1,11 +0,0 @@ -# @see: https://editorconfig.org/ -root = true - -[*] -end_of_line = lf -insert_final_newline = true -charset = utf-8 -indent_style = space -indent_size = 2 -trim_trailing_whitespace = true -quote_type = single diff --git a/.eslintrc b/.eslintrc deleted file mode 100644 index 88af3ecf32..0000000000 --- a/.eslintrc +++ /dev/null @@ -1,21 +0,0 @@ -{ - "root": true, - "extends": "airbnb", - "plugins": ["jest"], - "env": { - "jest/globals": true - }, - "rules": { - "no-bitwise": "off", - "no-lonely-if": "off", - "class-methods-use-this": "off", - "arrow-body-style": "off", - "no-loop-func": "off" - }, - "ignorePatterns": ["*.md", "*.png", "*.jpeg", "*.jpg"], - "settings": { - "react": { - "version": "18.2.0" - } - } -} diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 713f7330977dacbcf6fab1cd4a9fe8de2029cf45..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42 rcmezWPm4i;p@boop#n(SG9)sT0_l99SSpar0gB`>q%rU^a4`S?;*to7 diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml deleted file mode 100644 index deda41e7d6..0000000000 --- a/.github/FUNDING.yml +++ /dev/null @@ -1,3 +0,0 @@ -# @see: https://docs.github.com/en/github/administering-a-repository/displaying-a-sponsor-button-in-your-repository -github: trekhleb -patreon: trekhleb diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml deleted file mode 100644 index e007b6c910..0000000000 --- a/.github/workflows/CI.yml +++ /dev/null @@ -1,35 +0,0 @@ -name: CI - -on: - push: - branches: [ master ] - pull_request: - branches: [ master ] - -jobs: - test: - runs-on: ubuntu-latest - strategy: - matrix: - node-version: [ 16.x ] - - steps: - - name: Checkout repository - uses: actions/checkout@v2 - - - name: Setup Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v1 - with: - node-version: ${{ matrix.node-version }} - - - name: Install dependencies - run: npm i - - - name: Run linting - run: npm run lint - - - name: Run tests - run: npm run coverage - - - name: Upload coverage to Codecov - uses: codecov/codecov-action@v1 diff --git a/.gitignore b/.gitignore deleted file mode 100644 index e128b69788..0000000000 --- a/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -node_modules -.idea -coverage -.vscode -.DS_Store diff --git a/.husky/.gitignore b/.husky/.gitignore deleted file mode 100644 index 31354ec138..0000000000 --- a/.husky/.gitignore +++ /dev/null @@ -1 +0,0 @@ -_ diff --git a/.husky/pre-commit b/.husky/pre-commit deleted file mode 100755 index 598a5dceaa..0000000000 --- a/.husky/pre-commit +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh -. "$(dirname "$0")/_/husky.sh" - -npm run lint -# npm run test diff --git a/.npmrc b/.npmrc deleted file mode 100644 index b6f27f1359..0000000000 --- a/.npmrc +++ /dev/null @@ -1 +0,0 @@ -engine-strict=true diff --git a/.nvmrc b/.nvmrc deleted file mode 100644 index 7fd023741b..0000000000 --- a/.nvmrc +++ /dev/null @@ -1 +0,0 @@ -v16.15.0 diff --git a/BACKERS.md b/BACKERS.md deleted file mode 100644 index a244d3bed3..0000000000 --- a/BACKERS.md +++ /dev/null @@ -1,48 +0,0 @@ -# Project Backers - -> You may support this project via ❤️️ [GitHub](https://github.com/sponsors/trekhleb) or ❤️️ [Patreon](https://www.patreon.com/trekhleb). - -## `O(2ⁿ)` Backers - -`null` - -## `O(n²)` Backers - -`null` - -## `O(n×log(n))` Backers - -`null` - - - - diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md deleted file mode 100644 index f809c8b0f5..0000000000 --- a/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,40 +0,0 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. - -## Our Standards - -Examples of behavior that contributes to creating a positive environment include: - -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -* The use of sexualized language or imagery and unwelcome sexual attention or advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a professional setting - -## Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. - -## Scope - -This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] - -[homepage]: http://contributor-covenant.org -[version]: http://contributor-covenant.org/version/1/4/ diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index 8f6bf07913..0000000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,25 +0,0 @@ -## Contributing - -**General Rules** - -- As much as possible, try to follow the existing format of markdown and code. -- Don't forget to run `npm run lint` and `npm test` before submitting pull requests. -- Make sure that **100%** of your code is covered by tests. - -**Contributing New Translation** - -- Create new `README.xx-XX.md` file with translation alongside with -main `README.md` file where `xx-XX` is [locale and country/region codes](http://www.lingoes.net/en/translator/langcode.htm). -For example `en-US`, `zh-CN`, `zh-TW`, `ko-KR` etc. -- You may also translate all other sub-folders by creating -related `README.xx-XX.md` files in each of them. - -**Contributing New Algorithms** - -- Make your pull requests to be **specific** and **focused**. Instead of -contributing "several sorting algorithms" all at once contribute them all -one by one separately (i.e. one pull request for "Quick Sort", another one -for "Heap Sort" and so on). -- Provide **README.md** for each of the algorithms **with explanations** of -the algorithm and **with links** to further readings. -- Describe what you do in code using **comments**. diff --git a/LICENSE b/LICENSE deleted file mode 100644 index e7885bd74b..0000000000 --- a/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2018 Oleksii Trekhleb - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/README.ar-AR.md b/README.ar-AR.md deleted file mode 100644 index 2ff0baddbd..0000000000 --- a/README.ar-AR.md +++ /dev/null @@ -1,328 +0,0 @@ -# جافا سكريبت خوارزميات وهياكل البيانات - -[![Build Status](https://travis-ci.org/trekhleb/javascript-algorithms.svg?branch=master)](https://travis-ci.org/trekhleb/javascript-algorithms) -[![codecov](https://codecov.io/gh/trekhleb/javascript-algorithms/branch/master/graph/badge.svg)](https://codecov.io/gh/trekhleb/javascript-algorithms) - -تحتوي هذه المقالة على أمثلة عديدة تستند إلى الخوارزميات الشائعة وهياكل البيانات في الجافا سكريبت. - -كل خوارزمية وهياكل البيانات لها برنامج README منفصل خاص بها -مع التفسيرات والروابط ذات الصلة لمزيد من القراءة (بما في ذلك تلك -إلى مقاطع فيديو YouTube). - - -_اقرأ هذا في لغات أخرى:_ -[_简体中文_](README.zh-CN.md), -[_繁體中文_](README.zh-TW.md), -[_한국어_](README.ko-KR.md), -[_日本語_](README.ja-JP.md), -[_Polski_](README.pl-PL.md), -[_Français_](README.fr-FR.md), -[_Español_](README.es-ES.md), -[_Português_](README.pt-BR.md), -[_Русский_](README.ru-RU.md), -[_Türk_](README.tr-TR.md), -[_Italiana_](README.it-IT.md), -[_Tiếng Việt_](README.vi-VN.md), -[_Deutsch_](README.de-DE.md), -[_Uzbek_](README.uz-UZ.md) -[_עברית_](README.he-IL.md) - - ☝ ملاحضة هذا المشروع مخصص للاستخدام لأغراض التعلم والبحث -فقط ، و ** ليست ** معدة للاستخدام في **الإنتاج** - -## هياكل البيانات - -هياكل البيانات هي طريقة خاصة لتنظيم البيانات وتخزينها في جهاز الكمبيوتر بحيث -يمكن الوصول إليها وتعديلها بكفاءة. بتعبير أدق ، هيكل البيانات هو مجموعة من البيانات -القيم والعلاقات فيما بينها والوظائف أو العمليات التي يمكن تطبيقها عليها -البيانات. - - -`B` - مبتدئ, `A` - المتقدمة - -* `B` [قائمة مرتبطة](src/data-structures/linked-list) -* `B` [قائمة مرتبطة بشكل مضاعف](src/data-structures/doubly-linked-list) -* `B` [طابور, Queue](src/data-structures/queue) -* `B` [كومة](src/data-structures/stack) -* `B` [جدول التجزئة](src/data-structures/hash-table) -* `B` [كومة](src/data-structures/heap) -الحد الأقصى والحد الأدنى من إصدارات الكومة -* `B` [طابور الأولوية](src/data-structures/priority-queue) -* `A` [تري](src/data-structures/trie) -* `A` [شجرة](src/data-structures/tree) - * `A` [شجرة البحث الثنائية](src/data-structures/tree/binary-search-tree) - * `A` [شجرة AVL](src/data-structures/tree/avl-tree) - * `A` [شجرة الأحمر والأسود](src/data-structures/tree/red-black-tree) - * `A` [شجرة القطعة](src/data-structures/tree/segment-tree) - مع أمثلة على استفسارات النطاق الأدنى / الأقصى / المجموع - * `A` [شجرة فينويك](src/data-structures/tree/fenwick-tree) (شجرة ثنائية مفهرسة) -* `A` [Graph](src/data-structures/graph) (كلاهما موجه وغير موجه) -* `A` [مجموعة منفصلة](src/data-structures/disjoint-set) -* `A` [مرشح بلوم](src/data-structures/bloom-filter) - - -## الخوارزميات - -الخوارزمية هي تحديد لا لبس فيه لكيفية حل فئة من المشاكل. أنه -مجموعة من القواعد التي تحدد بدقة تسلسل العمليات. - -`B` - مبتدئ ، `A` - متقدم - - -### الخوارزميات حسب الموضوع - -* **رياضيات** - * `B` [معالجة البت](src/algorithms/math/bits) - * `B` [عاملي](src/algorithms/math/factorial) - * `B` [رقم فيبوناتشي](src/algorithms/math/fibonacci) - الإصدارات الكلاسيكية والمغلقة - * `B` [اختبار البدائية](src/algorithms/math/primality-test) (طريقة تقسيم المحاكمة) - * `B` [الخوارزمية الإقليدية](src/algorithms/math/euclidean-algorithm) - احسب القاسم المشترك الأكبر (GCD) - * `B` [أقل مضاعف مشترك](src/algorithms/math/least-common-multiple) (LCM) - * `B` [منخل إراتوستينس](src/algorithms/math/sieve-of-eratosthenes) - إيجاد جميع الأعداد الأولية حتى أي حد معين - * `B` [هي قوة اثنين](src/algorithms/math/is-power-of-two) - تحقق مما إذا كان الرقم هو قوة اثنين (الخوارزميات الساذجة والبتية) - * `B` [مثلث باسكال](src/algorithms/math/pascal-triangle) - * `B` [عدد مركب](src/algorithms/math/complex-number) - الأعداد المركبة والعمليات الأساسية معهم - * `B` [راديان ودرجة](src/algorithms/math/radian) - راديان لدرجة التحويل والعكس - * `B` [تشغيل سريع](src/algorithms/math/fast-powering) - * `B` [طريقة هورنر](src/algorithms/math/horner-method) - تقييم متعدد الحدود - * `A` [قسم صحيح](src/algorithms/math/integer-partition) - * `A` [الجذر التربيعي](src/algorithms/math/square-root) - طريقة نيوتن - * `A` [خوارزمية ليو هوي π](src/algorithms/math/liu-hui) - π حسابات تقريبية على أساس N-gons - * `A` [تحويل فورييه المنفصل](src/algorithms/math/fourier-transform) - حلل وظيفة الوقت (إشارة) في الترددات التي يتكون منها -* **مجموعات** - * `B` [المنتج الديكارتي](src/algorithms/sets/cartesian-product) - منتج من مجموعات متعددة - * `B` [فيشر ييتس شافل](src/algorithms/sets/fisher-yates) - التقليب العشوائي لتسلسل محدود - * `A` [مجموعة الطاقة](src/algorithms/sets/power-set) - جميع المجموعات الفرعية للمجموعة (حلول البت والتتبع التراجعي) - * `A` [التباديل](src/algorithms/sets/permutations) (مع وبدون التكرار) - * `A` [مجموعات](src/algorithms/sets/combinations) (مع وبدون التكرار) - * `A` [أطول نتيجة مشتركة](src/algorithms/sets/longest-common-subsequence) (LCS) - * `A` [أطول زيادة متتالية](src/algorithms/sets/longest-increasing-subsequence) - * `A` [أقصر تسلسل فائق مشترك](src/algorithms/sets/shortest-common-supersequence) (SCS) - * `A` [مشكلة حقيبة الظهر](src/algorithms/sets/knapsack-problem) - "0/1" و "غير منضم" - * `A` [الحد الأقصى من Subarray](src/algorithms/sets/maximum-subarray) -إصدارات "القوة الغاشمة" و "البرمجة الديناميكية" (كادان) - * `A` [مجموع الجمع](src/algorithms/sets/combination-sum) - ابحث عن جميع التركيبات التي تشكل مبلغًا محددًا -* **سلاسل** - * `B` [مسافة هامنج](src/algorithms/string/hamming-distance) - عدد المواقف التي تختلف فيها الرموز - * `A` [المسافة ليفنشتاين](src/algorithms/string/levenshtein-distance) - الحد الأدنى لمسافة التحرير بين تسلسلين - * `A` [خوارزمية كنوث - موريس - برات](src/algorithms/string/knuth-morris-pratt) (خوارزمية KMP) - بحث السلسلة الفرعية (مطابقة النمط) - * `A` [خوارزمية Z](src/algorithms/string/z-algorithm) - بحث سلسلة فرعية (مطابقة النمط) - * `A` [خوارزمية رابين كارب](src/algorithms/string/rabin-karp) - بحث السلسلة الفرعية - * `A` [أطول سلسلة فرعية مشتركة](src/algorithms/string/longest-common-substring) - * `A` [مطابقة التعبير العادي](src/algorithms/string/regular-expression-matching) -* **عمليات البحث** - * `B` [البحث الخطي](src/algorithms/search/linear-search) - * `B` [بحث سريع](src/algorithms/search/jump-search) (أو حظر البحث) - ابحث في مصفوفة مرتبة - * `B` [بحث ثنائي](src/algorithms/search/binary-search) - البحث في مجموعة مرتبة - * `B` [بحث الاستيفاء](src/algorithms/search/interpolation-search) - البحث في مجموعة مرتبة موزعة بشكل موحد - -* **فرز** - * `B` [Bubble Sort](src/algorithms/sorting/bubble-sort) - * `B` [Selection Sort](src/algorithms/sorting/selection-sort) - * `B` [Insertion Sort](src/algorithms/sorting/insertion-sort) - * `B` [Heap Sort](src/algorithms/sorting/heap-sort) - * `B` [Merge Sort](src/algorithms/sorting/merge-sort) - * `B` [Quicksort](src/algorithms/sorting/quick-sort) - عمليات التنفيذ في المكان وغير في المكان - * `B` [Shellsort](src/algorithms/sorting/shell-sort) - * `B` [Counting Sort](src/algorithms/sorting/counting-sort) - * `B` [Radix Sort](src/algorithms/sorting/radix-sort) -* **القوائم المرتبطة** - * `B` [Straight Traversal](src/algorithms/linked-list/traversal) - * `B` [Reverse Traversal](src/algorithms/linked-list/reverse-traversal) -* **الأشجار** - * `B` [Depth-First Search](src/algorithms/tree/depth-first-search) (DFS) - * `B` [Breadth-First Search](src/algorithms/tree/breadth-first-search) (BFS) -* **الرسوم البيانية** - * `B` [Depth-First Search](src/algorithms/graph/depth-first-search) (DFS) - * `B` [Breadth-First Search](src/algorithms/graph/breadth-first-search) (BFS) - * `B` [Kruskal’s Algorithm](src/algorithms/graph/kruskal) - إيجاد الحد الأدنى من شجرة الامتداد (MST) للرسم البياني الموزون غير الموجه - * `A` [Dijkstra Algorithm](src/algorithms/graph/dijkstra) -إيجاد أقصر المسارات لجميع رؤوس الرسم البياني من رأس واحد - * `A` [Bellman-Ford Algorithm](src/algorithms/graph/bellman-ford) - إيجاد أقصر المسارات لجميع رؤوس الرسم البياني من رأس واحد - * `A` [Floyd-Warshall Algorithm](src/algorithms/graph/floyd-warshall) - إيجاد أقصر المسارات بين جميع أزواج الرؤوس - * `A` [Detect Cycle](src/algorithms/graph/detect-cycle) - لكل من الرسوم البيانية الموجهة وغير الموجهة (الإصدارات القائمة على DFS و Disjoint Set) - * `A` [Prim’s Algorithm](src/algorithms/graph/prim) - إيجاد الحد الأدنى من شجرة الامتداد (MST) للرسم البياني الموزون غير الموجه - * `A` [Topological Sorting](src/algorithms/graph/topological-sorting) - طريقة البحث العمق الأول (DFS) - * `A` [Articulation Points](src/algorithms/graph/articulation-points) - خوارزمية تارجان (تعتمد على DFS) - * `A` [Bridges](src/algorithms/graph/bridges) - خوارزمية تعتمد على DFS - * `A` [Eulerian Path and Eulerian Circuit](src/algorithms/graph/eulerian-path) - خوارزمية فلوري - قم بزيارة كل حافة مرة واحدة بالضبط - * `A` [Hamiltonian Cycle](src/algorithms/graph/hamiltonian-cycle) - قم بزيارة كل قمة مرة واحدة بالضبط - * `A` [Strongly Connected Components](src/algorithms/graph/strongly-connected-components) - خوارزمية Kosaraju - * `A` [Travelling Salesman Problem](src/algorithms/graph/travelling-salesman) - أقصر طريق ممكن يزور كل مدينة ويعود إلى المدينة الأصلية -* **التشفير - * `B` [Polynomial Hash](src/algorithms/cryptography/polynomial-hash) - المتداول دالة التجزئة على أساس متعدد الحدود - * `B` [Caesar Cipher](src/algorithms/cryptography/caesar-cipher) - استبدال بسيط للشفرات -* **التعلم الالي** - * `B` [NanoNeuron](https://github.com/trekhleb/nano-neuron) - 7 وظائف JS بسيطة توضح كيف يمكن للآلات أن تتعلم بالفعل (الانتشار إلى الأمام / الخلف) -* **غير مصنف** - * `B` [Tower of Hanoi](src/algorithms/uncategorized/hanoi-tower) - * `B` [Square Matrix Rotation](src/algorithms/uncategorized/square-matrix-rotation) - خوارزمية في المكان - * `B` [Jump Game](src/algorithms/uncategorized/jump-game) - التراجع ، البرمجة الديناميكية (من أعلى إلى أسفل + من أسفل إلى أعلى) والأمثلة الجشعة - * `B` [Unique Paths](src/algorithms/uncategorized/unique-paths) - التراجع والبرمجة الديناميكية والأمثلة القائمة على مثلث باسكال - * `B` [Rain Terraces](src/algorithms/uncategorized/rain-terraces) - محاصرة مشكلة مياه الأمطار (البرمجة الديناميكية وإصدارات القوة الغاشمة) - * `B` [Recursive Staircase](src/algorithms/uncategorized/recursive-staircase) - احسب عدد الطرق للوصول إلى القمة (4 حلول) - * `A` [N-Queens Problem](src/algorithms/uncategorized/n-queens) - * `A` [Knight's Tour](src/algorithms/uncategorized/knight-tour) - -### الخوارزميات حسب النموذج - -النموذج الحسابي هو طريقة أو نهج عام يكمن وراء تصميم الفصل -من الخوارزميات. إنه تجريد أعلى من مفهوم الخوارزمية ، تمامًا مثل -الخوارزمية هي تجريد أعلى من برنامج الكمبيوتر. - -* **القوة الغاشمة** - انظر في جميع الاحتمالات وحدد الحل الأفضل - * `B` [Linear Search](src/algorithms/search/linear-search) - * `B` [Rain Terraces](src/algorithms/uncategorized/rain-terraces) - محاصرة مشكلة مياه الأمطار - * `B` [Recursive Staircase](src/algorithms/uncategorized/recursive-staircase) - احسب عدد الطرق للوصول إلى القمة - * `A` [Maximum Subarray](src/algorithms/sets/maximum-subarray) - * `A` [Travelling Salesman Problem](src/algorithms/graph/travelling-salesman) - أقصر طريق ممكن يزور كل مدينة ويعود إلى المدينة الأصلية - * `A` [Discrete Fourier Transform](src/algorithms/math/fourier-transform) - حلل وظيفة الوقت (إشارة) في الترددات التي يتكون منها -* **جشع** - اختر الخيار الأفضل في الوقت الحالي ، دون أي اعتبار للمستقبل - * `B` [Jump Game](src/algorithms/uncategorized/jump-game) - * `A` [Unbound Knapsack Problem](src/algorithms/sets/knapsack-problem) - * `A` [Dijkstra Algorithm](src/algorithms/graph/dijkstra) - إيجاد أقصر مسار لجميع رؤوس الرسم البياني - * `A` [Prim’s Algorithm](src/algorithms/graph/prim) - إيجاد الحد الأدنى من شجرة الامتداد (MST) للرسم البياني الموزون غير الموجه - * `A` [Kruskal’s Algorithm](src/algorithms/graph/kruskal) - إيجاد الحد الأدنى من شجرة الامتداد (MST) للرسم البياني الموزون غير الموجه -* **فرق تسد** - قسّم المشكلة إلى أجزاء أصغر ثم حل تلك الأجزاء - * `B` [Binary Search](src/algorithms/search/binary-search) - * `B` [Tower of Hanoi](src/algorithms/uncategorized/hanoi-tower) - * `B` [Pascal's Triangle](src/algorithms/math/pascal-triangle) - * `B` [Euclidean Algorithm](src/algorithms/math/euclidean-algorithm) - حساب القاسم المشترك الأكبر (GCD) - * `B` [Merge Sort](src/algorithms/sorting/merge-sort) - * `B` [Quicksort](src/algorithms/sorting/quick-sort) - * `B` [Tree Depth-First Search](src/algorithms/tree/depth-first-search) (DFS) - * `B` [Graph Depth-First Search](src/algorithms/graph/depth-first-search) (DFS) - * `B` [Jump Game](src/algorithms/uncategorized/jump-game) - * `B` [Fast Powering](src/algorithms/math/fast-powering) - * `A` [Permutations](src/algorithms/sets/permutations) (مع التكرار وبدونه) - * `A` [Combinations](src/algorithms/sets/combinations) (مع التكرار وبدونه) -* **البرمجة الديناميكية** - بناء حل باستخدام الحلول الفرعية التي تم العثور عليها مسبقًا - * `B` [Fibonacci Number](src/algorithms/math/fibonacci) - * `B` [Jump Game](src/algorithms/uncategorized/jump-game) - * `B` [Unique Paths](src/algorithms/uncategorized/unique-paths) - * `B` [Rain Terraces](src/algorithms/uncategorized/rain-terraces) - محاصرة مشكلة مياه الأمطار - * `B` [Recursive Staircase](src/algorithms/uncategorized/recursive-staircase) - احسب عدد الطرق للوصول إلى القمة - * `A` [Levenshtein Distance](src/algorithms/string/levenshtein-distance) - الحد الأدنى لمسافة التحرير بين تسلسلين - * `A` [Longest Common Subsequence](src/algorithms/sets/longest-common-subsequence) (LCS) - * `A` [Longest Common Substring](src/algorithms/string/longest-common-substring) - * `A` [Longest Increasing Subsequence](src/algorithms/sets/longest-increasing-subsequence) - * `A` [Shortest Common Supersequence](src/algorithms/sets/shortest-common-supersequence) - * `A` [0/1 Knapsack Problem](src/algorithms/sets/knapsack-problem) - * `A` [Integer Partition](src/algorithms/math/integer-partition) - * `A` [Maximum Subarray](src/algorithms/sets/maximum-subarray) - * `A` [Bellman-Ford Algorithm](src/algorithms/graph/bellman-ford) - إيجاد أقصر مسار لجميع رؤوس الرسم البياني - * `A` [Floyd-Warshall Algorithm](src/algorithms/graph/floyd-warshall) - إيجاد أقصر المسارات بين جميع أزواج الرؤوس - * `A` [Regular Expression Matching](src/algorithms/string/regular-expression-matching) -* **التراجع** - على غرار القوة الغاشمة ، حاول إنشاء جميع الحلول الممكنة ، ولكن في كل مرة تقوم فيها بإنشاء الحل التالي الذي تختبره -إذا استوفت جميع الشروط ، وعندها فقط استمر في إنشاء الحلول اللاحقة. خلاف ذلك ، تراجع ، واذهب إلى -طريق مختلف لإيجاد حل. عادةً ما يتم استخدام اجتياز DFS لمساحة الدولة. - * `B` [Jump Game](src/algorithms/uncategorized/jump-game) - * `B` [Unique Paths](src/algorithms/uncategorized/unique-paths) - * `B` [Power Set](src/algorithms/sets/power-set) - جميع المجموعات الفرعية للمجموعة - * `A` [Hamiltonian Cycle](src/algorithms/graph/hamiltonian-cycle) - قم بزيارة كل قمة مرة واحدة بالضبط - * `A` [N-Queens Problem](src/algorithms/uncategorized/n-queens) - * `A` [Knight's Tour](src/algorithms/uncategorized/knight-tour) - * `A` [Combination Sum](src/algorithms/sets/combination-sum) - ابحث عن جميع التركيبات التي تشكل مبلغًا محددًا - - -* ** Branch & Bound ** - تذكر الحل الأقل تكلفة الموجود في كل مرحلة من مراحل التراجع -البحث ، واستخدام تكلفة الحل الأقل تكلفة الموجود حتى الآن بحد أدنى لتكلفة -الحل الأقل تكلفة للمشكلة ، من أجل تجاهل الحلول الجزئية بتكاليف أكبر من -تم العثور على حل بأقل تكلفة حتى الآن. اجتياز BFS عادةً بالاشتراك مع اجتياز DFS لمساحة الحالة -يتم استخدام الشجرة. - -## كيفية استخدام هذا المستودع - -**تثبيت كل التبعيات** -``` -npm install -``` - -**قم بتشغيل ESLint** - -قد ترغب في تشغيله للتحقق من جودة الكود. - -``` -npm run lint -``` - -**قم بإجراء جميع الاختبارات** -``` -npm test -``` - -**قم بإجراء الاختبارات بالاسم** -``` -npm test -- 'LinkedList' -``` - -**ملعب** - -يمكنك اللعب بهياكل البيانات والخوارزميات في ملف `. /src/playground/playground.js` والكتابة -اختبارات لها في `./src/playground/__test__/playground.test.js`. - -ثم قم ببساطة بتشغيل الأمر التالي لاختبار ما إذا كان كود الملعب الخاص بك يعمل كما هو متوقع: - -``` -npm test -- 'playground' -``` - -## معلومات مفيدة - -### المراجع - -[▶ هياكل البيانات والخوارزميات على موقع يوتيوب](https://www.youtube.com/playlist?list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) - -### Big O Notation - -* يتم استخدام **Big O notation** لتصنيف الخوارزميات وفقًا لكيفية نمو متطلبات وقت التشغيل أو المساحة مع نمو حجم الإدخال. -قد تجد في الرسم البياني أدناه الأوامر الأكثر شيوعًا لنمو الخوارزميات المحددة في تBig O notation. - -![Big O graphs](./assets/big-o-graph.png) - -مصدر: [Big O Cheat Sheet](http://bigocheatsheet.com/). - -فيما يلي قائمة ببعض رموز Big O notation الأكثر استخدامًا ومقارنات أدائها مقابل أحجام مختلفة من بيانات الإدخال. - -| Big O Notation | Computations for 10 elements | Computations for 100 elements | Computations for 1000 elements | -| -------------- | ---------------------------- | ----------------------------- | ------------------------------- | -| **O(1)** | 1 | 1 | 1 | -| **O(log N)** | 3 | 6 | 9 | -| **O(N)** | 10 | 100 | 1000 | -| **O(N log N)** | 30 | 600 | 9000 | -| **O(N^2)** | 100 | 10000 | 1000000 | -| **O(2^N)** | 1024 | 1.26e+29 | 1.07e+301 | -| **O(N!)** | 3628800 | 9.3e+157 | 4.02e+2567 | - -### تعقيد عمليات بنية البيانات - -| Data Structure | Access | Search | Insertion | Deletion | Comments | -| ----------------------- | :-------: | :-------: | :-------: | :-------: | :-------- | -| **Array** | 1 | n | n | n | | -| **Stack** | n | n | 1 | 1 | | -| **Queue** | n | n | 1 | 1 | | -| **Linked List** | n | n | 1 | n | | -| **Hash Table** | - | n | n | n |في حالة وجود تكاليف دالة تجزئة مثالية ستكون O (1)| -| **Binary Search Tree** | n | n | n | n | في حالة توازن تكاليف الشجرة ستكون O (log (n))| -| **B-Tree** | log(n) | log(n) | log(n) | log(n) | | -| **Red-Black Tree** | log(n) | log(n) | log(n) | log(n) | | -| **AVL Tree** | log(n) | log(n) | log(n) | log(n) | | -| **Bloom Filter** | - | 1 | 1 | - |الإيجابيات الكاذبة ممكنة أثناء البحث| - -### تعقيد خوارزميات فرز الصفيف - -| Name | Best | Average | Worst | Memory | Stable | Comments | -| --------------------- | :-------------: | :-----------------: | :-----------------: | :-------: | :-------: | :-------- | -| **Bubble sort** | n | n2 | n2 | 1 | نعم | | -| **Insertion sort** | n | n2 | n2 | 1 | نعم | | -| **Selection sort** | n2 | n2 | n2 | 1 | لا | | -| **Heap sort** | n log(n) | n log(n) | n log(n) | 1 | لا | | -| **Merge sort** | n log(n) | n log(n) | n log(n) | n | نعم | | -| **Quick sort** | n log(n) | n log(n) | n2 | log(n) | No | عادةً ما يتم إجراء الفرز السريع في مكانه مع مساحة مكدس O (log (n))| -| **Shell sort** | n log(n) | depends on gap sequence | n (log(n))2 | 1 | لا | | -| **Counting sort** | n + r | n + r | n + r | n + r | Yes |r - أكبر رقم في المجموعة| -| **Radix sort** | n * k | n * k | n * k | n + k | Yes | ك - طول أطول مفتاح | - -## مؤيدو المشروع - -> يمكنك دعم هذا المشروع عبر ❤️️ [GitHub](https://github.com/sponsors/trekhleb) أو ❤️️ [Patreon](https://www.patreon.com/trekhleb). - -[الناس الذين يدعمون هذا المشروع](https://github.com/trekhleb/javascript-algorithms/blob/master/BACKERS.md) `∑ = 0` - -> ℹ️ A few more [projects](https://trekhleb.dev/projects/) and [articles](https://trekhleb.dev/blog/) about JavaScript and algorithms on [trekhleb.dev](https://trekhleb.dev) diff --git a/README.de-DE.md b/README.de-DE.md deleted file mode 100644 index 019e7d6b39..0000000000 --- a/README.de-DE.md +++ /dev/null @@ -1,338 +0,0 @@ -# JavaScript-Algorithmen und Datenstrukturen - -[![CI](https://github.com/trekhleb/javascript-algorithms/workflows/CI/badge.svg)](https://github.com/trekhleb/javascript-algorithms/actions?query=workflow%3ACI+branch%3Amaster) -[![codecov](https://codecov.io/gh/trekhleb/javascript-algorithms/branch/master/graph/badge.svg)](https://codecov.io/gh/trekhleb/javascript-algorithms) - -Dieses Repository enthält JavaScript Beispiele für viele -gängige Algorithmen und Datenstrukturen. - -Jeder Algorithmus und jede Datenstruktur hat eine eigene README -mit zugehörigen Erklärungen und weiterführenden Links (einschließlich zu YouTube-Videos). - -_Lies dies in anderen Sprachen:_ -[_English_](https://github.com/trekhleb/javascript-algorithms/) -[_简体中文_](README.zh-CN.md), -[_繁體中文_](README.zh-TW.md), -[_한국어_](README.ko-KR.md), -[_日本語_](README.ja-JP.md), -[_Polski_](README.pl-PL.md), -[_Français_](README.fr-FR.md), -[_Español_](README.es-ES.md), -[_Português_](README.pt-BR.md), -[_Русский_](README.ru-RU.md), -[_Türk_](README.tr-TR.md), -[_Italiana_](README.it-IT.md), -[_Bahasa Indonesia_](README.id-ID.md), -[_Українська_](README.uk-UA.md), -[_Arabic_](README.ar-AR.md), -[_Uzbek_](README.uz-UZ.md) -[_עברית_](README.he-IL.md) - -_☝ Beachte, dass dieses Projekt nur für Lern- und Forschungszwecke gedacht ist und **nicht** für den produktiven Einsatz verwendet werden soll_ - -## Datenstrukturen - -Eine Datenstruktur ist eine bestimmte Art und Weise, Daten in einem Computer so zu organisieren und zu speichern, dass sie -effizient erreicht und verändert werden können. Genauer gesagt, ist eine Datenstruktur eine Sammlung von Werten, -den Beziehungen zwischen ihnen und den Funktionen oder Operationen, die auf die Daten angewendet werden können. - -`B` - Anfänger:innen, `A` - Fortgeschrittene - -* `B` [Verkettete Liste (Linked List)](src/data-structures/linked-list) -* `B` [Doppelt verkettete Liste (Doubly Linked List)](src/data-structures/doubly-linked-list) -* `B` [Warteschlange (Queue)](src/data-structures/queue) -* `B` [Stapelspeicher (Stack)](src/data-structures/stack) -* `B` [Hashtabelle (Hash Table)](src/data-structures/hash-table) -* `B` [Heap-Algorithmus (Heap)](src/data-structures/heap) - max und min Heap-Versionen -* `B` [Vorrangwarteschlange (Priority Queue)](src/data-structures/priority-queue) -* `A` [Trie (Trie)](src/data-structures/trie) -* `A` [Baum (Tree)](src/data-structures/tree) - * `A` [Binärer Suchbaum (Binary Search Tree)](src/data-structures/tree/binary-search-tree) - * `A` [AVL-Baum (AVL Tree)](src/data-structures/tree/avl-tree) - * `A` [Rot-Schwarz-Baum (Red-Black Tree)](src/data-structures/tree/red-black-tree) - * `A` [Segment-Baum (Segment Tree)](src/data-structures/tree/segment-tree) - mit Min/Max/Summenbereich-Abfrage Beispiel - * `A` [Fenwick Baum (Fenwick Tree)](src/data-structures/tree/fenwick-tree) (Binär indizierter Baum / Binary Indexed Tree) -* `A` [Graph (Graph)](src/data-structures/graph) (sowohl gerichtet als auch ungerichtet) -* `A` [Union-Find-Struktur (Disjoint Set)](src/data-structures/disjoint-set) -* `A` [Bloomfilter (Bloom Filter)](src/data-structures/bloom-filter) - -## Algorithmen - -Ein Algorithmus ist eine eindeutige Spezifikation, wie eine Klasse von Problemen zu lösen ist. Er besteht -aus einem Satz von Regeln, die eine Abfolge von Operationen genau definieren. - -`B` - Anfänger:innen, `A` - Fortgeschrittene - -### Algorithmen nach Thema - -* **Mathe** - * `B` [Bitmanipulation (Bit Manipulation)](src/algorithms/math/bits) - Bits setzen/lesen/aktualisieren/löschen, Multiplikation/Division durch zwei negieren usw.. - * `B` [Faktoriell (Factorial)](src/algorithms/math/factorial) - * `B` [Fibonacci-Zahl (Fibonacci Number)](src/algorithms/math/fibonacci) - Klassische und geschlossene Version - * `B` [Primfaktoren (Prime Factors)](src/algorithms/math/prime-factors) - Auffinden von Primfaktoren und deren Zählung mit Hilfe des Satz von Hardy-Ramanujan (Hardy-Ramanujan's theorem) - * `B` [Primzahl-Test (Primality Test)](src/algorithms/math/primality-test) (Probedivision / trial division method) - * `B` [Euklidischer Algorithmus (Euclidean Algorithm)](src/algorithms/math/euclidean-algorithm) - Berechnen des größten gemeinsamen Teilers (ggT) - * `B` [Kleinstes gemeinsames Vielfaches (Least Common Multiple)](src/algorithms/math/least-common-multiple) (kgV) - * `B` [Sieb des Eratosthenes (Sieve of Eratosthenes)](src/algorithms/math/sieve-of-eratosthenes) - Finden aller Primzahlen bis zu einer bestimmten Grenze - * `B` [Power of two (Is Power of Two)](src/algorithms/math/is-power-of-two) - Prüft, ob die Zahl eine Zweierpotenz ist (naive und bitweise Algorithmen) - * `B` [Pascalsches Dreieck (Pascal's Triangle)](src/algorithms/math/pascal-triangle) - * `B` [Komplexe Zahlen (Complex Number)](src/algorithms/math/complex-number) - Komplexe Zahlen und Grundoperationen mit ihnen - * `B` [Bogenmaß & Grad (Radian & Degree)](src/algorithms/math/radian) - Umrechnung von Bogenmaß in Grad und zurück - * `B` [Fast Powering Algorithmus (Fast Powering)](src/algorithms/math/fast-powering) - * `B` [Horner-Schema (Horner's method)](src/algorithms/math/horner-method) - Polynomauswertung - * `B` [Matrizen (Matrices)](src/algorithms/math/matrix) - Matrizen und grundlegende Matrixoperationen (Multiplikation, Transposition usw.) - * `B` [Euklidischer Abstand (Euclidean Distance)](src/algorithms/math/euclidean-distance) - Abstand zwischen zwei Punkten/Vektoren/Matrizen - * `A` [Ganzzahlige Partitionierung (Integer Partition)](src/algorithms/math/integer-partition) - * `A` [Quadratwurzel (Square Root)](src/algorithms/math/square-root) - Newtonverfahren (Newton's method) - * `A` [Liu Hui π Algorithmus (Liu Hui π Algorithm)](src/algorithms/math/liu-hui) - Näherungsweise π-Berechnungen auf Basis von N-gons - * `A` [Diskrete Fourier-Transformation (Discrete Fourier Transform)](src/algorithms/math/fourier-transform) - Eine Funktion der Zeit (ein Signal) in die Frequenzen zerlegen, aus denen sie sich zusammensetzt -* **Sets** - * `B` [Kartesisches Produkt (Cartesian Product)](src/algorithms/sets/cartesian-product) - Produkt aus mehreren Mengen - * `B` [Fisher-Yates-Verfahren (Fisher–Yates Shuffle)](src/algorithms/sets/fisher-yates) - Zufällige Permutation einer endlichen Folge - * `A` [Potenzmenge (Power Set)](src/algorithms/sets/power-set) - Alle Teilmengen einer Menge (Bitweise und Rücksetzverfahren Lösungen(backtracking solutions)) - * `A` [Permutation (Permutations)](src/algorithms/sets/permutations) (mit und ohne Wiederholungen) - * `A` [Kombination (Combinations)](src/algorithms/sets/combinations) (mit und ohne Wiederholungen) - * `A` [Problem der längsten gemeinsamen Teilsequenz (Longest Common Subsequence)](src/algorithms/sets/longest-common-subsequence) (LCS) - * `A` [Längste gemeinsame Teilsequenz (Longest Increasing Subsequence)](src/algorithms/sets/longest-increasing-subsequence) - * `A` [Der kürzeste gemeinsame String (Shortest Common Supersequence)](src/algorithms/sets/shortest-common-supersequence) (SCS) - * `A` [Rucksackproblem (Knapsack Problem)](src/algorithms/sets/knapsack-problem) - "0/1" und "Ungebunden" - * `A` [Das Maximum-Subarray Problem (Maximum Subarray)](src/algorithms/sets/maximum-subarray) - "Brute-Force-Methode" und "Dynamische Programmierung" (Kadane' Algorithmus) - * `A` [Kombinationssumme (Combination Sum)](src/algorithms/sets/combination-sum) - Alle Kombinationen finden, die eine bestimmte Summe bilden -* **Zeichenketten (Strings)** - * `B` [Hamming-Abstand (Hamming Distance)](src/algorithms/string/hamming-distance) - Anzahl der Positionen, an denen die Symbole unterschiedlich sind - * `A` [Levenshtein-Distanz (Levenshtein Distance)](src/algorithms/string/levenshtein-distance) - Minimaler Editierabstand zwischen zwei Sequenzen - * `A` [Knuth-Morris-Pratt-Algorithmus (Knuth–Morris–Pratt Algorithm)](src/algorithms/string/knuth-morris-pratt) (KMP Algorithmus) - Teilstringsuche (Mustervergleich / Pattern Matching) - * `A` [Z-Algorithmus (Z Algorithm)](src/algorithms/string/z-algorithm) - Teilstringsuche (Mustervergleich / Pattern Matching) - * `A` [Rabin-Karp-Algorithmus (Rabin Karp Algorithm)](src/algorithms/string/rabin-karp) - Teilstringsuche - * `A` [Längstes häufiges Teilzeichenfolgenproblem (Longest Common Substring)](src/algorithms/string/longest-common-substring) - * `A` [Regulärer Ausdruck (Regular Expression Matching)](src/algorithms/string/regular-expression-matching) -* **Suchen** - * `B` [Lineare Suche (Linear Search)](src/algorithms/search/linear-search) - * `B` [Sprungsuche (Jump Search)](src/algorithms/search/jump-search) (oder Blocksuche) - Suche im sortierten Array - * `B` [Binäre Suche (Binary Search)](src/algorithms/search/binary-search) - Suche in einem sortierten Array - * `B` [Interpolationssuche (Interpolation Search)](src/algorithms/search/interpolation-search) - Suche in gleichmäßig verteilt sortiertem Array -* **Sortieren** - * `B` [Bubblesort (Bubble Sort)](src/algorithms/sorting/bubble-sort) - * `B` [Selectionsort (Selection Sort)](src/algorithms/sorting/selection-sort) - * `B` [Einfügesortierenmethode (Insertion Sort)](src/algorithms/sorting/insertion-sort) - * `B` [Haldensortierung (Heap Sort)](src/algorithms/sorting/heap-sort) - * `B` [Mergesort (Merge Sort)](src/algorithms/sorting/merge-sort) - * `B` [Quicksort (Quicksort)](src/algorithms/sorting/quick-sort) - in-place und non-in-place Implementierungen - * `B` [Shellsort (Shellsort)](src/algorithms/sorting/shell-sort) - * `B` [Countingsort (Counting Sort)](src/algorithms/sorting/counting-sort) - * `B` [Fachverteilen (Radix Sort)](src/algorithms/sorting/radix-sort) -* **Verkettete Liste (Linked List)** - * `B` [Gerade Traversierung (Straight Traversal)](src/algorithms/linked-list/traversal) - * `B` [Umgekehrte Traversierung (Reverse Traversal)](src/algorithms/linked-list/reverse-traversal) -* **Bäume** - * `B` [Tiefensuche (Depth-First Search)](src/algorithms/tree/depth-first-search) (DFS) - * `B` [Breitensuche (Breadth-First Search)](src/algorithms/tree/breadth-first-search) (BFS) -* **Graphen** - * `B` [Tiefensuche (Depth-First Search)](src/algorithms/graph/depth-first-search) (DFS) - * `B` [Breitensuche (Breadth-First Search)](src/algorithms/graph/breadth-first-search) (BFS) - * `B` [Algorithmus von Kruskal (Kruskal’s Algorithm)](src/algorithms/graph/kruskal) - Finden des Spannbaum (Minimum Spanning Tree / MST) für einen gewichteten ungerichteten Graphen - * `A` [Dijkstra-Algorithmus (Dijkstra Algorithm)](src/algorithms/graph/dijkstra) - Finden der kürzesten Wege zu allen Knoten des Graphen von einem einzelnen Knotenpunkt aus - * `A` [Bellman-Ford-Algorithmus (Bellman-Ford Algorithm)](src/algorithms/graph/bellman-ford) - Finden der kürzesten Wege zu allen Knoten des Graphen von einem einzelnen Knotenpunkt aus - * `A` [Algorithmus von Floyd und Warshall (Floyd-Warshall Algorithm)](src/algorithms/graph/floyd-warshall) - Die kürzesten Wege zwischen allen Knotenpaaren finden - * `A` [Zykluserkennung (Detect Cycle)](src/algorithms/graph/detect-cycle) - Sowohl für gerichtete als auch für ungerichtete Graphen (DFS- und Disjoint-Set-basierte Versionen) - * `A` [Algorithmus von Prim (Prim’s Algorithm)](src/algorithms/graph/prim) - Finden des Spannbaums (Minimum Spanning Tree / MST) für einen gewichteten ungerichteten Graphen - * `A` [Topologische Sortierung (Topological Sorting)](src/algorithms/graph/topological-sorting) - DFS-Verfahren - * `A` [Artikulationspunkte (Articulation Points)](src/algorithms/graph/articulation-points) - Algorithmus von Tarjan (Tarjan's algorithm) (DFS basiert) - * `A` [Brücke (Bridges)](src/algorithms/graph/bridges) - DFS-basierter Algorithmus - * `A` [Eulerkreisproblem (Eulerian Path and Eulerian Circuit)](src/algorithms/graph/eulerian-path) - Algorithmus von Fleury (Fleury's algorithm) - Jede Kante genau einmal durchlaufen. - * `A` [Hamiltonkreisproblem (Hamiltonian Cycle)](src/algorithms/graph/hamiltonian-cycle) - Jeden Eckpunkt genau einmal durchlaufen. - * `A` [Starke Zusammenhangskomponente (Strongly Connected Components)](src/algorithms/graph/strongly-connected-components) - Kosarajus Algorithmus - * `A` [Problem des Handlungsreisenden (Travelling Salesman Problem)](src/algorithms/graph/travelling-salesman) - Kürzestmögliche Route, die jede Stadt besucht und zur Ausgangsstadt zurückkehrt -* **Kryptographie** - * `B` [Polynomiale Streuwertfunktion(Polynomial Hash)](src/algorithms/cryptography/polynomial-hash) - Rollierende Streuwert-Funktion basierend auf Polynom - * `B` [Schienenzaun Chiffre (Rail Fence Cipher)](src/algorithms/cryptography/rail-fence-cipher) - Ein Transpositionsalgorithmus zur Verschlüsselung von Nachrichten - * `B` [Caesar-Verschlüsselung (Caesar Cipher)](src/algorithms/cryptography/caesar-cipher) - Einfache Substitutions-Chiffre - * `B` [Hill-Chiffre (Hill Cipher)](src/algorithms/cryptography/hill-cipher) - Substitutionschiffre basierend auf linearer Algebra -* **Maschinelles Lernen** - * `B` [Künstliches Neuron (NanoNeuron)](https://github.com/trekhleb/nano-neuron) - 7 einfache JS-Funktionen, die veranschaulichen, wie Maschinen tatsächlich lernen können (Vorwärts-/Rückwärtspropagation) - * `B` [Nächste-Nachbarn-Klassifikation (k-NN)](src/algorithms/ml/knn) - k-nächste-Nachbarn-Algorithmus - * `B` [k-Means (k-Means)](src/algorithms/ml/k-means) - k-Means-Algorithmus -* **Image Processing** - * `B` [Inhaltsabhängige Bildverzerrung (Seam Carving)](src/algorithms/image-processing/seam-carving) - Algorithmus zur inhaltsabhängigen Bildgrößenänderung -* **Unkategorisiert** - * `B` [Türme von Hanoi (Tower of Hanoi)](src/algorithms/uncategorized/hanoi-tower) - * `B` [Rotationsmatrix (Square Matrix Rotation)](src/algorithms/uncategorized/square-matrix-rotation) - In-Place-Algorithmus - * `B` [Jump Game (Jump Game)](src/algorithms/uncategorized/jump-game) - Backtracking, dynamische Programmierung (Top-down + Bottom-up) und gierige Beispiele - * `B` [Eindeutige Pfade (Unique Paths)](src/algorithms/uncategorized/unique-paths) - Backtracking, dynamische Programmierung und Pascalsches Dreieck basierte Beispiele - * `B` [Regenterrassen (Rain Terraces)](src/algorithms/uncategorized/rain-terraces) - Auffangproblem für Regenwasser (trapping rain water problem) (dynamische Programmierung und Brute-Force-Versionen) - * `B` [Rekursive Treppe (Recursive Staircase)](src/algorithms/uncategorized/recursive-staircase) - Zählen der Anzahl der Wege, die nach oben führen (4 Lösungen) - * `B` [Beste Zeit zum Kaufen/Verkaufen von Aktien (Best Time To Buy Sell Stocks)](src/algorithms/uncategorized/best-time-to-buy-sell-stocks) - Beispiele für "Teile und Herrsche" und Beispiele für den One-Pass-Algorithmus - * `A` [Damenproblem (N-Queens Problem)](src/algorithms/uncategorized/n-queens) - * `A` [Springerproblem (Knight's Tour)](src/algorithms/uncategorized/knight-tour) - -### Algorithmen nach Paradigma - -Ein algorithmisches Paradigma ist eine generische Methode oder ein Ansatz, der dem Entwurf einer Klasse von Algorithmen zugrunde liegt. Es ist eine Abstraktion, die höher ist als der Begriff des Algorithmus. Genauso wie ein Algorithmus eine Abstraktion ist, die höher ist als ein Computerprogramm. - -* **Brachiale Gewalt (Brute Force)** - schaut sich alle Möglichkeiten an und wählt die beste Lösung aus - * `B` [Lineare Suche (Linear Search)](src/algorithms/search/linear-search) - * `B` [Regenterrassen (Rain Terraces)](src/algorithms/uncategorized/rain-terraces) - Auffangproblem für Regenwasser (trapping rain water problem) (dynamische Programmierung und Brute-Force-Versionen) - * `B` [Rekursive Treppe (Recursive Staircase)](src/algorithms/uncategorized/recursive-staircase) - Zählen der Anzahl der Wege, die nach oben führen (4 Lösungen) - * `A` [Das Maximum-Subarray Problem (Maximum Subarray)](src/algorithms/sets/maximum-subarray) - * `A` [Problem des Handlungsreisenden (Travelling Salesman Problem)](src/algorithms/graph/travelling-salesman) - Kürzestmögliche Route, die jede Stadt besucht und zur Ausgangsstadt zurückkehrt - * `A` [Diskrete Fourier-Transformation (Discrete Fourier Transform)](src/algorithms/math/fourier-transform) - Eine Funktion der Zeit (ein Signal) in die Frequenzen zerlegen, aus denen sie sich zusammensetzt -* **Gierig (Greedy)** - Wählt die beste Option zum aktuellen Zeitpunkt, ohne Rücksicht auf die Zukunft - * `B` [Jump Game (Jump Game)](src/algorithms/uncategorized/jump-game) - * `A` [Rucksackproblem (Unbound Knapsack Problem)](src/algorithms/sets/knapsack-problem) - * `A` [Dijkstra-Algorithmus (Dijkstra Algorithm)](src/algorithms/graph/dijkstra) - Finden der kürzesten Wege zu allen Knoten des Graphen von einem einzelnen Knotenpunkt aus - * `A` [Algorithmus von Prim (Prim’s Algorithm)](src/algorithms/graph/prim) - Finden des Spannbaums (Minimum Spanning Tree / MST) für einen gewichteten ungerichteten Graphen - * `B` [Algorithmus von Kruskal (Kruskal’s Algorithm)](src/algorithms/graph/kruskal) - Finden des Spannbaum (Minimum Spanning Tree / MST) für einen gewichteten ungerichteten Graphen -* **Teile und herrsche** - Das Problem in kleinere Teile aufteilen und diese Teile dann lösen - * `B` [Binäre Suche (Binary Search)](src/algorithms/search/binary-search) - * `B` [Türme von Hanoi (Tower of Hanoi)](src/algorithms/uncategorized/hanoi-tower) - * `B` [Pascalsches Dreieck (Pascal's Triangle)](src/algorithms/math/pascal-triangle) - * `B` [Euklidischer Algorithmus (Euclidean Algorithm)](src/algorithms/math/euclidean-algorithm) - calculate the Greatest Common Divisor (GCD) - * `B` [Mergesort (Merge Sort)](src/algorithms/sorting/merge-sort) - * `B` [Quicksort (Quicksort)](src/algorithms/sorting/quick-sort) - * `B` [Tiefensuche (Depth-First Search)](src/algorithms/tree/depth-first-search) (DFS) - * `B` [Breitensuche (Breadth-First Search)](src/algorithms/graph/depth-first-search) (DFS) - * `B` [Matrizen (Matrices)](src/algorithms/math/matrix) - Matrizen und grundlegende Matrixoperationen (Multiplikation, Transposition usw.) - * `B` [Jump Game (Jump Game)](src/algorithms/uncategorized/jump-game) - * `B` [Fast Powering Algorithmus (Fast Powering)](src/algorithms/math/fast-powering) - * `B` [Beste Zeit zum Kaufen/Verkaufen von Aktien (Best Time To Buy Sell Stocks)](src/algorithms/uncategorized/best-time-to-buy-sell-stocks) - Beispiele für "Teile und Herrsche" und Beispiele für den One-Pass-Algorithmus - * `A` [Permutation (Permutations)](src/algorithms/sets/permutations) (mit und ohne Wiederholungen) - * `A` [Kombination (Combinations)](src/algorithms/sets/combinations) (mit und ohne Wiederholungen) -* **Dynamische Programmierung** - Eine Lösung aus zuvor gefundenen Teillösungen aufbauen - * `B` [Fibonacci-Zahl (Fibonacci Number)](src/algorithms/math/fibonacci) - * `B` [Jump Game (Jump Game)](src/algorithms/uncategorized/jump-game) - * `B` [Eindeutige Pfade (Unique Paths)](src/algorithms/uncategorized/unique-paths) - * `B` [Regenterrassen (Rain Terraces)](src/algorithms/uncategorized/rain-terraces) - Auffangproblem für Regenwasser (trapping rain water problem) (dynamische Programmierung und Brute-Force-Versionen) - * `B` [Rekursive Treppe (Recursive Staircase)](src/algorithms/uncategorized/recursive-staircase) - Zählen der Anzahl der Wege, die nach oben führen (4 Lösungen) - * `B` [Inhaltsabhängige Bildverzerrung (Seam Carving)](src/algorithms/image-processing/seam-carving) - Algorithmus zur inhaltsabhängigen Bildgrößenänderung - * `A` [Levenshtein-Distanz (Levenshtein Distance)](src/algorithms/string/levenshtein-distance) - Minimaler Editierabstand zwischen zwei Sequenzen - * `A` [Problem der längsten gemeinsamen Teilsequenz (Longest Common Subsequence)](src/algorithms/sets/longest-common-subsequence) (LCS) - * `A` [Längstes häufiges Teilzeichenfolgenproblem (Longest Common Substring)](src/algorithms/string/longest-common-substring) - * `A` [Längste gemeinsame Teilsequenz (Longest Increasing Subsequence)](src/algorithms/sets/longest-increasing-subsequence) - * `A` [Der kürzeste gemeinsame String (Shortest Common Supersequence)](src/algorithms/sets/shortest-common-supersequence) - * `A` [Rucksackproblem (0/1 Knapsack Problem)](src/algorithms/sets/knapsack-problem) - * `A` [Ganzzahlige Partitionierung (Integer Partition)](src/algorithms/math/integer-partition) - * `A` [Das Maximum-Subarray Problem (Maximum Subarray)](src/algorithms/sets/maximum-subarray) - * `A` [Bellman-Ford-Algorithmus (Bellman-Ford Algorithm)](src/algorithms/graph/bellman-ford) - Finden der kürzesten Wege zu allen Knoten des Graphen von einem einzelnen Knotenpunkt aus - * `A` [Algorithmus von Floyd und Warshall (Floyd-Warshall Algorithm)](src/algorithms/graph/floyd-warshall) - Die kürzesten Wege zwischen allen Knotenpaaren finden - * `A` [Regulärer Ausdruck (Regular Expression Matching)](src/algorithms/string/regular-expression-matching) -* **Zurückverfolgung** - Ähnlich wie bei Brute-Force versuchen Sie, alle möglichen Lösungen zu generieren, aber jedes Mal, wenn Sie die nächste Lösung generieren, testen Sie, ob sie alle Bedingungen erfüllt, und fahren erst dann mit der Generierung weiterer Lösungen fort. Andernfalls gehen Sie zurück und nehmen einen anderen Weg, um eine Lösung zu finden. Normalerweise wird das DFS-Traversal des Zustandsraums verwendet. - * `B` [Jump Game (Jump Game)](src/algorithms/uncategorized/jump-game) - * `B` [Eindeutige Pfade (Unique Paths)](src/algorithms/uncategorized/unique-paths) - * `A` [Potenzmenge (Power Set)](src/algorithms/sets/power-set) - Alle Teilmengen einer Menge - * `A` [Hamiltonkreisproblem (Hamiltonian Cycle)](src/algorithms/graph/hamiltonian-cycle) - Jeden Eckpunkt genau einmal durchlaufen. - * `A` [Damenproblem (N-Queens Problem)](src/algorithms/uncategorized/n-queens) - * `A` [Springerproblem (Knight's Tour)](src/algorithms/uncategorized/knight-tour) - * `A` [Kombinationssumme (Combination Sum)](src/algorithms/sets/combination-sum) - Alle Kombinationen finden, die eine bestimmte Summe bilden -* **Verzweigung & Bindung** - Merkt sich die Lösung mit den niedrigsten Kosten, die in jeder Phase der Backtracking-Suche gefunden wurde, und verwendet die Kosten der bisher gefundenen Lösung mit den niedrigsten Kosten als untere Schranke für die Kosten einer Lösung des Problems mit den geringsten Kosten, um Teillösungen zu verwerfen, deren Kosten größer sind als die der bisher gefundenen Lösung mit den niedrigsten Kosten. Normalerweise wird das BFS-Traversal in Kombination mit dem DFS-Traversal des Zustandsraumbaums verwendet. - -## So verwendest du dieses Repository - -**Alle Abhängigkeiten installieren** - -``` -npm install -``` - -**ESLint ausführen** - -You may want to run it to check code quality. - -``` -npm run lint -``` - -**Alle Tests ausführen** - -``` -npm test -``` - -**Tests nach Namen ausführen** - -``` -npm test -- 'LinkedList' -``` - -**Fehlerbehebung** - -Falls das Linting oder Testen fehlschlägt, versuche, den Ordner "node_modules" zu löschen und die npm-Pakete neu zu installieren: - -``` -rm -rf ./node_modules -npm i -``` - -**Spielwiese** - -Du kannst mit Datenstrukturen und Algorithmen in der Datei `./src/playground/playground.js` herumspielen und -dir in dieser Datei Tests schreiben `./src/playground/__test__/playground.test.js`. - -Dann führe einfach folgenden Befehl aus, um zu testen, ob dein Spielwiesencode wie erwartet funktioniert: - -``` -npm test -- 'playground' -``` - -## Nützliche Informationen - -### Referenzen - -[▶ Datenstrukturen und Algorithmen auf YouTube(Englisch)](https://www.youtube.com/playlist?list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) - -### O-Notation (_Big O Notation_) - -Die O-Notation wird verwendet, um Algorithmen danach zu klassifizieren, wie ihre Laufzeit oder ihr Platzbedarf mit zunehmender Eingabegröße wächst. In der folgenden Tabelle finden Sie die häufigsten Wachstumsordnungen von Algorithmen, die in Big-O-Notation angegeben sind. - -![O-Notation Graphen](./assets/big-o-graph.png) - -Quelle: [Big O Cheat Sheet](http://bigocheatsheet.com/). - -Nachfolgend finden Sie eine Liste einiger der am häufigsten verwendeten Big O-Notationen und deren Leistungsvergleiche für unterschiedliche Größen der Eingabedaten. - -| Big O Notation | Berechnungen für 10 Elemente | Berechnungen für 100 Elemente | Berechnungen für 1000 Elemente | -| -------------- | ---------------------------- | ----------------------------- | ------------------------------ | -| **O(1)** | 1 | 1 | 1 | -| **O(log N)** | 3 | 6 | 9 | -| **O(N)** | 10 | 100 | 1000 | -| **O(N log N)** | 30 | 600 | 9000 | -| **O(N^2)** | 100 | 10000 | 1000000 | -| **O(2^N)** | 1024 | 1.26e+29 | 1.07e+301 | -| **O(N!)** | 3628800 | 9.3e+157 | 4.02e+2567 | - -### Komplexität von Datenstrukturoperationen - -| Datenstruktur | Zugriff auf | Suche | Einfügen | Löschung | Kommentare | -| ---------------------- | :---------: | :----: | :------: | :------: | :-------------------------------------------------------------- | -| **Array** | 1 | n | n | n | | -| **Stack** | n | n | 1 | 1 | | -| **Queue** | n | n | 1 | 1 | | -| **Linked List** | n | n | 1 | n | | -| **Hash Table** | - | n | n | n | Im Falle einer perfekten Hash-Funktion wären die Kosten O(1) | -| **Binary Search Tree** | n | n | n | n | Im Falle eines ausgeglichenen Baumes wären die Kosten O(log(n)) | -| **B-Tree** | log(n) | log(n) | log(n) | log(n) | | -| **Red-Black Tree** | log(n) | log(n) | log(n) | log(n) | | -| **AVL Tree** | log(n) | log(n) | log(n) | log(n) | | -| **Bloom Filter** | - | 1 | 1 | - | Falschpostive sind bei der Suche möglichen | - -### Komplexität von Array-Sortieralgorithmen - -| Name | Bester | Durchschnitt | Schlechtester | Speicher | Stabil | Kommentar | -| ------------------ | :-----------: | :---------------------: | :-------------------------: | :------: | :----: | :------------------------------------------------------------------------- | -| **Bubble sort** | n | n2 | n2 | 1 | JA | | -| **Insertion sort** | n | n2 | n2 | 1 | Ja | | -| **Selection sort** | n2 | n2 | n2 | 1 | Nein | | -| **Heap sort** | n log(n) | n log(n) | n log(n) | 1 | Nein | | -| **Merge sort** | n log(n) | n log(n) | n log(n) | n | Ja | | -| **Quick sort** | n log(n) | n log(n) | n2 | log(n) | Nein | Quicksort wird normalerweise in-place mit O(log(n)) Stapelplatz ausgeführt | -| **Shell sort** | n log(n) | abhängig von Spaltfolge | n (log(n))2 | 1 | Nein | | -| **Counting sort** | n + r | n + r | n + r | n + r | Ja | r - größte Zahl im Array | -| **Radix sort** | n \* k | n \* k | n \* k | n + k | Ja | k - Länge des längsten Schlüssels | - -## Projekt-Unterstützer - -> Du kannst dieses Projekt unterstützen über ❤️️ [GitHub](https://github.com/sponsors/trekhleb) or ❤️️ [Patreon](https://www.patreon.com/trekhleb). - -[Leute, die dieses Projekt unterstützen](https://github.com/trekhleb/javascript-algorithms/blob/master/BACKERS.md) `∑ = 0` - -> ℹ️ A few more [projects](https://trekhleb.dev/projects/) and [articles](https://trekhleb.dev/blog/) about JavaScript and algorithms on [trekhleb.dev](https://trekhleb.dev) - diff --git a/README.es-ES.md b/README.es-ES.md deleted file mode 100644 index 3a15ada4bd..0000000000 --- a/README.es-ES.md +++ /dev/null @@ -1,306 +0,0 @@ -# Algoritmos y Estructuras de Datos en JavaScript - -[![CI](https://github.com/trekhleb/javascript-algorithms/workflows/CI/badge.svg)](https://github.com/trekhleb/javascript-algorithms/actions?query=workflow%3ACI+branch%3Amaster) -[![codecov](https://codecov.io/gh/trekhleb/javascript-algorithms/branch/master/graph/badge.svg)](https://codecov.io/gh/trekhleb/javascript-algorithms) - -Este repositorio contiene ejemplos basados en JavaScript de muchos -algoritmos y estructuras de datos populares. - -Cada algoritmo y estructura de datos tiene su propio LÉAME con explicaciones relacionadas y -enlaces para lecturas adicionales (incluyendo algunas a vídeos de YouTube). - -_Léelo en otros idiomas:_ -[_English_](https://github.com/trekhleb/javascript-algorithms/), -[_简体中文_](README.zh-CN.md), -[_繁體中文_](README.zh-TW.md), -[_한국어_](README.ko-KR.md), -[_日本語_](README.ja-JP.md), -[_Polski_](README.pl-PL.md), -[_Français_](README.fr-FR.md), -[_Português_](README.pt-BR.md), -[_Русский_](README.ru-RU.md), -[_Türk_](README.tr-TR.md), -[_Italiana_](README.it-IT.md), -[_Bahasa Indonesia_](README.id-ID.md), -[_Українська_](README.uk-UA.md), -[_Arabic_](README.ar-AR.md), -[_Tiếng Việt_](README.vi-VN.md), -[_Deutsch_](README.de-DE.md), -[_Uzbek_](README.uz-UZ.md) -[_עברית_](README.he-IL.md) - -*☝ Nótese que este proyecto está pensado con fines de aprendizaje e investigación, -y **no** para ser usado en producción.* - -## Estructuras de Datos - -Una estructura de datos es una forma particular de organizar y almacenar datos en un ordenador para que puedan accederse -y modificarse de forma eficiente. Más concretamente, una estructura de datos es un conjunto de valores -de datos, las relaciones entre ellos y las funciones u operaciones que se pueden aplicar a -los datos. - -`P` - Principiante, `A` - Avanzado - -* `P` [Lista enlazada](src/data-structures/linked-list) -* `P` [Lista doblemente enlazada](src/data-structures/doubly-linked-list) -* `P` [Cola](src/data-structures/queue) -* `P` [Pila](src/data-structures/stack) -* `P` [Tabla hash](src/data-structures/hash-table) -* `P` [Heap](src/data-structures/heap) - versiones máx y mín -* `P` [Cola de prioridad](src/data-structures/priority-queue) -* `A` [Trie](src/data-structures/trie) -* `A` [Árbol](src/data-structures/tree) - * `A` [Árbol de búsqueda binaria](src/data-structures/tree/binary-search-tree) - * `A` [Árbol AVL](src/data-structures/tree/avl-tree) - * `A` [Árbol Rojo-Negro](src/data-structures/tree/red-black-tree) - * `A` [Árbol de segmentos](src/data-structures/tree/segment-tree) - con ejemplos de consultas de rango mín/máx/suma - * `A` [Árbol de Fenwick](src/data-structures/tree/fenwick-tree) (Árbol binario indexado) -* `A` [Grafo](src/data-structures/graph) (dirigido y no dirigido) -* `A` [Conjuntos disjuntos](src/data-structures/disjoint-set) -* `A` [Filtro de Bloom](src/data-structures/bloom-filter) - -## Algoritmos - -Un algoritmo es una especificación inequívoca de cómo resolver una clase de problemas. Es un conjunto de reglas que -definen con precisión una secuencia de operaciones. - -`P` - Principiante, `A` - Avanzado - -### Algoritmos por Tema - -* **Matemáticas** - * `P` [Manipulación de bits](src/algorithms/math/bits) - asignar/obtener/actualizar/limpiar bits, multiplicación/división por dos, hacer negativo, etc. - * `P` [Factorial](src/algorithms/math/factorial) - * `P` [Sucesión de Fibonacci](src/algorithms/math/fibonacci) - * `P` [Prueba de primalidad](src/algorithms/math/primality-test) (método de división de prueba) - * `P` [Algoritmo de Euclides](src/algorithms/math/euclidean-algorithm) - calcular el Máximo común divisor (MCD) - * `P` [Mínimo común múltiplo](src/algorithms/math/least-common-multiple) (MCM) - * `P` [Criba de Eratóstenes](src/algorithms/math/sieve-of-eratosthenes) - encontrar todos los números primos hasta un límite dado - * `P` [Es una potencia de dos?](src/algorithms/math/is-power-of-two) - comprobar si el número es una potencia de dos (algoritmos ingenuos y de bits) - * `P` [Triángulo de Pascal](src/algorithms/math/pascal-triangle) - * `P` [Números complejos](src/algorithms/math/complex-number) - números complejos y operaciones con ellos - * `P` [Radianes & Grados](src/algorithms/math/radian) - conversión de radianes a grados y viceversa - * `P` [Exponenciación rápida](src/algorithms/math/fast-powering) - * `A` [Partición entera](src/algorithms/math/integer-partition) - * `A` [Algoritmo π de Liu Hui](src/algorithms/math/liu-hui) - aproximar el cálculo de π basado en polígonos de N lados - * `A` [Transformada discreta de Fourier](src/algorithms/math/fourier-transform) - descomponer una función de tiempo (señal) en las frecuencias que la componen -* **Conjuntos** - * `P` [Producto cartesiano](src/algorithms/sets/cartesian-product) - producto de múltiples conjuntos - * `P` [Permutación de Fisher–Yates](src/algorithms/sets/fisher-yates) - permutación aleatoria de una secuencia finita - * `A` [Conjunto potencia](src/algorithms/sets/power-set) - todos los subconjuntos de un conjunto - * `A` [Permutaciones](src/algorithms/sets/permutations) (con y sin repeticiones) - * `A` [Combinaciones](src/algorithms/sets/combinations) (con y sin repeticiones) - * `A` [Subsecuencia común más larga](src/algorithms/sets/longest-common-subsequence) (LCS) - * `A` [Subsecuencia creciente más larga](src/algorithms/sets/longest-increasing-subsequence) - * `A` [Supersecuencia común más corta](src/algorithms/sets/shortest-common-supersequence) (SCS) - * `A` [Problema de la mochila](src/algorithms/sets/knapsack-problem) - "0/1" y "sin límite" - * `A` [Máximo subarreglo](src/algorithms/sets/maximum-subarray) - versiones de "fuerza bruta" y "programación dinámica" (de Kadane) - * `A` [Suma combinada](src/algorithms/sets/combination-sum) - encuentra todas las combinaciones que forman una suma específica -* **Cadenas de caracteres** - * `P` [Distancia de Hamming](src/algorithms/string/hamming-distance) - número de posiciones en las que los símbolos son diferentes - * `A` [Distancia de Levenshtein](src/algorithms/string/levenshtein-distance) - distancia mínima de edición entre dos secuencias - * `A` [Algoritmo Knuth-Morris-Pratt](src/algorithms/string/knuth-morris-pratt) (Algoritmo KMP) - búsqueda de subcadenas (coincidencia de patrones) - * `A` [Algoritmo Z](src/algorithms/string/z-algorithm) - búsqueda de subcadenas (coincidencia de patrones) - * `A` [Algoritmo de Rabin Karp](src/algorithms/string/rabin-karp) - búsqueda de subcadenas - * `A` [Subcadena común más larga](src/algorithms/string/longest-common-substring) - * `A` [Coincidencia por expresiones regulares](src/algorithms/string/regular-expression-matching) -* **Búsquedas** - * `P` [Búsqueda lineal](src/algorithms/search/linear-search) - * `P` [Búsqueda de salto](src/algorithms/search/jump-search) (o Búsqueda de bloque) - búsqueda en una lista ordenada - * `P` [Búsqueda binaria](src/algorithms/search/binary-search) - búsqueda en una lista ordenada - * `P` [Búsqueda por interpolación](src/algorithms/search/interpolation-search) - búsqueda en una lista ordenada uniformemente distribuida -* **Ordenamiento** - * `P` [Ordenamiento de burbuja](src/algorithms/sorting/bubble-sort) - * `P` [Ordenamiento por selección](src/algorithms/sorting/selection-sort) - * `P` [Ordenamiento por inserción](src/algorithms/sorting/insertion-sort) - * `P` [Ordenamiento por Heap](src/algorithms/sorting/heap-sort) - * `P` [Ordenamiento por mezcla](src/algorithms/sorting/merge-sort) - * `P` [Quicksort](src/algorithms/sorting/quick-sort) - implementaciones in situ y no in situ - * `P` [Shellsort](src/algorithms/sorting/shell-sort) - * `P` [Ordenamiento por cuentas](src/algorithms/sorting/counting-sort) - * `P` [Ordenamiento Radix](src/algorithms/sorting/radix-sort) -* **Listas enlazadas** - * `P` [Recorrido directo](src/algorithms/linked-list/traversal) - * `P` [Recorrido inverso](src/algorithms/linked-list/reverse-traversal) -* **Árboles** - * `P` [Búsqueda en profundidad](src/algorithms/tree/depth-first-search) (DFS) - * `P` [Búsqueda en anchura](src/algorithms/tree/breadth-first-search) (BFS) -* **Grafos** - * `P` [Búsqueda en profundidad](src/algorithms/graph/depth-first-search) (DFS) - * `P` [Búsqueda en anchura](src/algorithms/graph/breadth-first-search) (BFS) - * `P` [Algoritmo de Kruskal](src/algorithms/graph/kruskal) - encontrar el árbol de cubrimiento mínimo (MST) para un grafo no dirigido ponderado - * `A` [Algoritmo de Dijkstra](src/algorithms/graph/dijkstra) - encontrar los caminos más cortos a todos los vértices del grafo desde un solo vértice - * `A` [Algoritmo de Bellman-Ford](src/algorithms/graph/bellman-ford) - encontrar los caminos más cortos a todos los vértices del grafo desde un solo vértice - * `A` [Algoritmo de Floyd-Warshall](src/algorithms/graph/floyd-warshall) - encontrar los caminos más cortos entre todos los pares de vértices - * `A` [Detectar ciclos](src/algorithms/graph/detect-cycle) - para grafos dirigidos y no dirigidos (versiones basadas en DFS y conjuntos disjuntos) - * `A` [Algoritmo de Prim](src/algorithms/graph/prim) - encontrar el árbol de cubrimiento mínimo (MST) para un grafo no dirigido ponderado - * `A` [Ordenamiento topológico](src/algorithms/graph/topological-sorting) - método DFS - * `A` [Puntos de articulación](src/algorithms/graph/articulation-points) - algoritmo de Tarjan (basado en DFS) - * `A` [Puentes](src/algorithms/graph/bridges) - algoritmo basado en DFS - * `A` [Camino euleriano y circuito euleriano](src/algorithms/graph/eulerian-path) - algoritmo de Fleury - visitar cada arista exactamente una vez - * `A` [Ciclo hamiltoniano](src/algorithms/graph/hamiltonian-cycle) - visitar cada vértice exactamente una vez - * `A` [Componentes fuertemente conexos](src/algorithms/graph/strongly-connected-components) - algoritmo de Kosaraju - * `A` [Problema del viajante](src/algorithms/graph/travelling-salesman) - la ruta más corta posible que visita cada ciudad y vuelve a la ciudad de origen -* **Criptografía** - * `P` [Hash polinomial](src/algorithms/cryptography/polynomial-hash) - función de hash rodante basada en polinomio -* **Sin categoría** - * `P` [Torre de Hanói](src/algorithms/uncategorized/hanoi-tower) - * `P` [Rotación de matriz cuadrada](src/algorithms/uncategorized/square-matrix-rotation) - algoritmo in situ - * `P` [Juego de los saltos](src/algorithms/uncategorized/jump-game) - ejemplos de backtracking, programación dinámica (de arriba hacia abajo + de abajo hacia arriba) y voraces - * `P` [Caminos únicos](src/algorithms/uncategorized/unique-paths) - ejemplos de backtracking, programación dinámica y basados en el Triángulo de Pascal - * `P` [Terrazas pluviales](src/algorithms/uncategorized/rain-terraces) - el problema de la retención del agua de lluvia (programación dinámica y fuerza bruta) - * `A` [Problema de las N Reinas](src/algorithms/uncategorized/n-queens) - * `A` [Problema del caballo (Knight tour)](src/algorithms/uncategorized/knight-tour) - -### Algoritmos por paradigma - -Un paradigma algorítmico es un método o enfoque genérico que subyace al diseño de una clase de algoritmos. -Es una abstracción superior a la noción de algoritmo, del mismo modo que un algoritmo es una abstracción superior a un programa de ordenador. - -* **Fuerza Bruta** - mira todas las posibilidades y selecciona la mejor solución - * `P` [Búsqueda lineal](src/algorithms/search/linear-search) - * `P` [Terrazas pluviales](src/algorithms/uncategorized/rain-terraces) - el problema de la retención del agua de lluvia - * `A` [Máximo subarreglo](src/algorithms/sets/maximum-subarray) - * `A` [Problema del viajante](src/algorithms/graph/travelling-salesman) - la ruta más corta posible que visita cada ciudad y vuelve a la ciudad de origen - * `A` [Transformada discreta de Fourier](src/algorithms/math/fourier-transform) - descomponer una función de tiempo (señal) en las frecuencias que la componen -* **Voraces** - escoge la mejor opción en el momento actual, sin ninguna consideración sobre el futuro - * `P` [Juego de los saltos](src/algorithms/uncategorized/jump-game) - * `A` [Problema de la mochila sin límite](src/algorithms/sets/knapsack-problem) - * `A` [Algoritmo de Dijkstra](src/algorithms/graph/dijkstra) - encontrar los caminos más cortos a todos los vértices del grafo desde un solo vértice - * `A` [Algoritmo de Prim](src/algorithms/graph/prim) - encontrar el árbol de cubrimiento mínimo (MST) para un grafo no dirigido ponderado - * `A` [Algoritmo de Kruskal](src/algorithms/graph/kruskal) - encontrar el árbol de cubrimiento mínimo (MST) para un grafo no dirigido ponderado -* **Divide y Vencerás** - divide el problema en partes más pequeñas y luego resuelve esas partes - * `P` [Búsqueda binaria](src/algorithms/search/binary-search) - * `P` [Torre de Hanói](src/algorithms/uncategorized/hanoi-tower) - * `P` [Triángulo de Pascal](src/algorithms/math/pascal-triangle) - * `P` [Algoritmo de Euclides](src/algorithms/math/euclidean-algorithm) - calcular el Máximo Común Divisor (MCD) - * `P` [Ordenamiento por mezcla](src/algorithms/sorting/merge-sort) - * `P` [Quicksort](src/algorithms/sorting/quick-sort) - * `P` [Búsqueda en profundidad (árboles)](src/algorithms/tree/depth-first-search) - (DFS) - * `P` [Búsqueda en profundidad (grafos)](src/algorithms/graph/depth-first-search) - (DFS) - * `P` [Juego de los saltos](src/algorithms/uncategorized/jump-game) - * `P` [Exponenciación rápida](src/algorithms/math/fast-powering) - * `A` [Permutaciones](src/algorithms/sets/permutations) - (con y sin repeticiones) - * `A` [Combinaciones](src/algorithms/sets/combinations) - (con y sin repeticiones) -* **Programación Dinámica** - construye una solución usando sub-soluciones previamente encontradas - * `P` [Número de Fibonacci](src/algorithms/math/fibonacci) - * `P` [Juego de los saltos](src/algorithms/uncategorized/jump-game) - * `P` [Caminos únicos](src/algorithms/uncategorized/unique-paths) - * `P` [Terrazas pluviales](src/algorithms/uncategorized/rain-terraces) - el problema de la retención del agua de lluvia - * `A` [Distancia de Levenshtein](src/algorithms/string/levenshtein-distance) - distancia mínima de edición entre dos secuencias - * `A` [Subsecuencia común más larga](src/algorithms/sets/longest-common-subsequence) (LCS) - * `A` [Subcadena común más larga](src/algorithms/string/longest-common-substring) - * `A` [Subsecuencia creciente más larga](src/algorithms/sets/longest-increasing-subsequence) - * `A` [Supersecuencia común más corta](src/algorithms/sets/shortest-common-supersequence) - * `A` [Problema de la mochila 0/1](src/algorithms/sets/knapsack-problem) - * `A` [Partición entera](src/algorithms/math/integer-partition) - * `A` [Máximo subarreglo](src/algorithms/sets/maximum-subarray) - * `A` [Algoritmo de Bellman-Ford](src/algorithms/graph/bellman-ford) - encontrar los caminos más cortos a todos los vértices del grafo desde un solo vértice - * `A` [Algoritmo de Floyd-Warshall](src/algorithms/graph/floyd-warshall) - encontrar los caminos más cortos entre todos los pares de vértices - * `A` [Coincidencia por expresiones regulares](src/algorithms/string/regular-expression-matching) -* **De Retorceso (Backtracking)** - De manera similar a la fuerza bruta, trata de generar todas las soluciones posibles, pero cada vez que genere la siguiente solución, comprueba si cumple con todas las condiciones, y sólo entonces continúa generando soluciones posteriores. De lo contrario, retrocede y sigue un camino diferente para encontrar una solución. Normalmente se utiliza un recorrido en profundidad (DFS) del espacio de estados. - * `P` [Juego de los saltos](src/algorithms/uncategorized/jump-game) - * `P` [Caminos únicos](src/algorithms/uncategorized/unique-paths) - * `P` [Conjunto potencia](src/algorithms/sets/power-set) - todos los subconjuntos de un conjunto - * `A` [Ciclo hamiltoniano](src/algorithms/graph/hamiltonian-cycle) - visitar cada vértice exactamente una vez - * `A` [Problema de las N Reinas](src/algorithms/uncategorized/n-queens) - * `A` [Problema del caballo (Knight tour)](src/algorithms/uncategorized/knight-tour) - * `A` [Suma combinada](src/algorithms/sets/combination-sum) - encuentra todas las combinaciones que forman una suma específica -* **Ramas y Límites** - recuerda la solución de menor costo encontrada en cada etapa de la búsqueda de rastreo, y utilizar el costo de la solución de menor costo encontrada hasta el momento como un límite inferior del costo de una solución de menor costo para el problema, a fin de descartar soluciones parciales con costos mayores que la solución de menor costo encontrada hasta el momento. Normalmente se utiliza un recorrido BFS en combinación con un recorrido DFS del árbol del espacio de estados. - -## Cómo usar este repositorio - -**Instalar las dependencias** - -``` -npm install -``` - -**Correr ESLint** - -Es posible que desee ejecutarlo para comprobar la calidad del código. - -``` -npm run lint -``` - -**Correr los tests** - -``` -npm test -``` - -**Correr tests por nombre** - -``` -npm test -- 'LinkedList' -``` - -**Campo de juegos** - -Puede jugar con estructuras de datos y algoritmos en el archivo `./src/playground/playground.js` y escribir -pruebas para ello en `./src/playground/__test__/playground.test.js`. - -A continuación, simplemente ejecute el siguiente comando para comprobar si el código funciona como se espera: - -``` -npm test -- 'playground' -``` - -## Información útil - -### Referencias - -[▶ Estructuras de datos y algoritmos en YouTube](https://www.youtube.com/playlist?list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) - -### Notación O Grande - -Orden de crecimiento de los algoritmos especificados en la notación O grande. - -![Gráficas de Notación O grande ](./assets/big-o-graph.png) - -Fuente: [Big O Cheat Sheet](http://bigocheatsheet.com/). - -A continuación se muestra la lista de algunas de las notaciones de Big O más utilizadas y sus comparaciones de rendimiento -frente a diferentes tamaños de los datos de entrada. - -| Notación O grande | Cálculos para 10 elementos | Cálculos para 100 elementos | Cálculos para 1000 elementos | -| ----------------- | -------------------------- | --------------------------- | ---------------------------- | -| **O(1)** | 1 | 1 | 1 | -| **O(log N)** | 3 | 6 | 9 | -| **O(N)** | 10 | 100 | 1000 | -| **O(N log N)** | 30 | 600 | 9000 | -| **O(N^2)** | 100 | 10000 | 1000000 | -| **O(2^N)** | 1024 | 1.26e+29 | 1.07e+301 | -| **O(N!)** | 3628800 | 9.3e+157 | 4.02e+2567 | - -### Complejidad de las operaciones de estructuras de datos - -| Estructura de Datos | Accesso | Busqueda | Inserción | Borrado | Comentarios | -| ------------------------------ | :-----: | :------: | :-------: | :-----: | :-------------------------------------------------------------- | -| **Colección** | 1 | n | n | n | | -| **Stack** | n | n | 1 | 1 | | -| **Cola** | n | n | 1 | 1 | | -| **Lista enlazada** | n | n | 1 | 1 | | -| **Tabla hash** | - | n | n | n | En caso de función hash perfecta los costos serían O(1) | -| **Búsqueda por Árbol binario** | n | n | n | n | En el caso de un árbol equilibrado, los costos serían O(log(n)) | -| **Árbol B** | log(n) | log(n) | log(n) | log(n) | | -| **Árbol Rojo-Negro** | log(n) | log(n) | log(n) | log(n) | | -| **Árbol AVL** | log(n) | log(n) | log(n) | log(n) | | -| **Filtro de Bloom** | - | 1 | 1 | - | Falsos positivos son posibles durante la búsqueda | - -### Complejidad de algoritmos de ordenamiento de arreglos - -| Nombre | Mejor | Promedio | Pero | Memorya | Estable | Comentarios | -| -------------------------------- | :-----------: | :---------------------: | :-------------------------: | :-----: | :-----: | :------------------------------------------------------------ | -| **Ordenamiento de burbuja** | n | n2 | n2 | 1 | Si | | -| **Ordenamiento por inserción** | n | n2 | n2 | 1 | Si | | -| **Ordenamiento por selección** | n2 | n2 | n2 | 1 | No | | -| **Ordenamiento por Heap** | n log(n) | n log(n) | n log(n) | 1 | No | | -| **Ordenamiento por mezcla** | n log(n) | n log(n) | n log(n) | n | Si | | -| **Quicksort** | n log(n) | n log(n) | n2 | log(n) | No | Quicksort utiliza O(log(n)) de espacio en el stack | -| **Shellsort** | n log(n) | depende de la secuencia de huecos | n (log(n))2 | 1 | No | | -| **Ordenamiento por cuentas** | n + r | n + r | n + r | n + r | Si | r - mayor número en el arreglo | -| **Ordenamiento Radix** | n \* k | n \* k | n \* k | n + k | Si | k - largo de la llave más larga | - -> ℹ️ Algunos otros [proyectos](https://trekhleb.dev/projects/) y [artículos](https://trekhleb.dev/blog/) sobre JavaScript y algoritmos en [trekhleb.dev](https://trekhleb.dev) diff --git a/README.fr-FR.md b/README.fr-FR.md deleted file mode 100644 index cb30d1833d..0000000000 --- a/README.fr-FR.md +++ /dev/null @@ -1,300 +0,0 @@ -# Algorithmes et Structures de Données en JavaScript - -[![CI](https://github.com/trekhleb/javascript-algorithms/workflows/CI/badge.svg)](https://github.com/trekhleb/javascript-algorithms/actions?query=workflow%3ACI+branch%3Amaster) -[![codecov](https://codecov.io/gh/trekhleb/javascript-algorithms/branch/master/graph/badge.svg)](https://codecov.io/gh/trekhleb/javascript-algorithms) - -Ce dépôt contient des exemples d'implémentation en JavaScript de plusieurs -algorithmes et structures de données populaires. - -Chaque algorithme et structure de donnée possède son propre README contenant -les explications détaillées et liens (incluant aussi des vidéos Youtube) pour -complément d'informations. - -_Lisez ceci dans d'autres langues:_ -[_English_](https://github.com/trekhleb/javascript-algorithms/), -[_简体中文_](README.zh-CN.md), -[_繁體中文_](README.zh-TW.md), -[_한국어_](README.ko-KR.md), -[_日本語_](README.ja-JP.md), -[_Polski_](README.pl-PL.md), -[_Español_](README.es-ES.md), -[_Português_](README.pt-BR.md), -[_Русский_](README.ru-RU.md), -[_Türk_](README.tr-TR.md), -[_Italiana_](README.it-IT.md), -[_Bahasa Indonesia_](README.id-ID.md), -[_Українська_](README.uk-UA.md), -[_Arabic_](README.ar-AR.md), -[_Tiếng Việt_](README.vi-VN.md), -[_Deutsch_](README.de-DE.md), -[_Uzbek_](README.uz-UZ.md) -[_עברית_](README.he-IL.md) - -## Data Structures - -Une structure de données est une manière spéciale d'organiser et de stocker -des données dans un ordinateur de manière à ce que l'on puisse accéder à -cette information et la modifier de manière efficiente. De manière plus -spécifique, une structure de données est un ensemble composé d'une collection -de valeurs, des relations entre ces valeurs ainsi que d'un ensemble de -fonctions ou d'opérations pouvant être appliquées sur ces données. - -`B` - Débutant, `A` - Avancé - -- `B` [Liste Chaînée](src/data-structures/linked-list) -- `B` [Liste Doublement Chaînée](src/data-structures/doubly-linked-list) -- `B` [Queue](src/data-structures/queue) -- `B` [Pile](src/data-structures/stack) -- `B` [Table de Hachage](src/data-structures/hash-table) -- `B` [Tas](src/data-structures/heap) -- `B` [Queue de Priorité](src/data-structures/priority-queue) -- `A` [Trie](src/data-structures/trie) -- `A` [Arbre](src/data-structures/tree) - - `A` [Arbre de recherche Binaire](src/data-structures/tree/binary-search-tree) - - `A` [Arbre AVL](src/data-structures/tree/avl-tree) - - `A` [Arbre Red-Black](src/data-structures/tree/red-black-tree) - - `A` [Arbre de Segments](src/data-structures/tree/segment-tree) - avec exemples de requêtes de type min/max/somme sur intervalles - - `A` [Arbre de Fenwick](src/data-structures/tree/fenwick-tree) (Arbre Binaire Indexé) -- `A` [Graphe](src/data-structures/graph) (orienté et non orienté) -- `A` [Ensembles Disjoints](src/data-structures/disjoint-set) -- `A` [Filtre de Bloom](src/data-structures/bloom-filter) - -## Algorithmes - -Un algorithme est une démarche non ambigüe expliquant comment résoudre une -classe de problèmes. C'est un ensemble de règles décrivant de manière précise -une séquence d'opérations. - -`B` - Débutant, `A` - Avancé - -### Algorithmes par topic - -- **Math** - - `B` [Manipulation de Bit](src/algorithms/math/bits/README.fr-FR.md) - définir/obtenir/mettre à jour/effacer les bits, multiplication/division par deux, négativiser etc. - - `B` [Factorielle](src/algorithms/math/factorial/README.fr-FR.md) - - `B` [Nombre de Fibonacci](src/algorithms/math/fibonacci/README.fr-FR.md) - - `B` [Test de Primalité](src/algorithms/math/primality-test) (méthode du test de division) - - `B` [Algorithme d'Euclide](src/algorithms/math/euclidean-algorithm/README.fr-FR.md) - calcule le Plus Grand Commun Diviseur (PGCD) - - `B` [Plus Petit Commun Multiple](src/algorithms/math/least-common-multiple) (PPCM) - - `B` [Crible d'Eratosthène](src/algorithms/math/sieve-of-eratosthenes) - trouve tous les nombres premiers inférieurs à une certaine limite - - `B` [Puissance de Deux](src/algorithms/math/is-power-of-two) - teste si un nombre donné est une puissance de deux (algorithmes naif et basé sur les opérations bit-à-bit) - - `B` [Triangle de Pascal](src/algorithms/math/pascal-triangle) - - `B` [Nombre complexe](src/algorithms/math/complex-number/README.fr-FR.md) - nombres complexes et opérations de bases - - `A` [Partition Entière](src/algorithms/math/integer-partition) - - `A` [Approximation de π par l'algorithme de Liu Hui](src/algorithms/math/liu-hui) - approximation du calcul de π basé sur les N-gons - - `B` [Exponentiation rapide](src/algorithms/math/fast-powering/README.fr-FR.md) - - `A` [Transformée de Fourier Discrète](src/algorithms/math/fourier-transform/README.fr-FR.md) - décomposer une fonction du temps (un signal) en fréquences qui la composent -- **Ensembles** - - `B` [Produit Cartésien](src/algorithms/sets/cartesian-product) - produit de plusieurs ensembles - - `B` [Mélange de Fisher–Yates](src/algorithms/sets/fisher-yates) - permulation aléatoire d'une séquence finie - - `A` [Ensemble des parties d'un ensemble](src/algorithms/sets/power-set) - tous les sous-ensembles d'un ensemble - - `A` [Permutations](src/algorithms/sets/permutations) (avec et sans répétitions) - - `A` [Combinaisons](src/algorithms/sets/combinations) (avec et sans répétitions) - - `A` [Plus Longue Sous-séquence Commune](src/algorithms/sets/longest-common-subsequence) - - `A` [Plus Longue Sous-suite strictement croissante](src/algorithms/sets/longest-increasing-subsequence) - - `A` [Plus Courte Super-séquence Commune](src/algorithms/sets/shortest-common-supersequence) - - `A` [Problème du Sac à Dos](src/algorithms/sets/knapsack-problem) - versions "0/1" et "Sans Contraintes" - - `A` [Sous-partie Maximum](src/algorithms/sets/maximum-subarray) - versions "Force Brute" et "Programmation Dynamique" (Kadane) - - `A` [Somme combinatoire](src/algorithms/sets/combination-sum) - trouve toutes les combinaisons qui forment une somme spécifique -- **Chaînes de Caractères** - - `B` [Distance de Hamming](src/algorithms/string/hamming-distance) - nombre de positions auxquelles les symboles sont différents - - `A` [Distance de Levenshtein](src/algorithms/string/levenshtein-distance) - distance minimale d'édition entre deux séquences - - `A` [Algorithme de Knuth–Morris–Pratt](src/algorithms/string/knuth-morris-pratt) (Algorithme KMP) - recherche de sous-chaîne (pattern matching) - - `A` [Algorithme Z](src/algorithms/string/z-algorithm) - recherche de sous-chaîne (pattern matching) - - `A` [Algorithme de Rabin Karp](src/algorithms/string/rabin-karp) - recherche de sous-chaîne - - `A` [Plus Longue Sous-chaîne Commune](src/algorithms/string/longest-common-substring) - - `A` [Expression Régulière](src/algorithms/string/regular-expression-matching) -- **Recherche** - - `B` [Recherche Linéaire](src/algorithms/search/linear-search) - - `B` [Jump Search](src/algorithms/search/jump-search) Recherche par saut (ou par bloc) - recherche dans une liste triée - - `B` [Recherche Binaire](src/algorithms/search/binary-search) - recherche dans une liste triée - - `B` [Recherche par Interpolation](src/algorithms/search/interpolation-search) - recherche dans une liste triée et uniformément distribuée -- **Tri** - - `B` [Tri Bullet](src/algorithms/sorting/bubble-sort) - - `B` [Tri Sélection](src/algorithms/sorting/selection-sort) - - `B` [Tri Insertion](src/algorithms/sorting/insertion-sort) - - `B` [Tri Par Tas](src/algorithms/sorting/heap-sort) - - `B` [Tri Fusion](src/algorithms/sorting/merge-sort) - - `B` [Tri Rapide](src/algorithms/sorting/quick-sort) - implémentations _in-place_ et _non in-place_ - - `B` [Tri Shell](src/algorithms/sorting/shell-sort) - - `B` [Tri Comptage](src/algorithms/sorting/counting-sort) - - `B` [Tri Radix](src/algorithms/sorting/radix-sort) -- **Arbres** - - `B` [Parcours en Profondeur](src/algorithms/tree/depth-first-search) (DFS) - - `B` [Parcours en Largeur](src/algorithms/tree/breadth-first-search) (BFS) -- **Graphes** - - `B` [Parcours en Profondeur](src/algorithms/graph/depth-first-search) (DFS) - - `B` [Parcours en Largeur](src/algorithms/graph/breadth-first-search) (BFS) - - `B` [Algorithme de Kruskal](src/algorithms/graph/kruskal) - trouver l'arbre couvrant de poids minimal sur un graphe pondéré non dirigé - - `A` [Algorithme de Dijkstra](src/algorithms/graph/dijkstra) - trouver tous les plus courts chemins partant d'un noeud vers tous les autres noeuds dans un graphe - - `A` [Algorithme de Bellman-Ford](src/algorithms/graph/bellman-ford) - trouver tous les plus courts chemins partant d'un noeud vers tous les autres noeuds dans un graphe - - `A` [Algorithme de Floyd-Warshall](src/algorithms/graph/floyd-warshall) - trouver tous les plus courts chemins entre toutes les paires de noeuds dans un graphe - - `A` [Détection de Cycle](src/algorithms/graph/detect-cycle) - pour les graphes dirigés et non dirigés (implémentations basées sur l'algorithme de Parcours en Profondeur et sur les Ensembles Disjoints) - - `A` [Algorithme de Prim](src/algorithms/graph/prim) - trouver l'arbre couvrant de poids minimal sur un graphe pondéré non dirigé - - `A` [Tri Topologique](src/algorithms/graph/topological-sorting) - méthode DFS - - `A` [Point d'Articulation](src/algorithms/graph/articulation-points) - algorithme de Tarjan (basé sur l'algorithme de Parcours en Profondeur) - - `A` [Bridges](src/algorithms/graph/bridges) - algorithme basé sur le Parcours en Profondeur - - `A` [Chemin Eulérien et Circuit Eulérien](src/algorithms/graph/eulerian-path) - algorithme de Fleury - visite chaque arc exactement une fois - - `A` [Cycle Hamiltonien](src/algorithms/graph/hamiltonian-cycle) - visite chaque noeud exactement une fois - - `A` [Composants Fortements Connexes](src/algorithms/graph/strongly-connected-components) - algorithme de Kosaraju - - `A` [Problème du Voyageur de Commerce](src/algorithms/graph/travelling-salesman) - chemin le plus court visitant chaque cité et retournant à la cité d'origine -- **Non catégorisé** - - `B` [Tours de Hanoi](src/algorithms/uncategorized/hanoi-tower) - - `B` [Rotation de Matrice Carrée](src/algorithms/uncategorized/square-matrix-rotation) - algorithme _in place_ - - `B` [Jump Game](src/algorithms/uncategorized/jump-game) - retour sur trace, programmation dynamique (haut-bas + bas-haut) et exemples gourmands - - `B` [Chemins Uniques](src/algorithms/uncategorized/unique-paths) - retour sur trace, programmation dynamique (haut-bas + bas-haut) et exemples basés sur le Triangle de Pascal - - `A` [Problème des N-Dames](src/algorithms/uncategorized/n-queens) - - `A` [Problème du Cavalier](src/algorithms/uncategorized/knight-tour) - -### Algorithmes par Paradigme - -Un paradigme algorithmique est une méthode générique ou une approche qui -sous-tend la conception d'une classe d'algorithmes. C'est une abstraction -au-dessus de la notion d'algorithme, tout comme l'algorithme est une abstraction -supérieure à un programme informatique. - -- **Force Brute** - cherche parmi toutes les possibilités et retient la meilleure - - `B` [Recherche Linéaire](src/algorithms/search/linear-search) - - `A` [Sous-partie Maximum](src/algorithms/sets/maximum-subarray) - - `A` [Problème du Voyageur de Commerce](src/algorithms/graph/travelling-salesman) - chemin le plus court visitant chaque cité et retournant à la cité d'origine -- **Gourmand** - choisit la meilleure option à l'instant courant, sans tenir compte de la situation future - - `B` [Jump Game](src/algorithms/uncategorized/jump-game) - - `A` [Problème du Sac à Dos Sans Contraintes](src/algorithms/sets/knapsack-problem) - - `A` [Algorithme de Dijkstra](src/algorithms/graph/dijkstra) - trouver tous les plus courts chemins partant d'un noeud vers tous les autres noeuds dans un graphe - - `A` [Algorithme de Prim](src/algorithms/graph/prim) - trouver l'arbre couvrant de poids minimal sur un graphe pondéré non dirigé - - `A` [Algorithme de Kruskal](src/algorithms/graph/kruskal) - trouver l'arbre couvrant de poids minimal sur un graphe pondéré non dirigé -- **Diviser et Régner** - divise le problème en sous problèmes (plus simples) et résoud ces sous problèmes - - `B` [Recherche Binaire](src/algorithms/search/binary-search) - - `B` [Tours de Hanoi](src/algorithms/uncategorized/hanoi-tower) - - `B` [Triangle de Pascal](src/algorithms/math/pascal-triangle) - - `B` [Algorithme d'Euclide](src/algorithms/math/euclidean-algorithm) - calcule le Plus Grand Commun Diviseur (PGCD) - - `B` [Tri Fusion](src/algorithms/sorting/merge-sort) - - `B` [Tri Rapide](src/algorithms/sorting/quick-sort) - - `B` [Arbre de Parcours en Profondeur](src/algorithms/tree/depth-first-search) (DFS) - - `B` [Graphe de Parcours en Profondeur](src/algorithms/graph/depth-first-search) (DFS) - - `B` [Jump Game](src/algorithms/uncategorized/jump-game) - - `A` [Permutations](src/algorithms/sets/permutations) (avec et sans répétitions) - - `A` [Combinations](src/algorithms/sets/combinations) (avec et sans répétitions) -- **Programmation Dynamique** - construit une solution en utilisant les solutions précédemment trouvées - - `B` [Nombre de Fibonacci](src/algorithms/math/fibonacci) - - `B` [Jump Game](src/algorithms/uncategorized/jump-game) - - `B` [Chemins Uniques](src/algorithms/uncategorized/unique-paths) - - `A` [Distance de Levenshtein](src/algorithms/string/levenshtein-distance) - distance minimale d'édition entre deux séquences - - `A` [Plus Longue Sous-séquence Commune](src/algorithms/sets/longest-common-subsequence) - - `A` [Plus Longue Sous-chaîne Commune](src/algorithms/string/longest-common-substring) - - `A` [Plus Longue Sous-suite strictement croissante](src/algorithms/sets/longest-increasing-subsequence) - - `A` [Plus Courte Super-séquence Commune](src/algorithms/sets/shortest-common-supersequence) - - `A` [Problème de Sac à Dos](src/algorithms/sets/knapsack-problem) - - `A` [Partition Entière](src/algorithms/math/integer-partition) - - `A` [Sous-partie Maximum](src/algorithms/sets/maximum-subarray) - - `A` [Algorithme de Bellman-Ford](src/algorithms/graph/bellman-ford) - trouver tous les plus courts chemins partant d'un noeud vers tous les autres noeuds dans un graphe - - `A` [Algorithme de Floyd-Warshall](src/algorithms/graph/floyd-warshall) - trouver tous les plus courts chemins entre toutes les paires de noeuds dans un graphe - - `A` [Expression Régulière](src/algorithms/string/regular-expression-matching) -- **Retour sur trace** - de même que la version "Force Brute", essaie de générer toutes les solutions possibles, mais pour chaque solution générée, on teste si elle satisfait toutes les conditions, et seulement ensuite continuer à générer des solutions ultérieures. Sinon, l'on revient en arrière, et l'on essaie un - chemin différent pour tester d'autres solutions. Normalement, la traversée en profondeur de l'espace d'états est utilisée. - - `B` [Jump Game](src/algorithms/uncategorized/jump-game) - - `B` [Unique Paths](src/algorithms/uncategorized/unique-paths) - - `A` [Hamiltonian Cycle](src/algorithms/graph/hamiltonian-cycle) - Visit every vertex exactly once - - `A` [Problème des N-Dames](src/algorithms/uncategorized/n-queens) - - `A` [Problème du Cavalier](src/algorithms/uncategorized/knight-tour) - - `A` [Somme combinatoire](src/algorithms/sets/combination-sum) - trouve toutes les combinaisons qui forment une somme spécifique -- **Séparation et Evaluation** - pemet de retenir une solution à moindre coût dans un ensemble. Pour chaque étape, l'on garde une trace de la solution la moins coûteuse trouvée jusqu'à présent en tant que borne inférieure du coût. Cela afin d'éliminer les solutions partielles dont les coûts sont plus élevés que celui de la solution actuelle retenue. Normalement, la traversée en largeur en combinaison avec la traversée en profondeur de l'espace d'états de l'arbre est utilisée. - -## Comment utiliser ce dépôt - -**Installer toutes les dépendances** - -``` -npm install -``` - -**Exécuter ESLint** - -Vous pouvez l'installer pour tester la qualité du code. - -``` -npm run lint -``` - -**Exécuter tous les tests** - -``` -npm test -``` - -**Exécuter les tests par nom** - -``` -npm test -- 'LinkedList' -``` - -**Tests personnalisés** - -Vous pouvez manipuler les structures de données et algorithmes présents dans ce -dépôt avec le fichier `./src/playground/playground.js` et écrire vos propres -tests dans file `./src/playground/__test__/playground.test.js`. - -Vous pourrez alors simplement exécuter la commande suivante afin de tester si -votre code fonctionne comme escompté - -``` -npm test -- 'playground' -``` - -## Informations Utiles - -### Références - -[▶ Structures de Données et Algorithmes sur YouTube](https://www.youtube.com/playlist?list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) - -### Notation Grand O - -Comparaison de la performance d'algorithmes en notation Grand O. - -![Big O graphs](./assets/big-o-graph.png) - -Source: [Big O Cheat Sheet](http://bigocheatsheet.com/). - -Voici la liste de certaines des notations Grand O les plus utilisées et de leurs -comparaisons de performance suivant différentes tailles pour les données d'entrée. - -| Notation Grand O | Opérations pour 10 éléments | Opérations pour 100 éléments | Opérations pour 1000 éléments | -| ---------------- | --------------------------- | ---------------------------- | ----------------------------- | -| **O(1)** | 1 | 1 | 1 | -| **O(log N)** | 3 | 6 | 9 | -| **O(N)** | 10 | 100 | 1000 | -| **O(N log N)** | 30 | 600 | 9000 | -| **O(N^2)** | 100 | 10000 | 1000000 | -| **O(2^N)** | 1024 | 1.26e+29 | 1.07e+301 | -| **O(N!)** | 3628800 | 9.3e+157 | 4.02e+2567 | - -### Complexité des Opérations suivant les Structures de Données - -| Structure de donnée | Accès | Recherche | Insertion | Suppression | Commentaires | -| ------------------------------ | :----: | :-------: | :-------: | :---------: | :------------------------------------------------------------------------- | -| **Liste** | 1 | n | n | n | | -| **Pile** | n | n | 1 | 1 | | -| **Queue** | n | n | 1 | 1 | | -| **Liste Liée** | n | n | 1 | 1 | | -| **Table de Hachage** | - | n | n | n | Dans le cas des fonctions de hachage parfaites, les couts seraient de O(1) | -| **Arbre de Recherche Binaire** | n | n | n | n | Dans le cas des arbre équilibrés, les coûts seraient de O(log(n)) | -| **Arbre B** | log(n) | log(n) | log(n) | log(n) | | -| **Arbre Red-Black** | log(n) | log(n) | log(n) | log(n) | | -| **Arbre AVL** | log(n) | log(n) | log(n) | log(n) | | -| **Filtre de Bloom** | - | 1 | 1 | - | Les faux positifs sont possibles lors de la recherche | - -### Complexité des Algorithmes de Tri de Liste - -| Nom | Meilleur | Moyenne | Pire | Mémoire | Stable | Commentaires | -| ----------------- | :-----------: | :--------------------: | :-------------------------: | :-----: | :----: | :----------------------------------------------------------------------------------- | -| **Tri Bulle** | n | n2 | n2 | 1 | Oui | | -| **Tri Insertion** | n | n2 | n2 | 1 | Oui | | -| **Tri Sélection** | n2 | n2 | n2 | 1 | Non | | -| **Tri par Tas** | n log(n) | n log(n) | n log(n) | 1 | Non | | -| **Merge sort** | n log(n) | n log(n) | n log(n) | n | Oui | | -| **Tri Rapide** | n log(n) | n log(n) | n2 | log(n) | Non | le Tri Rapide est généralement effectué _in-place_ avec une pile de taille O(log(n)) | -| **Tri Shell** | n log(n) | dépend du gap séquence | n (log(n))2 | 1 | Non | | -| **Tri Comptage** | n + r | n + r | n + r | n + r | Oui | r - le plus grand nombre dans la liste | -| **Tri Radix** | n \* k | n \* k | n \* k | n + k | Non | k - longueur du plus long index | - -> ℹ️ A few more [projects](https://trekhleb.dev/projects/) and [articles](https://trekhleb.dev/blog/) about JavaScript and algorithms on [trekhleb.dev](https://trekhleb.dev) diff --git a/README.he-IL.md b/README.he-IL.md deleted file mode 100644 index 43ef196e60..0000000000 --- a/README.he-IL.md +++ /dev/null @@ -1,370 +0,0 @@ -# אלגוריתמים ומבני נתונים ב-JavaScript - -[![CI](https://github.com/trekhleb/javascript-algorithms/workflows/CI/badge.svg)](https://github.com/trekhleb/javascript-algorithms/actions?query=workflow%3ACI+branch%3Amaster) -[![codecov](https://codecov.io/gh/trekhleb/javascript-algorithms/branch/master/graph/badge.svg)](https://codecov.io/gh/trekhleb/javascript-algorithms) -![גודל המאגר](https://img.shields.io/github/repo-size/trekhleb/javascript-algorithms.svg) - -מאגר זה מכיל דוגמאות מבוססות JavaScript של אלגוריתמים ומבני נתונים פופולריים רבים. - -לכל אלגוריתם ומבנה נתונים יש README משלו עם הסברים קשורים וקישורים לקריאה נוספת (כולל קישורים לסרטוני YouTube). - -_קרא זאת בשפות אחרות:_ -[_简体中文_](README.zh-CN.md), -[_繁體中文_](README.zh-TW.md), -[_한국어_](README.ko-KR.md), -[_日本語_](README.ja-JP.md), -[_Polski_](README.pl-PL.md), -[_Français_](README.fr-FR.md), -[_Español_](README.es-ES.md), -[_Português_](README.pt-BR.md), -[_Русский_](README.ru-RU.md), -[_Türkçe_](README.tr-TR.md), -[_Italiana_](README.it-IT.md), -[_Bahasa Indonesia_](README.id-ID.md), -[_Українська_](README.uk-UA.md), -[_Arabic_](README.ar-AR.md), -[_Tiếng Việt_](README.vi-VN.md), -[_Deutsch_](README.de-DE.md), -[_Uzbek_](README.uz-UZ.md) - -*☝ שים לב שפרויקט זה מיועד למטרות לימוד ומחקר בלבד, ואינו מיועד לשימוש בייצור.* - -## מבני נתונים - -מבנה נתונים הוא דרך מסוימת לארגן ולאחסן נתונים במחשב כך שניתן לגשת אליהם ולשנות אותם ביעילות. ליתר דיוק, מבנה נתונים הוא אוסף של ערכי נתונים, היחסים ביניהם, והפונקציות או הפעולות שניתן ליישם על הנתונים. - -זכור שלכל מבנה נתונים יש את היתרונות והחסרונות שלו. חשוב לשים לב יותר לסיבה שבגללה אתה בוחר מבנה נתונים מסוים מאשר לאופן היישום שלו. - -`B` - מתחיל, `A` - מתקדם - -* `B` [רשימה מקושרת](src/data-structures/linked-list) -* `B` [רשימה מקושרת כפולה](src/data-structures/doubly-linked-list) -* `B` [תור](src/data-structures/queue) -* `B` [מחסנית](src/data-structures/stack) -* `B` [טבלת גיבוב](src/data-structures/hash-table) -* `B` [ערימה](src/data-structures/heap) - גרסאות מקסימום ומינימום -* `B` [תור עדיפויות](src/data-structures/priority-queue) -* `A` [עץ תחיליות](src/data-structures/trie) -* `A` [עץ](src/data-structures/tree) - * `A` [עץ חיפוש בינארי](src/data-structures/tree/binary-search-tree) - * `A` [עץ AVL](src/data-structures/tree/avl-tree) - * `A` [עץ אדום-שחור](src/data-structures/tree/red-black-tree) - * `A` [עץ מקטעים](src/data-structures/tree/segment-tree) - עם דוגמאות לשאילתות מינימום/מקסימום/סכום של טווח - * `A` [עץ פנוויק](src/data-structures/tree/fenwick-tree) (עץ בינארי מאונדקס) -* `A` [גרף](src/data-structures/graph) (מכוון ולא מכוון) -* `A` [קבוצה מופרדת](src/data-structures/disjoint-set) - מבנה נתונים של איחוד-מציאה או מיזוג-מציאה -* `A` [מסנן בלום](src/data-structures/bloom-filter) -* `A` [מטמון LRU](src/data-structures/lru-cache/) - מטמון פחות שימוש לאחרונה (LRU) - -## אלגוריתמים - -אלגוריתם הוא מפרט חד משמעי כיצד לפתור סוג של בעיות. זוהי קבוצה של כללים המגדירים במדויק רצף של פעולות. - -`B` - מתחיל, `A` - מתקדם - -### אלגוריתמים לפי נושא - -* **מתמטיקה** - * `B` [מניפולציה על ביטים](src/algorithms/math/bits) - קביעה/עדכון/ניקוי ביטים, הכפלה/חילוק ב-2, הפיכה לשלילי וכו' - * `B` [נקודה צפה בינארית](src/algorithms/math/binary-floating-point) - ייצוג בינארי של מספרים בנקודה צפה - * `B` [פקטוריאל](src/algorithms/math/factorial) - * `B` [מספר פיבונאצ'י](src/algorithms/math/fibonacci) - גרסאות קלאסיות וסגורות - * `B` [גורמים ראשוניים](src/algorithms/math/prime-factors) - מציאת גורמים ראשוניים וספירתם באמצעות משפט הארדי-רמנוג'אן - * `B` [בדיקת ראשוניות](src/algorithms/math/primality-test) (שיטת החלוקה הניסיונית) - * `B` [אלגוריתם אוקלידס](src/algorithms/math/euclidean-algorithm) - חישוב המחלק המשותף הגדול ביותר (GCD) - * `B` [המכפיל המשותף הקטן ביותר](src/algorithms/math/least-common-multiple) (LCM) - * `B` [נפה של ארטוסתנס](src/algorithms/math/sieve-of-eratosthenes) - מציאת כל המספרים הראשוניים עד לגבול כלשהו - * `B` [האם חזקה של שתיים](src/algorithms/math/is-power-of-two) - בדיקה אם מספר הוא חזקה של שתיים (אלגוריתמים נאיביים וביטיים) - * `B` [משולש פסקל](src/algorithms/math/pascal-triangle) - * `B` [מספר מרוכב](src/algorithms/math/complex-number) - מספרים מרוכבים ופעולות בסיסיות עליהם - * `B` [רדיאן ומעלות](src/algorithms/math/radian) - המרה מרדיאנים למעלות ובחזרה - * `B` [חזקה מהירה](src/algorithms/math/fast-powering) - * `B` [שיטת הורנר](src/algorithms/math/horner-method) - הערכת פולינום - * `B` [מטריצות](src/algorithms/math/matrix) - מטריצות ופעולות בסיסיות על מטריצות (כפל, טרנספוזיציה וכו') - * `B` [מרחק אוקלידי](src/algorithms/math/euclidean-distance) - מרחק בין שתי נקודות/וקטורים/מטריצות - * `A` [חלוקת מספר שלם](src/algorithms/math/integer-partition) - * `A` [שורש ריבועי](src/algorithms/math/square-root) - שיטת ניוטון - * `A` [אלגוריתם π של ליו הוי](src/algorithms/math/liu-hui) - חישובי π מקורבים על בסיס N-גונים - * `A` [התמרת פורייה הבדידה](src/algorithms/math/fourier-transform) - פירוק פונקציה של זמן (אות) לתדרים המרכיבים אותה - -* **קבוצות** - * `B` [מכפלה קרטזית](src/algorithms/sets/cartesian-product) - מכפלה של מספר קבוצות - * `B` [ערבוב פישר-ייטס](src/algorithms/sets/fisher-yates) - תמורה אקראית של רצף סופי - * `A` [קבוצת חזקה](src/algorithms/sets/power-set) - כל תתי הקבוצות של קבוצה (פתרונות ביטיים, מעקב לאחור וקסקדה) - * `A` [תמורות](src/algorithms/sets/permutations) (עם ובלי חזרות) - * `A` [צירופים](src/algorithms/sets/combinations) (עם ובלי חזרות) - * `A` [תת-רצף משותף ארוך ביותר](src/algorithms/sets/longest-common-subsequence) (LCS) - * `A` [תת-רצף עולה ארוך ביותר](src/algorithms/sets/longest-increasing-subsequence) - * `A` [על-רצף משותף קצר ביותר](src/algorithms/sets/shortest-common-supersequence) (SCS) - * `A` [בעיית התרמיל](src/algorithms/sets/knapsack-problem) - "0/1" ו"לא מוגבל" - * `A` [תת-מערך מקסימלי](src/algorithms/sets/maximum-subarray) - "כוח ברוטלי" ו"תכנות דינמי" (Kadane) גרסאות - * `A` [סכום צירוף](src/algorithms/sets/combination-sum) - מציאת כל הצירופים שיוצרים סכום ספציפי - -* **מחרוזות** - * `B` [מרחק המינג](src/algorithms/string/hamming-distance) - מספר העמדות שבהן הסמלים שונים - * `B` [פלינדרום](src/algorithms/string/palindrome) - בדיקה אם המחרוזת זהה בקריאה לאחור - * `A` [מרחק לוונשטיין](src/algorithms/string/levenshtein-distance) - מרחק העריכה המינימלי בין שתי רצפים - * `A` [אלגוריתם קנות'-מוריס-פראט](src/algorithms/string/knuth-morris-pratt) (אלגוריתם KMP) - חיפוש תת-מחרוזת (התאמת תבנית) - * `A` [אלגוריתם Z](src/algorithms/string/z-algorithm) - חיפוש תת-מחרוזת (התאמת תבנית) - * `A` [אלגוריתם רבין קארפ](src/algorithms/string/rabin-karp) - חיפוש תת-מחרוזת - * `A` [תת-מחרוזת משותפת ארוכה ביותר](src/algorithms/string/longest-common-substring) - * `A` [התאמת ביטוי רגולרי](src/algorithms/string/regular-expression-matching) - -* **חיפושים** - * `B` [חיפוש לינארי](src/algorithms/search/linear-search) - * `B` [חיפוש קפיצות](src/algorithms/search/jump-search) (או חיפוש בלוקים) - חיפוש במערך ממוין - * `B` [חיפוש בינארי](src/algorithms/search/binary-search) - חיפוש במערך ממוין - * `B` [חיפוש אינטרפולציה](src/algorithms/search/interpolation-search) - חיפוש במערך ממוין עם התפלגות אחידה - -* **מיון** - * `B` [מיון בועות](src/algorithms/sorting/bubble-sort) - * `B` [מיון בחירה](src/algorithms/sorting/selection-sort) - * `B` [מיון הכנסה](src/algorithms/sorting/insertion-sort) - * `B` [מיון ערימה](src/algorithms/sorting/heap-sort) - * `B` [מיון מיזוג](src/algorithms/sorting/merge-sort) - * `B` [מיון מהיר](src/algorithms/sorting/quick-sort) - יישומים במקום ולא במקום - * `B` [מיון צדפות](src/algorithms/sorting/shell-sort) - * `B` [מיון ספירה](src/algorithms/sorting/counting-sort) - * `B` [מיון בסיס](src/algorithms/sorting/radix-sort) - * `B` [מיון דלי](src/algorithms/sorting/bucket-sort) - -* **רשימות מקושרות** - * `B` [מעבר ישר](src/algorithms/linked-list/traversal) - * `B` [מעבר הפוך](src/algorithms/linked-list/reverse-traversal) - -* **עצים** - * `B` [חיפוש לעומק](src/algorithms/tree/depth-first-search) (DFS) - * `B` [חיפוש לרוחב](src/algorithms/tree/breadth-first-search) (BFS) - -* **גרפים** - * `B` [חיפוש לעומק](src/algorithms/graph/depth-first-search) (DFS) - * `B` [חיפוש לרוחב](src/algorithms/graph/breadth-first-search) (BFS) - * `B` [אלגוריתם קרוסקל](src/algorithms/graph/kruskal) - מציאת עץ פורש מינימלי (MST) עבור גרף לא מכוון משוקלל - * `A` [אלגוריתם דייקסטרה](src/algorithms/graph/dijkstra) - מציאת המסלולים הקצרים ביותר לכל קודקודי הגרף מקודקוד יחיד - * `A` [אלגוריתם בלמן-פורד](src/algorithms/graph/bellman-ford) - מציאת המסלולים הקצרים ביותר לכל קודקודי הגרף מקודקוד יחיד - * `A` [אלגוריתם פלויד-וורשל](src/algorithms/graph/floyd-warshall) - מציאת המסלולים הקצרים ביותר בין כל זוגות הקודקודים - * `A` [זיהוי מעגל](src/algorithms/graph/detect-cycle) - עבור גרפים מכוונים ולא מכוונים (גרסאות מבוססות DFS וקבוצה מופרדת) - * `A` [אלגוריתם פרים](src/algorithms/graph/prim) - מציאת עץ פורש מינימלי (MST) עבור גרף לא מכוון משוקלל - * `A` [מיון טופולוגי](src/algorithms/graph/topological-sorting) - שיטת DFS - * `A` [נקודות חיתוך](src/algorithms/graph/articulation-points) - אלגוריתם טרג'ן (מבוסס DFS) - * `A` [גשרים](src/algorithms/graph/bridges) - אלגוריתם מבוסס DFS - * `A` [מסלול ומעגל אוילר](src/algorithms/graph/eulerian-path) - אלגוריתם פלרי - ביקור בכל קשת בדיוק פעם אחת - * `A` [מעגל המילטון](src/algorithms/graph/hamiltonian-cycle) - ביקור בכל קודקוד בדיוק פעם אחת - * `A` [רכיבים קשירים חזק](src/algorithms/graph/strongly-connected-components) - אלגוריתם קוסרג'ו - * `A` [בעיית הסוכן הנוסע](src/algorithms/graph/travelling-salesman) - המסלול הקצר ביותר האפשרי שמבקר בכל עיר וחוזר לעיר המוצא - -* **הצפנה** - * `B` [גיבוב פולינומי](src/algorithms/cryptography/polynomial-hash) - פונקציית גיבוב מתגלגלת המבוססת על פולינום - * `B` [צופן גדר מסילה](src/algorithms/cryptography/rail-fence-cipher) - אלגוריתם הצפנת טרנספוזיציה להצפנת הודעות - * `B` [צופן קיסר](src/algorithms/cryptography/caesar-cipher) - צופן החלפה פשוט - * `B` [צופן היל](src/algorithms/cryptography/hill-cipher) - צופן החלפה המבוסס על אלגברה לינארית - -* **למידת מכונה** - * `B` [NanoNeuron](https://github.com/trekhleb/nano-neuron) - 7 פונקציות JS פשוטות שמדגימות כיצד מכונות יכולות ללמוד באמת (תפוצה קדימה/אחורה) - * `B` [k-NN](src/algorithms/ml/knn) - אלגוריתם סיווג k-השכנים הקרובים ביותר - * `B` [k-Means](src/algorithms/ml/k-means) - אלגוריתם אשכול k-Means - -* **עיבוד תמונה** - * `B` [Seam Carving](src/algorithms/image-processing/seam-carving) - אלגוריתם שינוי גודל תמונה מודע תוכן - -* **סטטיסטיקה** - * `B` [משקל אקראי](src/algorithms/statistics/weighted-random) - בחירת פריט אקראי מהרשימה על בסיס משקלי הפריטים - -* **אלגוריתמים אבולוציוניים** - * `A` [אלגוריתם גנטי](https://github.com/trekhleb/self-parking-car-evolution) - דוגמה לאופן שבו ניתן ליישם אלגוריתם גנטי לאימון מכוניות בחניה עצמית - -* **לא מסווג** - * `B` [מגדלי האנוי](src/algorithms/uncategorized/hanoi-tower) - * `B` [סיבוב מטריצה ריבועית](src/algorithms/uncategorized/square-matrix-rotation) - אלגוריתם במקום - * `B` [משחק הקפיצות](src/algorithms/uncategorized/jump-game) - דוגמאות למעקב לאחור, תכנות דינמי (מלמעלה למטה + מלמטה למעלה) וחמדני - * `B` [מסלולים ייחודיים](src/algorithms/uncategorized/unique-paths) - דוגמאות למעקב לאחור, תכנות דינמי ומבוססות על משולש פסקל - * `B` [מדרגות גשם](src/algorithms/uncategorized/rain-terraces) - בעיית לכידת מי גשם (גרסאות תכנות דינמי וכוח ברוטלי) - * `B` [מדרגות רקורסיביות](src/algorithms/uncategorized/recursive-staircase) - ספירת מספר הדרכים להגיע לראש (4 פתרונות) - * `B` [הזמן הטוב ביותר לקנות ולמכור מניות](src/algorithms/uncategorized/best-time-to-buy-sell-stocks) - דוגמאות לחלוקה וכיבוש ומעבר אחד - * `A` [בעיית N-המלכות](src/algorithms/uncategorized/n-queens) - * `A` [סיור הפרש](src/algorithms/uncategorized/knight-tour) - -### אלגוריתמים לפי פרדיגמה - -פרדיגמה אלגוריתמית היא שיטה או גישה כללית המונחת בבסיס התכנון של מחלקת אלגוריתמים. זוהי הפשטה גבוהה יותר מהמושג של אלגוריתם, בדיוק כפי שאלגוריתם הוא הפשטה גבוהה יותר מתוכנית מחשב. - -* **כוח ברוטלי** - בודק את כל האפשרויות ובוחר את הפתרון הטוב ביותר - * `B` [חיפוש לינארי](src/algorithms/search/linear-search) - * `B` [מדרגות גשם](src/algorithms/uncategorized/rain-terraces) - בעיית לכידת מי גשם - * `B` [מדרגות רקורסיביות](src/algorithms/uncategorized/recursive-staircase) - ספירת מספר הדרכים להגיע לראש - * `A` [תת-מערך מקסימלי](src/algorithms/sets/maximum-subarray) - * `A` [בעיית הסוכן הנוסע](src/algorithms/graph/travelling-salesman) - המסלול הקצר ביותר האפשרי שמבקר בכל עיר וחוזר לעיר המוצא - * `A` [התמרת פורייה הבדידה](src/algorithms/math/fourier-transform) - פירוק פונקציה של זמן (אות) לתדרים המרכיבים אותה - -* **חמדני** - בוחר את האפשרות הטובה ביותר בזמן הנוכחי, ללא כל התחשבות בעתיד - * `B` [משחק הקפיצות](src/algorithms/uncategorized/jump-game) - * `A` [בעיית התרמיל הלא מוגבל](src/algorithms/sets/knapsack-problem) - * `A` [אלגוריתם דייקסטרה](src/algorithms/graph/dijkstra) - מציאת המסלולים הקצרים ביותר לכל קודקודי הגרף - * `A` [אלגוריתם פרים](src/algorithms/graph/prim) - מציאת עץ פורש מינימלי (MST) עבור גרף לא מכוון משוקלל - * `A` [אלגוריתם קרוסקל](src/algorithms/graph/kruskal) - מציאת עץ פורש מינימלי (MST) עבור גרף לא מכוון משוקלל - -* **חלוקה וכיבוש** - מחלק את הבעיה לחלקים קטנים יותר ואז פותר חלקים אלה - * `B` [חיפוש בינארי](src/algorithms/search/binary-search) - * `B` [מגדלי האנוי](src/algorithms/uncategorized/hanoi-tower) - * `B` [משולש פסקל](src/algorithms/math/pascal-triangle) - * `B` [אלגוריתם אוקלידס](src/algorithms/math/euclidean-algorithm) - חישוב המחלק המשותף הגדול ביותר (GCD) - * `B` [מיון מיזוג](src/algorithms/sorting/merge-sort) - * `B` [מיון מהיר](src/algorithms/sorting/quick-sort) - * `B` [חיפוש לעומק בעץ](src/algorithms/tree/depth-first-search) (DFS) - * `B` [חיפוש לעומק בגרף](src/algorithms/graph/depth-first-search) (DFS) - * `B` [מטריצות](src/algorithms/math/matrix) - יצירה ומעבר על מטריצות בצורות שונות - * `B` [משחק הקפיצות](src/algorithms/uncategorized/jump-game) - * `B` [חזקה מהירה](src/algorithms/math/fast-powering) - * `B` [הזמן הטוב ביותר לקנות ולמכור מניות](src/algorithms/uncategorized/best-time-to-buy-sell-stocks) - דוגמאות לחלוקה וכיבוש ומעבר אחד - * `A` [תמורות](src/algorithms/sets/permutations) (עם ובלי חזרות) - * `A` [צירופים](src/algorithms/sets/combinations) (עם ובלי חזרות) - * `A` [תת-מערך מקסימלי](src/algorithms/sets/maximum-subarray) - -* **תכנות דינמי** - בניית פתרון באמצעות תת-פתרונות שנמצאו קודם לכן - * `B` [מספר פיבונאצ'י](src/algorithms/math/fibonacci) - * `B` [משחק הקפיצות](src/algorithms/uncategorized/jump-game) - * `B` [מסלולים ייחודיים](src/algorithms/uncategorized/unique-paths) - * `B` [מדרגות גשם](src/algorithms/uncategorized/rain-terraces) - בעיית לכידת מי גשם - * `B` [מדרגות רקורסיביות](src/algorithms/uncategorized/recursive-staircase) - ספירת מספר הדרכים להגיע לראש - * `B` [Seam Carving](src/algorithms/image-processing/seam-carving) - אלגוריתם שינוי גודל תמונה מודע תוכן - * `A` [מרחק לוונשטיין](src/algorithms/string/levenshtein-distance) - מרחק העריכה המינימלי בין שתי רצפים - * `A` [תת-רצף משותף ארוך ביותר](src/algorithms/sets/longest-common-subsequence) (LCS) - * `A` [תת-מחרוזת משותפת ארוכה ביותר](src/algorithms/string/longest-common-substring) - * `A` [תת-רצף עולה ארוך ביותר](src/algorithms/sets/longest-increasing-subsequence) - * `A` [על-רצף משותף קצר ביותר](src/algorithms/sets/shortest-common-supersequence) - * `A` [בעיית התרמיל 0/1](src/algorithms/sets/knapsack-problem) - * `A` [חלוקת מספר שלם](src/algorithms/math/integer-partition) - * `A` [תת-מערך מקסימלי](src/algorithms/sets/maximum-subarray) - * `A` [אלגוריתם בלמן-פורד](src/algorithms/graph/bellman-ford) - מציאת המסלולים הקצרים ביותר לכל קודקודי הגרף - * `A` [אלגוריתם פלויד-וורשל](src/algorithms/graph/floyd-warshall) - מציאת המסלולים הקצרים ביותר בין כל זוגות הקודקודים - * `A` [התאמת ביטוי רגולרי](src/algorithms/string/regular-expression-matching) - -* **מעקב לאחור** - בדומה לכוח ברוטלי, מנסה לייצר את כל הפתרונות האפשריים, אך בכל פעם שאתה מייצר פתרון הבא אתה בודק אם הוא עומד בכל התנאים, ורק אז ממשיך לייצר פתרונות הבאים. אחרת, חוזר אחורה, והולך בנתיב אחר של מציאת פתרון. בדרך כלל מעבר DFS של מרחב המצבים משמש. - * `B` [משחק הקפיצות](src/algorithms/uncategorized/jump-game) - * `B` [מסלולים ייחודיים](src/algorithms/uncategorized/unique-paths) - * `B` [קבוצת חזקה](src/algorithms/sets/power-set) - כל תתי הקבוצות של קבוצה - * `A` [מעגל המילטון](src/algorithms/graph/hamiltonian-cycle) - ביקור בכל קודקוד בדיוק פעם אחת - * `A` [בעיית N-המלכות](src/algorithms/uncategorized/n-queens) - * `A` [סיור הפרש](src/algorithms/uncategorized/knight-tour) - * `A` [סכום צירוף](src/algorithms/sets/combination-sum) - מציאת כל הצירופים שיוצרים סכום ספציפי - -* **סניף וחסום** - זוכר את הפתרון בעלות הנמוכה ביותר שנמצא בכל שלב של החיפוש המעקב לאחור, ומשתמש בעלות של הפתרון בעלות הנמוכה ביותר שנמצא עד כה כגבול תחתון על העלות של פתרון בעלות מינימלית לבעיה, על מנת לפסול פתרונות חלקיים עם עלויות גדולות יותר מהפתרון בעלות הנמוכה ביותר שנמצא עד כה. בדרך כלל מעבר BFS בשילוב עם מעבר DFS של עץ מרחב המצבים משמש. - -## כיצד להשתמש במאגר זה - -**התקנת כל התלויות** - -``` -npm install -``` - -**הרצת ESLint** - -ייתכן שתרצה להריץ אותו כדי לבדוק את איכות הקוד. - -``` -npm run lint -``` - -**הרצת כל הבדיקות** - -``` -npm test -``` - -**הרצת בדיקות לפי שם** - -``` -npm test -- 'LinkedList' -``` - -**פתרון בעיות** - -אם הלינטינג או הבדיקות נכשלים, נסה למחוק את התיקייה `node_modules` ולהתקין מחדש את חבילות npm: - -``` -rm -rf ./node_modules -npm i -``` - -בנוסף, ודא שאתה משתמש בגרסת Node נכונה (`>=16`). אם אתה משתמש ב-[nvm](https://github.com/nvm-sh/nvm) לניהול גרסאות Node, תוכל להריץ `nvm use` מתיקיית השורש של הפרויקט והגרסה הנכונה תיבחר. - -**שטח משחקים** - -אתה יכול לשחק עם מבני נתונים ואלגוריתמים בקובץ `./src/playground/playground.js` ולכתוב -בדיקות עבורו ב-`./src/playground/__test__/playground.test.js`. - -לאחר מכן פשוט הרץ את הפקודה הבאה כדי לבדוק אם קוד שטח המשחקים שלך עובד כמצופה: - -``` -npm test -- 'playground' -``` - -## מידע שימושי - -### הפניות - -- [▶ מבני נתונים ואלגוריתמים ב-YouTube](https://www.youtube.com/playlist?list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) -- [✍🏻 סקיצות של מבני נתונים](https://okso.app/showcase/data-structures) - -### סימון ה-O הגדול - -סימון *ה-O הגדול* משמש לסיווג אלגוריתמים לפי כיצד זמן הריצה או דרישות המרחב שלהם גדלים ככל שגודל הקלט גדל. -בתרשים שלהלן תוכל למצוא את הסדרים הנפוצים ביותר של צמיחת אלגוריתמים המצוינים בסימון ה-O הגדול. - -![גרפי ה-O הגדול](./assets/big-o-graph.png) - -מקור: [Big O Cheat Sheet](http://bigocheatsheet.com/). - -להלן רשימה של כמה מסימוני ה-O הגדול הנפוצים ביותר והשוואות הביצועים שלהם מול גדלים שונים של נתוני קלט. - -| סימון ה-O הגדול | חישובים ל-10 אלמנטים | חישובים ל-100 אלמנטים | חישובים ל-1000 אלמנטים | -| ---------------- | --------------------- | ---------------------- | ----------------------- | -| **O(1)** | 1 | 1 | 1 | -| **O(log N)** | 3 | 6 | 9 | -| **O(N)** | 10 | 100 | 1000 | -| **O(N log N)** | 30 | 600 | 9000 | -| **O(N^2)** | 100 | 10000 | 1000000 | -| **O(2^N)** | 1024 | 1.26e+29 | 1.07e+301 | -| **O(N!)** | 3628800 | 9.3e+157 | 4.02e+2567 | - -### מורכבות פעולות מבני נתונים - -| מבנה נתונים | גישה | חיפוש | הכנסה | מחיקה | הערות | -| --------------------- | :-----: | :-----: | :-----: | :-----: | :------ | -| **מערך** | 1 | n | n | n | | -| **מחסנית** | n | n | 1 | 1 | | -| **תור** | n | n | 1 | 1 | | -| **רשימה מקושרת** | n | n | 1 | n | | -| **טבלת גיבוב** | - | n | n | n | במקרה של פונקציית גיבוב מושלמת, העלויות יהיו O(1) | -| **עץ חיפוש בינארי** | n | n | n | n | במקרה של עץ מאוזן, העלויות יהיו O(log(n)) | -| **עץ B** | log(n) | log(n) | log(n) | log(n) | | -| **עץ אדום-שחור** | log(n) | log(n) | log(n) | log(n) | | -| **עץ AVL** | log(n) | log(n) | log(n) | log(n) | | -| **מסנן בלום** | - | 1 | 1 | - | תוצאות חיוביות שגויות אפשריות בעת חיפוש | - -### מורכבות אלגוריתמי מיון מערכים - -| שם | הטוב ביותר | ממוצע | הגרוע ביותר | זיכרון | יציב | הערות | -| ------------------- | :----------------: | :-----------------: | :------------------: | :-----: | :-----: | :------ | -| **מיון בועות** | n | n2 | n2 | 1 | כן | | -| **מיון הכנסה** | n | n2 | n2 | 1 | כן | | -| **מיון בחירה** | n2 | n2 | n2 | 1 | לא | | -| **מיון ערימה** | n log(n) | n log(n) | n log(n) | 1 | לא | | -| **מיון מיזוג** | n log(n) | n log(n) | n log(n) | n | כן | | -| **מיון מהיר** | n log(n) | n log(n) | n2 | log(n) | לא | מיון מהיר בדרך כלל מבוצע במקום עם O(log(n)) שטח מחסנית | -| **מיון צדפות** | n log(n) | תלוי ברצף הפער | n (log(n))2 | 1 | לא | | -| **מיון ספירה** | n + r | n + r | n + r | n + r | כן | r - המספר הגדול ביותר במערך | -| **מיון בסיס** | n * k | n * k | n * k | n + k | כן | k - אורך המפתח הארוך ביותר | - -## תומכי הפרויקט - -> אתה יכול לתמוך בפרויקט זה דרך ❤️️ [GitHub](https://github.com/sponsors/trekhleb) או ❤️️ [Patreon](https://www.patreon.com/trekhleb). - -[אנשים שתומכים בפרויקט זה](https://github.com/trekhleb/javascript-algorithms/blob/master/BACKERS.md) `∑ = 1` - -## מחבר - -[@trekhleb](https://trekhleb.dev) - -כמה [פרויקטים](https://trekhleb.dev/projects/) ו[מאמרים](https://trekhleb.dev/blog/) נוספים על JavaScript ואלגוריתמים ב-[trekhleb.dev](https://trekhleb.dev)* `B` [משחק הקפיצות](src/algorithms/uncategor * `B` [חיפוש בינארי](src/algorithms diff --git a/README.id-ID.md b/README.id-ID.md deleted file mode 100644 index 9dd908c2e6..0000000000 --- a/README.id-ID.md +++ /dev/null @@ -1,311 +0,0 @@ -# Algoritme dan Struktur Data Javascript - -[![CI](https://github.com/trekhleb/javascript-algorithms/workflows/CI/badge.svg)](https://github.com/trekhleb/javascript-algorithms/actions?query=workflow%3ACI+branch%3Amaster) -[![codecov](https://codecov.io/gh/trekhleb/javascript-algorithms/branch/master/graph/badge.svg)](https://codecov.io/gh/trekhleb/javascript-algorithms) - -Repositori ini berisi contoh-contoh algoritme dan struktur data yang populer menggunakan JavaScript. - -Setiap algoritma dan struktur data memiliki README-nya tersendiri dengan penjelasan yang berkaitan dan tautan untuk bacaan lebih lanjut (termasuk tautan menuju video YouTube). - -_Baca ini dalam bahasa yang lain:_ -[_English_](https://github.com/trekhleb/javascript-algorithms/), -[_简体中文_](README.zh-CN.md), -[_繁體中文_](README.zh-TW.md), -[_한국어_](README.ko-KR.md), -[_日本語_](README.ja-JP.md), -[_Polski_](README.pl-PL.md), -[_Français_](README.fr-FR.md), -[_Español_](README.es-ES.md), -[_Português_](README.pt-BR.md), -[_Русский_](README.ru-RU.md), -[_Türk_](README.tr-TR.md), -[_Italiana_](README.it-IT.md), -[_Українська_](README.uk-UA.md), -[_Arabic_](README.ar-AR.md), -[_Tiếng Việt_](README.vi-VN.md), -[_Deutsch_](README.de-DE.md), -[_Uzbek_](README.uz-UZ.md) -[_עברית_](README.he-IL.md) - -_☝ Perhatikan bahwa proyek ini hanya dimaksudkan untuk tujuan pembelajaran dan riset, dan **tidak** dimaksudkan untuk digunakan sebagai produksi._ - -## Struktur Data - -Struktur data adalah cara tertentu untuk mengatur dan menyimpan data dalam komputer sehingga dapat diakses dan diubah secara efisien. Lebih tepatnya, struktur data adalah kumpulan dari nilai data, relasi di antara data-data, dan fungsi atau operasi yang dapat diterapkan pada data. - -`P` - Pemula, `L` - Lanjutan - -- `P` [Senarai Berantai](src/data-structures/linked-list) -- `P` [Senarai Berantai Ganda](src/data-structures/doubly-linked-list) -- `P` [Antrean](src/data-structures/queue) -- `P` [Tumpukan](src/data-structures/stack) -- `P` [Tabel Hash](src/data-structures/hash-table) -- `P` [_Heap_](src/data-structures/heap) - versi _heap_ maksimum dan minimum -- `P` [Antrean Prioritas](src/data-structures/priority-queue) -- `L` [_Trie_](src/data-structures/trie) -- `L` [Pohon](src/data-structures/tree) - - `L` [Pohon Telusur Biner](src/data-structures/tree/binary-search-tree) - - `L` [_AVL Tree_](src/data-structures/tree/avl-tree) - - `L` [Pohon Merah Hitam](src/data-structures/tree/red-black-tree) - - `L` [_Segment Tree_](src/data-structures/tree/segment-tree) - dengan contoh min/max/sum range query - - `L` [Pohon Fenwick](src/data-structures/tree/fenwick-tree) (Binary Indexed Tree) -- `L` [Graf](src/data-structures/graph) (directed dan undirected) -- `L` [_Disjoint Set_](src/data-structures/disjoint-set) -- `L` [_Bloom Filter_](src/data-structures/bloom-filter) - -## Algoritma - -Algoritma adalah sebuah perincian yang jelas tentang cara untuk memecahkan suatu masalah. Ia adalah sekumpulan aturan yang menjelaskan secara tepat urutan-urutan dari sebuah operasi. - -`P` - Pemula, `L` - Lanjutan - -### Algoritma Berdasarkanan Topik - -- **Matematika** - - `P` [Manipulasi Bit](src/algorithms/math/bits) - menetapkan/mendapatkan/memperbarui/menghapus bit, perkalian/pembagian dengan angka 2, membuat bilangan negatif dan lain-lain. - - `P` [Faktorial](src/algorithms/math/Faktorial) - - `P` [Bilangan Fibonacci](src/algorithms/math/fibonacci) - versi klasik dan bentuk tertutup - - `P` [Faktor Prima](src/algorithms/math/prime-factors) - menemukan faktor prima dan menghitungnya menggunakan teorema Hardy-Ramanujan - - `P` [Pengujian Bilangan Prima](src/algorithms/math/primality-test) (metode _trial division_) - - `P` [Algoritma Euclidean](src/algorithms/math/euclidean-algorithm) - menghitung Faktor Persekutuan Terbesar (FPB) - - `P` [_Least Common Multiple_](src/algorithms/math/least-common-multiple) (LCM) - - `P` [_Sieve of Eratosthenes_](src/algorithms/math/sieve-of-eratosthenes) - menemukan semua bilangan prima hingga batas yang ditentukan - - `P` [_Is Power of Two_](src/algorithms/math/is-power-of-two) - mengecek apakah sebuah bilangan adalah hasil dari pangkat dua (algoritma _naive_ dan _bitwise_) - - `P` [Segitiga Pascal](src/algorithms/math/pascal-triangle) - - `P` [Bilangan Kompleks](src/algorithms/math/complex-number) - bilangan kompleks dengan operasi dasarnya - - `P` [Radian & Derajat](src/algorithms/math/radian) - konversi radian ke derajat dan sebaliknya - - `P` [_Fast Powering_](src/algorithms/math/fast-powering) - - `P` [Metode Horner](src/algorithms/math/horner-method) - evaluasi polinomial - - `L` [Partisi Bilangan Bulat](src/algorithms/math/integer-partition) - - `L` [Akar Pangkat Dua](src/algorithms/math/square-root) - metode Newton - - `L` [Algoritma π Liu Hui](src/algorithms/math/liu-hui) - perkiraan perhitungan π berdasarkan segibanyak - - `L` [Transformasi Diskrit Fourier](src/algorithms/math/fourier-transform) - menguraikan fungsi waktu (sinyal) menjadi frekuensi yang menyusunnya -- **Himpunan** - - `P` [Produk Kartesian](src/algorithms/sets/cartesian-product) - hasil dari beberapa himpunan - - `P` [Pengocokan Fisher–Yates](src/algorithms/sets/fisher-yates) - permutasi acak dari sebuah urutan terhingga - - `L` [Himpunan Kuasa](src/algorithms/sets/power-set) - semua himpunan bagian dari sebuah himpunan - - `L` [Permutasi](src/algorithms/sets/permutations) (dengan dan tanpa pengulangan) - - `L` [Kombinasi](src/algorithms/sets/combinations) (dengan dan tanpa pengulangan) - - `L` [_Longest Common Subsequence_](src/algorithms/sets/longest-common-subsequence) (LCS) - - `L` [_Longest Increasing Subsequence_](src/algorithms/sets/longest-increasing-subsequence) - - `L` [_Shortest Common Supersequence_](src/algorithms/sets/shortest-common-supersequence) (SCS) - - `L` [Permasalahan Knapsack](src/algorithms/sets/knapsack-problem) - "0/1" dan yang tidak "dibatasi" - - `L` [Upalarik Maksimum](src/algorithms/sets/maximum-subarray) - "_Brute Force_" dan "Pemrograman Dinamis" versi Kadane - - `L` [_Combination Sum_](src/algorithms/sets/combination-sum) - menemukan semua kombinasi yang membentuk jumlah tertentu -- **String** - - `P` [Jarak Hamming](src/algorithms/string/hamming-distance) - jumlah posisi di mana ditemukan simbol-simbol yang berbeda - - `L` [Algoritma Jarak Levenshtein](src/algorithms/string/levenshtein-distance) - _edit distance_ minimum antara dua urutan - - `L` [Algoritma Knuth–Morris–Pratt](src/algorithms/string/knuth-morris-pratt) (Algoritma KMP) - pencarian substring (pencocokan pola) - - `L` [Algoritma Z](src/algorithms/string/z-algorithm) - pencarian substring (pencocokan pola) - - `L` [Algoritma Rabin Karp](src/algorithms/string/rabin-karp) - pencarian substring - - `L` [_Longest Common Substring_](src/algorithms/string/longest-common-substring) - - `L` [Pencocokan Ekspresi Reguler](src/algorithms/string/regular-expression-matching) -- **Pencarian** - - `P` [Pencarian Linier](src/algorithms/search/linear-search) - - `P` [Pencarian Lompat](src/algorithms/search/jump-search) (atau Block Search) - pencarian di larik tersortir - - `P` [Pencarian Biner](src/algorithms/search/binary-search) - pencarian di larik tersortir - - `P` [Pencarian Interpolasi](src/algorithms/search/interpolation-search) - pencarian di larik tersortir yang terdistribusi seragam -- **Penyortiran** - - `P` [Sortir Gelembung](src/algorithms/sorting/bubble-sort) - - `P` [Sortir Seleksi](src/algorithms/sorting/selection-sort) - - `P` [Sortir Sisipan](src/algorithms/sorting/insertion-sort) - - `P` [Sortir _Heap_](src/algorithms/sorting/heap-sort) - - `P` [Sortir Gabungan](src/algorithms/sorting/merge-sort) - - `P` [Sortir Cepat](src/algorithms/sorting/quick-sort) - implementasi _in-place_ dan _non-in-place_ - - `P` [Sortir Shell](src/algorithms/sorting/shell-sort) - - `P` [Sortir Perhitungan](src/algorithms/sorting/counting-sort) - - `P` [Sortir Akar](src/algorithms/sorting/radix-sort) -- **Senarai Berantai** - - `P` [Lintas Lurus](src/algorithms/linked-list/traversal) - - `P` [Lintas Terbalik](src/algorithms/linked-list/reverse-traversal) -- **Pohon** - - `P` [Pencarian Kedalaman Pertama](src/algorithms/tree/depth-first-search) (DFS) - - `P` [Pencarian Luas Pertama](src/algorithms/tree/breadth-first-search) (BFS) -- **Graf** - - `P` [Pencarian Kedalaman Pertama](src/algorithms/graph/depth-first-search) (DFS) - - `P` [Pencarian Luas Pertama](src/algorithms/graph/breadth-first-search) (BFS) - - `P` [Algoritma Kruskal](src/algorithms/graph/kruskal) - mencari rentang pohon minimum untuk graf tidak berarah berbobot - - `L` [Algoritma Dijkstra](src/algorithms/graph/dijkstra) - menemukan jalur terpendek ke semua sudut graf dari sudut tunggal - - `L` [Algoritma Bellman-Ford](src/algorithms/graph/bellman-ford) - menemukan jalur terpendek ke semua sudut graf dari sudut tunggal - - `L` [Algoritma Floyd-Warshall](src/algorithms/graph/floyd-warshall) - menemukan jalur terpendek antara semua pasangan sudut - - `L` [Mendeteksi Siklus](src/algorithms/graph/detect-cycle) - untuk graf berarah dan tidak berarah (berdasarkan versi DFS dan _Disjoint Set_) - - `L` [ALgoritma Prim](src/algorithms/graph/prim) - mencari rentang pohon minimum untuk graf tidak berarah berbobot - - `L` [Sortir Topologi](src/algorithms/graph/topological-sorting) - metode DFS - - `L` [Poin Artikulasi](src/algorithms/graph/articulation-points) - Algoritma Tarjan (berdasarkan DFS) - - `L` [Jembatan](src/algorithms/graph/bridges) - Algoritma berdasarkan DFS - - `L` [Jalur dan Sirkuit Eulerian](src/algorithms/graph/eulerian-path) - Algoritma Fleury - Mengunjungi setiap tepinya tepat satu kali - - `L` [Siklus Hamiltonian](src/algorithms/graph/hamiltonian-cycle) - mengunjungi setiap sudutnya tepat satu kali - - `L` [Komponen yang Terkoneksi dengan Kuat](src/algorithms/graph/strongly-connected-components) - Algoritma Kosaraju - - `L` [Permasalahan Penjual Keliling](src/algorithms/graph/travelling-salesman) - kemungkinan rute terpendek untuk mengunjungi setiap kota dan kembali lagi ke kota asal -- **Kriptografi** - - `P` [Polinomial Hash](src/algorithms/cryptography/polynomial-hash) - fungsi rolling hash berdasarkan polinomial - - `P` [Sandi Caesar](src/algorithms/cryptography/caesar-cipher) - sandi pengganti sederhana -- **Pembelajaran Mesin** - - `P` [NanoNeuron](https://github.com/trekhleb/nano-neuron) - 7 fungsi JS sederhana yang mengilustrasikan bagaimana mesin-mesin dapat benar-benar belajar (perambatan maju/mundur) -- **Tidak Dikategorikan** - - `P` [Menara Hanoi](src/algorithms/uncategorized/hanoi-tower) - - `P` [Perputaran Matriks Persegi](src/algorithms/uncategorized/square-matrix-rotation) - algoritma _in-place_ - - `P` [Permainan Melompat](src/algorithms/uncategorized/jump-game) - runut-balik, pemrograman dinamis (atas ke bawah + bawah ke atas) and contoh-contoh _greedy_ - - `P` [_Unique Paths_](src/algorithms/uncategorized/unique-paths) - runut-balik, pemrograman dinamis and contoh-contoh beradsarkan Segitiga Pascal - - `P` [_Rain Terraces_](src/algorithms/uncategorized/rain-terraces) - permasalahan _trapping rain water_ (versi pemrograman dinamis and _brute force_) - - `P` [Tangga Rekursif](src/algorithms/uncategorized/recursive-staircase) - menghitung jumlah cara untuk mencapai ke atas tangga (4 solusi) - - `L` [Permainan N-Queen](src/algorithms/uncategorized/n-queens) - - `L` [Permainan Knight's Tour](src/algorithms/uncategorized/knight-tour) - -### Algoritma Berdasarkan Paradigma - -Paradigma algoritmik adalah sebuah metode atau pendekatan umum yang mendasari desain sebuah tingkatan algoritma. Paradigma algoritmik merupakan abstraksi yang lebih tinggi dari gagasan sebuah algoritma, seperti halnya sebuah algoritma merupakan abstraksi yang lebih tinggi dari sebuah program komputer. - -- **_Brute Force_** - melihat ke semua kemungkinan dan memilih solusi yang terbaik - - `P` [Pencarian Linier](src/algorithms/search/linear-search) - - `P` [_Rain Terraces_](src/algorithms/uncategorized/rain-terraces) - permasalahan _trapping rain water_ - - `P` [Tangga Rekursif](src/algorithms/uncategorized/recursive-staircase) - menghitung jumlah cara untuk mencapai ke atas tangga - - `L` [Upalarik Maksimum](src/algorithms/sets/maximum-subarray) - - `L` [Permasalahan Penjual Keliling](src/algorithms/graph/travelling-salesman) - kemungkinan rute terpendek untuk mengunjungi setiap kota dan kembali lagi ke kota asal - - `L` [Transformasi Diskrit Fourier](src/algorithms/math/fourier-transform) - menguraikan fungsi waktu (sinyal) menjadi frekuensi yang menyusunnya -- **_Greedy_** - memilih pilihan terbaik pada saat ini tanpa mempertimbangkan masa yang akan datang - - `P` [Permainan Melompat](src/algorithms/uncategorized/jump-game) - - `L` [Permasalahan Knapsack yang Tidak Dibatasi](src/algorithms/sets/knapsack-problem) - - `L` [Algoritma Dijkstra](src/algorithms/graph/dijkstra) - menemukan jalur terpendek ke semua sudut graf dari sudut tunggal - - `L` [Algoritma Prim](src/algorithms/graph/prim) - mencari rentang pohon minimum untuk graf tidak berarah berbobot - - `L` [Algoritma Kruskal](src/algorithms/graph/kruskal) - mencari rentang pohon minimum untuk graf tidak berarah berbobot -- **Memecah dan Menaklukkan** - membagi masalah menjadi bagian-bagian yang kecil, lalu memcahkan bagian-bagian tersebut - - `P` [Pencarian Biner](src/algorithms/search/binary-search) - - `P` [Menara Hanoi](src/algorithms/uncategorized/hanoi-tower) - - `P` [Segitiga Pascal](src/algorithms/math/pascal-triangle) - - `P` [Algoritma Euclidean](src/algorithms/math/euclidean-algorithm) - menghitung Faktor Persekutuan Terbesar (FPB) - - `P` [Sortir Gabungan](src/algorithms/sorting/merge-sort) - - `P` [Sortir Cepat](src/algorithms/sorting/quick-sort) - - `P` [Pencarian Kedalaman Pertama untuk Pohon](src/algorithms/tree/depth-first-search) (DFS) - - `P` [Pencarian Kedalaman Pertama untuk Graf](src/algorithms/graph/depth-first-search) (DFS) - - `P` [Permainan Melompat](src/algorithms/uncategorized/jump-game) - - `P` [_Fast Powering_](src/algorithms/math/fast-powering) - - `L` [Permutasi](src/algorithms/sets/permutations) (dengan dan tanpa pengulangan) - - `L` [Kombinasi](src/algorithms/sets/combinations) (dengan dan tanpa pengulangan) -- **Pemrograman Dinamis** - membangun sebuah solusi menggunakan upasolusi yang ditemukan sebelumnya - - `P` [Bilangan Fibonacci](src/algorithms/math/fibonacci) - - `P` [Permainan Melompat](src/algorithms/uncategorized/jump-game) - - `P` [_Unique Paths_](src/algorithms/uncategorized/unique-paths) - - `P` [_Rain Terraces_](src/algorithms/uncategorized/rain-terraces) - permasalahan _trapping rain water_ - - `P` [Tangga Rekursif](src/algorithms/uncategorized/recursive-staircase) - menghitung jumlah cara untuk mencapai ke atas tangga - - `L` [Algoritma Jarak Levenshtein](src/algorithms/string/levenshtein-distance) - _edit distance_ minimum antara dua urutan - - `L` [_Longest Common Subsquence_](src/algorithms/sets/longest-common-subsequence) (LCS) - - `L` [_Longest Common Substring_](src/algorithms/string/longest-common-substring) - - `L` [_Longest Increasing Subsequence_](src/algorithms/sets/longest-increasing-subsequence) - - `L` [_Shortest Common Supersequence_](src/algorithms/sets/shortest-common-supersequence) - - `L` [Permasalahan Knapsack 0/1](src/algorithms/sets/knapsack-problem) - - `L` [Partisi Bilangan Bulat](src/algorithms/math/integer-partition) - - `L` [Upalarik Maksimum](src/algorithms/sets/maximum-subarray) - - `L` [Algoritma Bellman-Ford](src/algorithms/graph/bellman-ford) - menemukan jalur terpendek ke semua sudut graf dari sudut tunggal - - `L` [Algoritma Floyd-Warshall](src/algorithms/graph/floyd-warshall) - menemukan jalur terpendek antara semua pasangan sudut - - `L` [Pencocokan Ekspresi Reguler](src/algorithms/string/regular-expression-matching) -- **Runut-balik** - sama halnya dengan _brute force_, algoritma ini mencoba untuk menghasilkan segala kemungkinan solusi, tetapi setiap kali anda menghasilkan solusi selanjutnya, anda akan menguji apakah solusi tersebut memenuhi semua kondisi dan setelah itu baru akan menghasilkan solusi berikutnya. Apabila tidak, maka akan merunut-balik dan mencari solusi di jalur yang berbeda. Biasanya menggunakan lintas DFS dari ruang keadaan. - - `P` [Permainan Melompat](src/algorithms/uncategorized/jump-game) - - `P` [_Unique Paths_](src/algorithms/uncategorized/unique-paths) - - `P` [Himpunan Kuasa](src/algorithms/sets/power-set) - semua himpunan bagian dari sebuah himpunan - - `L` [Siklus Hamiltonian](src/algorithms/graph/hamiltonian-cycle) - mengunjungi setiap sudutnya tepat satu kali - - `L` [Permainan N-Queen](src/algorithms/uncategorized/n-queens) - - `L` [Permainan Knight's Tour](src/algorithms/uncategorized/knight-tour) - - `L` [_Combination Sum_](src/algorithms/sets/combination-sum) - menemukan semua kombinasi yang membentuk jumlah tertentu -- **_Mencabang dan Membatasi_** - digunakan untuk membuang solusi parsial dengan biaya yang lebih besar dari solusi dengan biaya yang terendah yang ditemukan sejauh ini dengan cara mengingat solusi dengan biaya terendah yang ditemukan pada setiap tahap dari pencarian runut-balik dan menggunakan biaya dari solusi dengan biaya terendah sejauh ini sebagai batas bawah pada biaya dari solusi dengan biaya yang paling sedikit untuk permasalahannya. Biasanya menggunakan lintas BFS yang berkombinasi dengan lintas DFS dari pohon ruang keadaan. - -## Cara menggunakan repositori ini - -**Meng-_install_ semua dependensi** - -``` -npm install -``` - -**Menjalankan ESLint** - -Anda dapat menjalankannya untuk memeriksa kualitas kode. - -``` -npm run lint -``` - -**Menjalankan semua tes** - -``` -npm test -``` - -**Menjalankan tes berdasarkan nama** - -``` -npm test -- 'LinkedList' -``` - -**_Playground_** - -Anda dapat bermain dengan algoritma dan struktur data di _file_ `./src/playground/playground.js` dan menuliskan tesnya di `./src/playground/__test__/playground.test.js`. - -Lalu, hanya tinggal menjalankan perintah berikut untuk mengetes apakah kode _playground_ anda bekerja sesuai dengan keinginan: - -``` -npm test -- 'playground' -``` - -## Informasi Bermanfaat - -### Referensi - -[▶ Algoritma dan Struktur Data di YouTube](https://www.youtube.com/playlist?list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) - -### Notasi _Big O_ - -Notasi _Big O_ digunakan untuk mengklasifikasikan algoritma berdasarkan durasi atau ruang yang dibutuhkan seiring bertambahnya _input_. Pada grafik dibawah, anda dapat menemukan urutan pertumbuhan yang paling umum dari algoritma yang ditentukan dalam notasi _Big O_. - -![Big O graphs](./assets/big-o-graph.png) - -Sumber: [Big O Cheat Sheet](http://bigocheatsheet.com/). - -Di bawah ini adalah daftar dari beberapa notasi _Big O_ yang sering digunakan dan perbandingan kinerjanya terhadap berbagai ukuran _input data_. - -| Notasi _Big O_ | Komputasi untuk 10 elemen | Komputasi untuk 100 elemen | Komputasi untuk 1000 elemen | -| -------------- | ------------------------- | -------------------------- | --------------------------- | -| **O(1)** | 1 | 1 | 1 | -| **O(log N)** | 3 | 6 | 9 | -| **O(N)** | 10 | 100 | 1000 | -| **O(N log N)** | 30 | 600 | 9000 | -| **O(N^2)** | 100 | 10000 | 1000000 | -| **O(2^N)** | 1024 | 1.26e+29 | 1.07e+301 | -| **O(N!)** | 3628800 | 9.3e+157 | 4.02e+2567 | - -### Kompleksitas Operasi Struktur Data - -| Struktur Data | Akses | Pencarian | Penyisipan | Penghapusan | Keterangan | -| -------------------------------------------- | :----: | :-------: | :--------: | :---------: | :------------------------------------------------------- | -| **Array (Larik)** | 1 | n | n | n | | -| **Stack (Tumpukan)** | n | n | 1 | 1 | | -| **Queue (Antrean)** | n | n | 1 | 1 | | -| **Linked List (Senarai Berantai)** | n | n | 1 | n | | -| **Hash Table** | - | n | n | n | Apabila fungsi hash sempurna, biayanya akan menjadi O(1) | -| **Binary Search Tree (Pohon Telusur Biner)** | n | n | n | n | Apabila pohon seimbang, biayanya akan menjadi O(log(n)) | -| **B-Tree** | log(n) | log(n) | log(n) | log(n) | | -| **Red-Black Tree (Pohon Merah-Hitam)** | log(n) | log(n) | log(n) | log(n) | | -| **AVL Tree** | log(n) | log(n) | log(n) | log(n) | | -| **Bloom Filter** | - | 1 | 1 | - | Positif palsu dimungkinkan saat pencarian | - -### Kompleksitas Algoritma Sortir Larik - -| Nama | Terbaik | Rata-rata | Terburuk | Memori | Stabil | Keterangan | -| -------------------------------------- | :-----------: | :--------------------------: | :-------------------------: | :----: | :----: | :-------------------------------------------------------------------------------- | -| **Bubble sort (Sortir Gelembung)** | n | n2 | n2 | 1 | Ya | | -| **Insertion sort (Sortir Sisipan)** | n | n2 | n2 | 1 | Ya | | -| **Selection sort (Sortir Seleksi)** | n2 | n2 | n2 | 1 | Tidak | | -| **Heap sort (Sortir _Heap_)** | n log(n) | n log(n) | n log(n) | 1 | Tidak | | -| **Merge Sort (Sortir Gabungan)** | n log(n) | n log(n) | n log(n) | n | Ya | | -| **Quick sort (Sortir Cepat)** | n log(n) | n log(n) | n2 | log(n) | Tidak | Sortir Cepat biasanya dilakukan secara _in-place_ dengan O(log(n)) ruang tumpukan | -| **Shell sort (Sortir Shell)** | n log(n) | tergantung pada jarak urutan | n (log(n))2 | 1 | Tidak | | -| **Counting sort (Sortir Perhitungan)** | n + r | n + r | n + r | n + r | Ya | r - angka terbesar dalam larik | -| **Radix sort (Sortir Akar)** | n \* k | n \* k | n \* k | n + k | Ya | k - panjang dari kunci terpanjang | - -## Pendukung Proyek - -> Anda dapat mendukung proyek ini via ❤️️ [GitHub](https://github.com/sponsors/trekhleb) atau ❤️️ [Patreon](https://www.patreon.com/trekhleb). - -[Orang-orang yang mendukung proyek ini](https://github.com/trekhleb/javascript-algorithms/blob/master/BACKERS.md) `∑ = 1` - -> ℹ️ A few more [projects](https://trekhleb.dev/projects/) and [articles](https://trekhleb.dev/blog/) about JavaScript and algorithms on [trekhleb.dev](https://trekhleb.dev) diff --git a/README.it-IT.md b/README.it-IT.md deleted file mode 100644 index d749a6aa7f..0000000000 --- a/README.it-IT.md +++ /dev/null @@ -1,304 +0,0 @@ -# Algoritmi e Strutture Dati in Javascript - -[![CI](https://github.com/trekhleb/javascript-algorithms/workflows/CI/badge.svg)](https://github.com/trekhleb/javascript-algorithms/actions?query=workflow%3ACI+branch%3Amaster) -[![codecov](https://codecov.io/gh/trekhleb/javascript-algorithms/branch/master/graph/badge.svg)](https://codecov.io/gh/trekhleb/javascript-algorithms) - -Questa repository contiene esempi in Javascript dei più popolari algoritmi e strutture dati . - -Ogni algortimo e struttura dati ha il suo README separato e la relative spiegazioni e i link per ulteriori approfondimenti (compresi quelli su YouTube). - -_Leggilo in altre lingue:_ -[_简体中文_](README.zh-CN.md), -[_繁體中文_](README.zh-TW.md), -[_한국어_](README.ko-KR.md), -[_日本語_](README.ja-JP.md), -[_Polski_](README.pl-PL.md), -[_Français_](README.fr-FR.md), -[_Español_](README.es-ES.md), -[_Português_](README.pt-BR.md), -[_Русский_](README.ru-RU.md), -[_Türk_](README.tr-TR.md), -[_Bahasa Indonesia_](README.id-ID.md), -[_Українська_](README.uk-UA.md), -[_Arabic_](README.ar-AR.md), -[_Tiếng Việt_](README.vi-VN.md), -[_Deutsch_](README.de-DE.md), -[_Uzbek_](README.uz-UZ.md) -[_עברית_](README.he-IL.md) - -*☝ Si noti che questo progetto è destinato ad essere utilizzato solo per l'apprendimento e la ricerca e non è destinato ad essere utilizzato per il commercio.* - -## Strutture Dati - -Una struttura dati è un particolare modo di organizzare e memorizzare i dati in un computer che permeta di accedervi e modificarli in modo efficiente. Più precisamente, una struttura dati è una raccolta di dati, le relazioni tra di essi e le funzioni o operazioni che possono essere applicate ai dati. - -`P` - Principiante, `A` - Avanzato - -* `P` [Lista Concatenata](src/data-structures/linked-list) -* `P` [Doppia Lista Concatenata](src/data-structures/doubly-linked-list) -* `P` [Coda](src/data-structures/queue) -* `P` [Pila](src/data-structures/stack) -* `P` [Hash Table](src/data-structures/hash-table) -* `P` [Heap](src/data-structures/heap) - versione massimo e minimo heap -* `P` [Coda di priorità](src/data-structures/priority-queue) -* `A` [Trie](src/data-structures/trie) -* `A` [Albero](src/data-structures/tree) - * `A` [Albero binario di ricerca](src/data-structures/tree/binary-search-tree) - * `A` [Albero AVL](src/data-structures/tree/avl-tree) - * `A` [RB Albero](src/data-structures/tree/red-black-tree) - * `A` [Albero Segmentato](src/data-structures/tree/segment-tree) - con min/max/sum esempi di query - * `A` [Albero di Fenwick](src/data-structures/tree/fenwick-tree) (Albero binario indicizzato) -* `A` [Grafo](src/data-structures/graph) (direzionale e unidirezionale) -* `A` [Set Disgiunto](src/data-structures/disjoint-set) -* `A` [Filtro Bloom](src/data-structures/bloom-filter) - -## Algoritmi - -Un algoritmo è una specifica univoca per risolvere una classe di problemi. È -un insieme di regole che definiscono con precisione una sequenza di operazioni. - -`P` - Principiante, `A` - Avanzato - -### Algoritmi per Topic - -* **Matematica** - * `P` [Manipolazione dei Bit](src/algorithms/math/bits) - set/get/update/clear bits, moltiplicazione/divisione per due, gestire numeri negativi etc. - * `P` [Fattoriale](src/algorithms/math/factorial) - * `P` [Numeri di Fibonacci](src/algorithms/math/fibonacci) - classico e forma chiusa - * `P` [Test di Primalità](src/algorithms/math/primality-test) (metodo del divisore) - * `P` [Algoritmo di Euclide](src/algorithms/math/euclidean-algorithm) - trova il massimo comune divisore (MCD) - * `P` [Minimo Comune Multiplo](src/algorithms/math/least-common-multiple) (MCM) - * `P` [Crivello di Eratostene](src/algorithms/math/sieve-of-eratosthenes) - trova i numeri i primi fino al limite indicato - * `P` [Potenza di due](src/algorithms/math/is-power-of-two) - controlla se il numero è una potenza di due - * `P` [Triangolo di Pascal](src/algorithms/math/pascal-triangle) - * `P` [Numeri Complessi](src/algorithms/math/complex-number) - numeri complessi e operazioni - * `P` [Radiante & Gradi](src/algorithms/math/radian) - conversione da radiante a gradi e viceversa - * `P` [Potenza di un Numero](src/algorithms/math/fast-powering) - * `A` [Partizione di un Intero](src/algorithms/math/integer-partition) - * `A` [Radice Quadrata](src/algorithms/math/square-root) - Metodo di Newton - * `A` [Algoritmo di Liu Hui π](src/algorithms/math/liu-hui) - calcolare π usando un poligono - * `A` [Trasformata Discreta di Fourier ](src/algorithms/math/fourier-transform) -decomporre una funzione di tempo (un segnale) nelle frequenze che lo compongono -* **Set** - * `P` [Prodotto Cartesiano](src/algorithms/sets/cartesian-product) - moltiplicazione multipla di set - * `P` [Fisher–Yates Shuffle](src/algorithms/sets/fisher-yates) - permutazione casuale di un sequenza finita - * `A` [Power Set](src/algorithms/sets/power-set) - tutti i sottoinsiemi di un set (soluzioni bitwise e backtracking) - * `A` [Permutazioni](src/algorithms/sets/permutations) (con e senza ripetizioni) - * `A` [Combinazioni](src/algorithms/sets/combinations) (con e senza ripetizioni) - * `A` [Massima Sottosequenza Comune](src/algorithms/sets/longest-common-subsequence) (LCS) - * `A` [Massima Sottosequenza Crescente](src/algorithms/sets/longest-increasing-subsequence) - * `A` [Minima Sottosequenza Diffusa](src/algorithms/sets/shortest-common-supersequence) (SCS) - * `A` [Problema dello Zaino di Knapsack](src/algorithms/sets/knapsack-problem) - "0/1" e "Senza Restrizioni" - * `A` [Massimo SubArray](src/algorithms/sets/maximum-subarray) - "Brute Force" e "Programmazione Dinamica" versione Kadane - * `A` [Somma di Combinazioni](src/algorithms/sets/combination-sum) - ricerca di tutte le combinazioni di una somma -* **String** - * `P` [Distanza di Hamming](src/algorithms/string/hamming-distance) - numero di posizioni in cui i caratteri sono diversi - * `A` [Distanza di Levenshtein](src/algorithms/string/levenshtein-distance) - numero minimo di modifiche per rendere uguali due stringhe - * `A` [Algoritmo di Knuth-Morris-Pratt](src/algorithms/string/knuth-morris-pratt) (KMP) - ricerca nella sottostringa (pattern matching) - * `A` [Algoritmo Z](src/algorithms/string/z-algorithm) - ricerca nella sottostringa (pattern matching) - * `A` [Algoritmo di Rabin Karp ](src/algorithms/string/rabin-karp) - ricerca nella sottostringa - * `A` [Sottostringa Comune più lunga](src/algorithms/string/longest-common-substring) - * `A` [Espressioni Regolari](src/algorithms/string/regular-expression-matching) -* **Searches** - * `P` [Ricerca Sequenziale](src/algorithms/search/linear-search) - * `P` [Ricerca a Salti](src/algorithms/search/jump-search) (o Ricerca a Blocchi) - per la ricerca in array ordinati - * `P` [Ricerca Binari](src/algorithms/search/binary-search) - per la ricerca in array ordinati - * `P` [Ricerca Interpolata](src/algorithms/search/interpolation-search) - per la ricerca in un array ordinato uniformemente distibuito -* **Sorting** - * `P` [Bubble Sort](src/algorithms/sorting/bubble-sort) - * `P` [Selection Sort](src/algorithms/sorting/selection-sort) - * `P` [Insertion Sort](src/algorithms/sorting/insertion-sort) - * `P` [Heap Sort](src/algorithms/sorting/heap-sort) - * `P` [Merge Sort](src/algorithms/sorting/merge-sort) - * `P` [Quicksort](src/algorithms/sorting/quick-sort) - con e senza allocazione di ulteriore memoria - * `P` [Shellsort](src/algorithms/sorting/shell-sort) - * `P` [Counting Sort](src/algorithms/sorting/counting-sort) - * `P` [Radix Sort](src/algorithms/sorting/radix-sort) -* **Lista Concatenatas** - * `P` [Attraversamento Lista Concatenata](src/algorithms/linked-list/traversal) - * `P` [Attraversamento Lista Concatenata nel senso Contrario](src/algorithms/linked-list/reverse-traversal) -* **Alberi** - * `P` [Ricerca in Profondità su Alberi](src/algorithms/tree/depth-first-search) (DFS) - * `P` [Ricerca in Ampiezza su Alberi](src/algorithms/tree/breadth-first-search) (BFS) -* **Grafi** - * `P` [Ricerca in Profondità su Grafi](src/algorithms/graph/depth-first-search) (DFS) - * `P` [Breadth-First Search su Grafi](src/algorithms/graph/breadth-first-search) (BFS) - * `P` [Algoritmo di Kruskal](src/algorithms/graph/kruskal) - ricerca dell'Albero con Minima Distanza (MST) per grafi pesati unidirezionali - * `A` [Algoritmo di Dijkstra](src/algorithms/graph/dijkstra) - ricerca dei percorsi più breve per raggiungere tutti i vertici del grafo da un singolo vertice - * `A` [Algoritmo di Bellman-Ford](src/algorithms/graph/bellman-ford) - ricerca dei percorsi più breve per raggiungere tutti i vertici del grafo da un singolo vertice - * `A` [Algoritmo di Floyd-Warshall](src/algorithms/graph/floyd-warshall) - ricerca dei percorsi più brevi tra tutte le coppie di vertici - * `A` [Rivelamento dei Cicli](src/algorithms/graph/detect-cycle) - per grafici diretti e non diretti (basate su partizioni DFS e Disjoint Set) - * `A` [Algoritmo di Prim](src/algorithms/graph/prim) - ricerca dell'Albero Ricoprente Minimo (MST) per grafi unidirezionali pesati - * `A` [Ordinamento Topologico](src/algorithms/graph/topological-sorting) - metodo DFS - * `A` [Punti di Articolazione](src/algorithms/graph/articulation-points) - Algoritmo di Tarjan (basato su DFS) - * `A` [Bridges](src/algorithms/graph/bridges) - basato su DFS - * `A` [Cammino Euleriano e Circuito Euleriano](src/algorithms/graph/eulerian-path) - Algoritmo di Fleury - Visita ogni margine esattamente una volta - * `A` [Ciclo di Hamiltonian](src/algorithms/graph/hamiltonian-cycle) - Visita ad ogni vertice solo una volta - * `A` [Componenti Fortemente Connessa](src/algorithms/graph/strongly-connected-components) - algoritmo di Kosaraju - * `A` [Problema del Commesso Viaggiatore](src/algorithms/graph/travelling-salesman) - il percorso più breve che visita ogni città e ritorna alla città iniziale -* **Crittografia** - * `P` [Hash Polinomiale](src/algorithms/cryptography/polynomial-hash) - Una funzione hash di rolling basata sul polinomio -* **Senza categoria** - * `P` [Torre di Hanoi](src/algorithms/uncategorized/hanoi-tower) - * `P` [Rotazione Matrice Quadrata](src/algorithms/uncategorized/square-matrix-rotation) - algoritmo in memoria - * `P` [Jump Game](src/algorithms/uncategorized/jump-game) - backtracking, programmazione dinamica (top-down + bottom-up) ed esempre di greeedy - * `P` [Percorsi Unici](src/algorithms/uncategorized/unique-paths) - backtracking, programmazione dinamica and l'esempio del Triangolo di Pascal - * `P` [Rain Terraces](src/algorithms/uncategorized/rain-terraces) - problema dell'acqua piovana in trappola(versione con programmazione dinamica e brute force) - * `P` [Recursive Staircase](src/algorithms/uncategorized/recursive-staircase) - contare il numero di percorsi per arrivare in vetta(4 soluzioni) - * `A` [Rompicapo delle Otto Regine](src/algorithms/uncategorized/n-queens) - * `A` [Percorso del Cavallo](src/algorithms/uncategorized/knight-tour) - -### Modelli di Algoritmi - - Un modello di algoritmo è un generico metodo o approcio che sta alla base della progettazione di una classe di algoritmi. - Si tratta di un'astrazione ancora più alta di un algoritmo, proprio come un algoritmo è un'astrazione di un programma del computer. - -* **Brute Force** - controlla tutte le possibilità e seleziona la migliore - * `P` [Ricerca Lineare](src/algorithms/search/linear-search) - * `P` [Rain Terraces](src/algorithms/uncategorized/rain-terraces) - problema dell'acqua piovana in trappola - * `P` [Recursive Staircase](src/algorithms/uncategorized/recursive-staircase) - contare il numero di percorsi per arrivare in vetta - * `A` [Massimo SubArray](src/algorithms/sets/maximum-subarray) - * `A` [Problema del commesso viaggiatore](src/algorithms/graph/travelling-salesman) - il percorso più breve che visita ogni città e ritorna alla città iniziale - * `A` [Trasformata Discreta di Fourier](src/algorithms/math/fourier-transform) - scomporre la funzione (segnale) del tempo in frequenze che la compongono -* **Greedy** - scegliere l'opzione migliore al momento d'eleborazione dell'algoritmo, senza alcuna considerazione per il futuro - * `P` [Jump Game](src/algorithms/uncategorized/jump-game) - * `A` [Problema dello Zaino di Knapsack](src/algorithms/sets/knapsack-problem) - * `A` [Algoritmo di Dijkstra](src/algorithms/graph/dijkstra) - ricerca del percorso più breve tra tutti i vertici del grafo - * `A` [Algoritmo di Prim](src/algorithms/graph/prim) - ricerca del Minimo Albero Ricoprente per grafi pesati e unidirezionali - * `A` [Kruskal’s Algorithm](src/algorithms/graph/kruskal) - finding Minimum Spanning Tree (MST) for weighted undirected graph -* **Divide e Conquista** - divide il problema in piccole parti e risolve ogni parte - * `P` [Ricerca Binaria](src/algorithms/search/binary-search) - * `P` [Torre di Hanoi](src/algorithms/uncategorized/hanoi-tower) - * `P` [Triangolo di Pascal](src/algorithms/math/pascal-triangle) - * `P` [Algoritmo di Euclide](src/algorithms/math/euclidean-algorithm) - calculate the Greatest Common Divisor (GCD) - * `P` [Merge Sort](src/algorithms/sorting/merge-sort) - * `P` [Quicksort](src/algorithms/sorting/quick-sort) - * `P` [Albero per Ricerca in Profondità](src/algorithms/tree/depth-first-search) (DFS) - * `P` [Grafo per Ricerca in Profondità](src/algorithms/graph/depth-first-search) (DFS) - * `P` [Jump Game](src/algorithms/uncategorized/jump-game) - * `P` [Algoritmo di Elevamento a Potenza](src/algorithms/math/fast-powering) - * `A` [Permutazioni](src/algorithms/sets/permutations) (con o senza ripetizioni) - * `A` [Combinazioni](src/algorithms/sets/combinations) (con o senza ripetizioni) -* **Programmazione Dinamica** - creare una soluzione utilizzando le sub-solution trovate in precedenza - * `P` [Numero di Fibonacci](src/algorithms/math/fibonacci) - * `P` [Jump Game](src/algorithms/uncategorized/jump-game) - * `P` [Percorsi Unici](src/algorithms/uncategorized/unique-paths) - * `P` [Rain Terraces](src/algorithms/uncategorized/rain-terraces) - problema dell'acqua piovana in trappola - * `P` [Recursive Staircase](src/algorithms/uncategorized/recursive-staircase) - contare il numero di percorsi per arrivare in vetta - * `A` [Distanza di Levenshtein](src/algorithms/string/levenshtein-distance) - minima variazione tra due sequenze - * `A` [La Più Lunga Frequente SottoSequenza](src/algorithms/sets/longest-common-subsequence) (LCS) - * `A` [La Più Lunga Frequente SubString](src/algorithms/string/longest-common-substring) - * `A` [La Più Lunga SottoSequenza Crescente](src/algorithms/sets/longest-increasing-subsequence) - * `A` [La Più Corta e Frequente SuperSequenza](src/algorithms/sets/shortest-common-supersequence) - * `A` [Problema dello zaino](src/algorithms/sets/knapsack-problem) - * `A` [Partizione di un Intero](src/algorithms/math/integer-partition) - * `A` [Massimo SubArray](src/algorithms/sets/maximum-subarray) - * `A` [Algoritmo di Bellman-Ford](src/algorithms/graph/bellman-ford) - ricerca del percorso più breve per tutti i vertici del grafo - * `A` [Algoritmo di Floyd-Warshall](src/algorithms/graph/floyd-warshall) - ricerca del percorso più breve tra tutte le coppie di vertici - * `A` [Espressioni Regolari](src/algorithms/string/regular-expression-matching) -* **Backtracking** - come la brute force, provate a generare tutte le soluzioni possibili, ma ogni volta che generate la prossima soluzione testate se soddisfa tutte le condizioni e solo allora continuare a generare soluzioni successive. Altrimenti, fate marcia indietro, e andate su un percorso diverso per trovare una soluzione. Normalmente si utilizza l'algoritmo DFS. - * `P` [Jump Game](src/algorithms/uncategorized/jump-game) - * `P` [Percorsi Unici](src/algorithms/uncategorized/unique-paths) - * `P` [Power Set](src/algorithms/sets/power-set) - tutti i subset di un set - * `A` [Ciclo di Hamiltonian](src/algorithms/graph/hamiltonian-cycle) - visita di tutti i vertici solamente una volta - * `A` [Problema di N-Queens](src/algorithms/uncategorized/n-queens) - * `A` [Knight's Tour](src/algorithms/uncategorized/knight-tour) - * `A` [Combinazioni di una Somma](src/algorithms/sets/combination-sum) - trovare tutte le combinazioni che compongono una somma -* **Branch & Bound** - ricordatevi che la soluzione meno costosa trovata ad ogni step durante il backtracking e -il costo di usare la soluzione meno costosa trovata fino al limite inferiore al costo minimo della soluzione al problema, -al fine di scartare soluzioni parziali con costi maggiori della soluzione meno costosa trovata . -Di solito si usa BFS trasversale in combinazione con DFS trasversale . - -## Come usare questa repository - -**Installare tutte le dipendenze** -``` -npm install -``` - -**Eseguire ESLint** - -Potresti usarlo per controllare la qualità del codice. - -``` -npm run lint -``` - -**Eseguire tutti i test** -``` -npm test -``` - -**Eseguire un test tramite il nome** -``` -npm test -- 'LinkedList' -``` - -**Playground** - -Se vuoi puoi giocare le strutture dati e gli algoritmi nel file ./src/playground/playground.js` e -scrivere test nel file `./src/playground/__test__/playground.test.js`. - -Poi puoi semplicemente eseguire il seguente comando per testare quello che hai scritto : - -``` -npm test -- 'playground' -``` - -## Informazioni Utili - -### Bibliografia - -[▶ Data Structures and Algorithms on YouTube](https://www.youtube.com/playlist?list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) - -### Notazione Big O - -* La notazione Big O* è usata per classificare algoritmi in base al tempo di esecuzione o ai -requisiti di spazio che crescono in base alla crescita dell'input . -Nella grafico qua sotto puoi trovare gli ordini di crescita più comuni degli algoritmi usando la notazione Big O. - -![Grafi Big O ](./assets/big-o-graph.png) - -Riferimento: [Big O Cheat Sheet](http://bigocheatsheet.com/). - -Nella tabella qua sotto ci sono riportate la lista delle notazioni Big O più usate e delle loro prestazioni comparate tra differenti grandezze d'input . - -| Notazione Big O | Computazione con 10 elementi | Computazione con 100 elementi | Computazione con 1000 elementi | -| --------------- | ---------------------------- | ----------------------------- | ------------------------------- | -| **O(1)** | 1 | 1 | 1 | -| **O(log N)** | 3 | 6 | 9 | -| **O(N)** | 10 | 100 | 1000 | -| **O(N log N)** | 30 | 600 | 9000 | -| **O(N^2)** | 100 | 10000 | 1000000 | -| **O(2^N)** | 1024 | 1.26e+29 | 1.07e+301 | -| **O(N!)** | 3628800 | 9.3e+157 | 4.02e+2567 | - -### Complessità delle Operazion sulle Strutture Dati - -| Struttura Dati | Accesso | Ricerca | Inserimento | Rimozione | Commenti | -| ----------------------- | :-------: | :-------: | :--------: | :-------: | :-------- | -| **Array** | 1 | n | n | n | | -| **Pila** | n | n | 1 | 1 | | -| **Coda** | n | n | 1 | 1 | | -| **Lista Concatenata** | n | n | 1 | n | | -| **Tabella Hash** | - | n | n | n | Nel caso di una funzione di hashing perfetta il costo sarebbe O(1)| -| **Binary Search Tree** | n | n | n | n | Nel caso di albero bilanciato il costo sarebbe O(log(n)) | -| **B-Tree** | log(n) | log(n) | log(n) | log(n) | | -| **Red-Black Tree** | log(n) | log(n) | log(n) | log(n) | | -| **Albero AVL** | log(n) | log(n) | log(n) | log(n) | | -| **Bloom Filter** | - | 1 | 1 | - | Falsi positivi sono possibili durante la ricerca | - -### Complessità degli Algoritmi di Ordinamento di Array - -| Nome | Milgiore | Media | Perggiore | Memoria | Stabile | Commenti | -| --------------------- | :-------------: | :-----------------: | :-----------------: | :-------: | :-------: | :-------- | -| **Bubble sort** | n | n2 | n2 | 1 | Yes | | -| **Insertion sort** | n | n2 | n2 | 1 | Yes | | -| **Selection sort** | n2 | n2 | n2 | 1 | No | | -| **Heap sort** | n log(n) | n log(n) | n log(n) | 1 | No | | -| **Merge sort** | n log(n) | n log(n) | n log(n) | n | Yes | | -| **Quick sort** | n log(n) | n log(n) | n2 | log(n) | No | Quicksort viene eseguito in memoria solitamente con una pila di O(log(n)) | -| **Shell sort** | n log(n) | dipende dagli spazi vuoti nella sequenza | n (log(n))2 | 1 | No | | -| **Counting sort** | n + r | n + r | n + r | n + r | Yes | r - numero più grande nell'array | -| **Radix sort** | n * k | n * k | n * k | n + k | Yes | k - lunghezza della chiave più grande | - -> ℹ️ A few more [projects](https://trekhleb.dev/projects/) and [articles](https://trekhleb.dev/blog/) about JavaScript and algorithms on [trekhleb.dev](https://trekhleb.dev) diff --git a/README.ja-JP.md b/README.ja-JP.md deleted file mode 100644 index acf9dee8f0..0000000000 --- a/README.ja-JP.md +++ /dev/null @@ -1,303 +0,0 @@ -# JavaScriptアルゴリズムとデータ構造 - -[![CI](https://github.com/trekhleb/javascript-algorithms/workflows/CI/badge.svg)](https://github.com/trekhleb/javascript-algorithms/actions?query=workflow%3ACI+branch%3Amaster) -[![codecov](https://codecov.io/gh/trekhleb/javascript-algorithms/branch/master/graph/badge.svg)](https://codecov.io/gh/trekhleb/javascript-algorithms) - -このリポジトリには、JavaScriptベースの一般的なアルゴリズムとデータ構造に関する多数のサンプルが含まれています。 - - -各アルゴリズムとデータ構造には独自のREADMEがあります。 -関連する説明、そして参考資料 (YouTube動画)も含まれています。 - -_Read this in other languages:_ -[_English_](https://github.com/trekhleb/javascript-algorithms/), -[_简体中文_](README.zh-CN.md), -[_繁體中文_](README.zh-TW.md), -[_한국어_](README.ko-KR.md), -[_Polski_](README.pl-PL.md), -[_Français_](README.fr-FR.md), -[_Español_](README.es-ES.md), -[_Português_](README.pt-BR.md), -[_Русский_](README.ru-RU.md), -[_Türk_](README.tr-TR.md), -[_Italiana_](README.it-IT.md), -[_Bahasa Indonesia_](README.id-ID.md), -[_Українська_](README.uk-UA.md), -[_Arabic_](README.ar-AR.md), -[_Tiếng Việt_](README.vi-VN.md), -[_Deutsch_](README.de-DE.md), -[_Uzbek_](README.uz-UZ.md) -[_עברית_](README.he-IL.md) - -## データ構造 - -データ構造は、データ値、データ値との間の関係、 -そして、データを扱うことができる関数と演算の集合で、 -データを特定の方法で構成して保存することで、より効率的に -アクセスして変更することができます。 - -`B` - 初心者, `A` - 上級 - -* `B` [リンクされたリスト](src/data-structures/linked-list) -* `B` [二重リンクリスト](src/data-structures/doubly-linked-list) -* `B` [キュー](src/data-structures/queue) -* `B` [スタック](src/data-structures/stack) -* `B` [ハッシュ表](src/data-structures/hash-table) -* `B` [ヒープ](src/data-structures/heap) - max and min heap versions -* `B` [優先度キュー](src/data-structures/priority-queue) -* `A` [トライ](src/data-structures/trie) -* `A` [ツリー](src/data-structures/tree) - * `A` [バイナリ検索ツリー](src/data-structures/tree/binary-search-tree) - * `A` [AVLツリー](src/data-structures/tree/avl-tree) - * `A` [赤黒のツリー](src/data-structures/tree/red-black-tree) - * `A` [セグメントツリー](src/data-structures/tree/segment-tree) - with min/max/sum range queries examples - * `A` [フェンウィック・ツリー](src/data-structures/tree/fenwick-tree) (Binary Indexed Tree) -* `A` [グラフ](src/data-structures/graph) (both directed and undirected) -* `A` [分離集合](src/data-structures/disjoint-set) -* `A` [ブルームフィルタ](src/data-structures/bloom-filter) - -## アルゴリズム - -アルゴリズムとは、問題のクラスをどのように解決するかの明確な仕様です。 -一連の操作を正確に定義する一連のルールです。 - -`B` - 初心者, `A` - 上級 - -### トピック別アルゴリズム - -* **数学** - * `B` [ビット操作](src/algorithms/math/bits) - set/get/update/clear bits, 2つの乗算/除算, 否定的にする. 等 - * `B` [因果関係](src/algorithms/math/factorial) - * `B` [フィボナッチ数](src/algorithms/math/fibonacci) - クラシックとクローズドフォームのバージョン - * `B` [素数性テスト](src/algorithms/math/primality-test) (trial division 方法) - * `B` [ユークリッドアルゴリズム](src/algorithms/math/euclidean-algorithm) - 最大公約数を計算する (GCD) - * `B` [最小公倍数](src/algorithms/math/least-common-multiple) (LCM) - * `B` [エラトステネスのふるい](src/algorithms/math/sieve-of-eratosthenes) - 与えられた限度まですべての素数を見つける - * `B` [Is Power of Two](src/algorithms/math/is-power-of-two) - 数値が2の累乗であるかどうかを調べる(単純なアルゴリズムとビットごとのアルゴリズム) - * `B` [パスカルの三角形](src/algorithms/math/pascal-triangle) - * `B` [複素数](src/algorithms/math/complex-number) - 複素数とその基本演算 - * `B` [ラジアン&度](src/algorithms/math/radian) - 度数と逆方向の変換に対するラジアン - * `B` [高速電力供給](src/algorithms/math/fast-powering) - * `A` [整数パーティション](src/algorithms/math/integer-partition) - * `A` [Liu Hui π アルゴリズム](src/algorithms/math/liu-hui) - N-gonsに基づく近似π計算 - * `A` [離散フーリエ変換](src/algorithms/math/fourier-transform) - 時間(信号)の関数をそれを構成する周波数に分解する -* **セット** - * `B` [デカルト積 ](src/algorithms/sets/cartesian-product) - 複数の積の積 - * `B` [Fisher–Yates Shuffle](src/algorithms/sets/fisher-yates) - 有限シーケンスのランダム置換 - * `A` [パワーセット](src/algorithms/sets/power-set) - セットのすべてのサブセット(ビットごとのソリューションとバックトラッキングソリューション) - * `A` [順列](src/algorithms/sets/permutations) (繰り返しの有無にかかわらず) - * `A` [組み合わせ](src/algorithms/sets/combinations) (繰返しあり、繰返しなし) - * `A` [最長共通部分列](src/algorithms/sets/longest-common-subsequence) (LCS) - * `A` [最長増加サブシーケンス](src/algorithms/sets/longest-increasing-subsequence) - * `A` [最短共通スーパーシーケンス](src/algorithms/sets/shortest-common-supersequence) (SCS) - * `A` [ナップザック問題 ](src/algorithms/sets/knapsack-problem) - 「0/1」と「非結合」問題 - * `A` [最大サブアレイ](src/algorithms/sets/maximum-subarray) - 「ブルートフォース」と「ダイナミックプログラミング」(Kadane's版) - * `A` [組み合わせ合計](src/algorithms/sets/combination-sum) - 特定の合計を構成するすべての組み合わせを見つける -* **文字列** - * `B` [ハミング距離](src/algorithms/string/hamming-distance) - シンボルが異なる位置の数 - * `A` [レーベンシュタイン距離](src/algorithms/string/levenshtein-distance) - 2つのシーケンス間の最小編集距離 - * `A` [Knuth-Morris-Prattアルゴリズム](src/algorithms/string/knuth-morris-pratt) (KMP Algorithm) - 部分文字列検索 (pattern matching) - * `A` [Z アルゴリズム](src/algorithms/string/z-algorithm) - 部分文字列検索 (pattern matching) - * `A` [Rabin Karpアルゴリズム](src/algorithms/string/rabin-karp) - 部分文字列検索 - * `A` [最長共通部分文字列](src/algorithms/string/longest-common-substring) - * `A` [正規表現マッチング](src/algorithms/string/regular-expression-matching) -* **検索** - * `B` [リニアサーチ](src/algorithms/search/linear-search) - * `B` [ジャンプ検索](src/algorithms/search/jump-search) (Jump Search) - ソートされた配列で検索 - * `B` [バイナリ検索](src/algorithms/search/binary-search) - ソートされた配列で検索 - * `B` [補間探索](src/algorithms/search/interpolation-search) - 一様分布のソート配列で検索する -* **並べ替え** - * `B` [バブルソート](src/algorithms/sorting/bubble-sort) - * `B` [選択ソート](src/algorithms/sorting/selection-sort) - * `B` [挿入ソート](src/algorithms/sorting/insertion-sort) - * `B` [ヒープソート](src/algorithms/sorting/heap-sort) - * `B` [マージソート](src/algorithms/sorting/merge-sort) - * `B` [クイックソート](src/algorithms/sorting/quick-sort) -インプレースおよび非インプレース・インプリメンテーション - * `B` [シェルソート](src/algorithms/sorting/shell-sort) - * `B` [並べ替えを数える](src/algorithms/sorting/counting-sort) - * `B` [基数ソート](src/algorithms/sorting/radix-sort) -* **リンクされたリスト** - * `B` [ストレートトラバーサル](src/algorithms/linked-list/traversal) - * `B` [逆方向のトラバーサル](src/algorithms/linked-list/reverse-traversal) -* **ツリー** - * `B` [深度優先検索](src/algorithms/tree/depth-first-search) (DFS) - * `B` [幅優先検索](src/algorithms/tree/breadth-first-search) (BFS) -* **グラフ** - * `B` [深度優先検索](src/algorithms/graph/depth-first-search) (DFS) - * `B` [幅優先検索](src/algorithms/graph/breadth-first-search) (BFS) - * `B` [Kruskalのアルゴリズム](src/algorithms/graph/kruskal) - 重み付き無向グラフの最小スパニングツリー(MST)の発見 - * `A` [Dijkstraアルゴリズム](src/algorithms/graph/dijkstra) - 単一の頂点からすべてのグラフ頂点への最短経路を見つける - * `A` [Bellman-Fordアルゴリズム](src/algorithms/graph/bellman-ford) - 単一の頂点からすべてのグラフ頂点への最短経路を見つける - * `A` [Floyd-Warshallアルゴリズム](src/algorithms/graph/floyd-warshall) - すべての頂点ペア間の最短経路を見つける - * `A` [Detect Cycle](src/algorithms/graph/detect-cycle) - 有向グラフと無向グラフの両方(DFSおよびディスジョイントセットベースのバージョン) - * `A` [プリムのアルゴリズム](src/algorithms/graph/prim) - 重み付き無向グラフの最小スパニングツリー(MST)の発見 - * `A` [トポロジカルソート](src/algorithms/graph/topological-sorting) - DFSメソッド - * `A` [アーティキュレーションポイント](src/algorithms/graph/articulation-points) - Tarjanのアルゴリズム(DFSベース) - * `A` [ブリッジ ](src/algorithms/graph/bridges) - DFSベースのアルゴリズム - * `A` [オイラーパスとオイラー回路](src/algorithms/graph/eulerian-path) - フルリーアルゴリズム - すべてのエッジを正確に1回訪問する - * `A` [ハミルトニアンサイクル](src/algorithms/graph/hamiltonian-cycle) - すべての頂点を正確に1回訪問する - * `A` [強連結成分](src/algorithms/graph/strongly-connected-components) - コサラジュのアルゴリズム - * `A` [トラベリングセールスマン問題](src/algorithms/graph/travelling-salesman) - 各都市を訪問し、起点都市に戻る最短経路 -* **暗号** - * `B` [多項式ハッシュ](src/algorithms/cryptography/polynomial-hash) - 関数多項式に基づくハッシュ関数 -* **未分類** - * `B` [ハノイの塔](src/algorithms/uncategorized/hanoi-tower) - * `B` [正方行列回転](src/algorithms/uncategorized/square-matrix-rotation) - インプレイスアルゴリズム - * `B` [ジャンプゲーム](src/algorithms/uncategorized/jump-game) - バックトラック、ダイナミックプログラミング(トップダウン+ボトムアップ)、欲張りの例 - * `B` [ユニークなパス](src/algorithms/uncategorized/unique-paths) - バックトラック、動的プログラミング、PascalのTriangleベースの例 - * `B` [レインテラス](src/algorithms/uncategorized/rain-terraces) - トラップ雨水問題(ダイナミックプログラミングとブルートフォースバージョン) - * `B` [再帰的階段](src/algorithms/uncategorized/recursive-staircase) - 上に到達する方法の数を数える(4つのソリューション) - * `A` [N-クイーンズ問題](src/algorithms/uncategorized/n-queens) - * `A` [ナイトツアー](src/algorithms/uncategorized/knight-tour) - -### Paradigmによるアルゴリズム - -アルゴリズムパラダイムは、あるクラスのアルゴリズムの設計の基礎をなす一般的な方法またはアプローチである。それは、アルゴリズムがコンピュータプログラムよりも高い抽象であるのと同様に、アルゴリズムの概念よりも高い抽象である。 -* **ブルートフォース** - すべての可能性を見て最適なソリューションを選択する - * `B` [線形探索](src/algorithms/search/linear-search) - * `B` [レインテラス](src/algorithms/uncategorized/rain-terraces) - 雨水問題 - * `B` [Recursive Staircase](src/algorithms/uncategorized/recursive-staircase) - 先頭に到達する方法の数を数えます - * `A` [最大サブアレイ](src/algorithms/sets/maximum-subarray) - * `A` [旅行セールスマン問題](src/algorithms/graph/travelling-salesman) - 各都市を訪れ、起点都市に戻る最短ルート - * `A` [離散フーリエ変換](src/algorithms/math/fourier-transform) - 時間(信号)の関数をそれを構成する周波数に分解する -* **欲張り** - 未来を考慮することなく、現時点で最適なオプションを選択する - * `B` [ジャンプゲーム](src/algorithms/uncategorized/jump-game) - * `A` [結合されていないナップザック問題](src/algorithms/sets/knapsack-problem) - * `A` [Dijkstra Algorithm](src/algorithms/graph/dijkstra) - すべてのグラフ頂点への最短経路を見つける - * `A` [Prim’s Algorithm](src/algorithms/graph/prim) - 重み付き無向グラフの最小スパニングツリー(MST)を見つける - * `A` [Kruskalのアルゴリズム](src/algorithms/graph/kruskal) - 重み付き無向グラフの最小スパニングツリー(MST)を見つける -* **分割と征服** - 問題をより小さな部分に分割し、それらの部分を解決する - * `B` [バイナリ検索](src/algorithms/search/binary-search) - * `B` [ハノイの塔](src/algorithms/uncategorized/hanoi-tower) - * `B` [パスカルの三角形](src/algorithms/math/pascal-triangle) - * `B` [ユークリッドアルゴリズム](src/algorithms/math/euclidean-algorithm) - GCD(Greatest Common Divisor)を計算する - * `B` [マージソート](src/algorithms/sorting/merge-sort) - * `B` [クイックソート](src/algorithms/sorting/quick-sort) - * `B` [ツリーの深さ優先検索](src/algorithms/tree/depth-first-search) (DFS) - * `B` [グラフの深さ優先検索](src/algorithms/graph/depth-first-search) (DFS) - * `B` [ジャンプゲーム](src/algorithms/uncategorized/jump-game) - * `B` [高速電力供給](src/algorithms/math/fast-powering) - * `A` [順列](src/algorithms/sets/permutations) (繰り返しの有無にかかわらず) - * `A` [組み合わせ](src/algorithms/sets/combinations)(繰返しあり、繰返しなし) -* **動的プログラミング** - 以前に発見されたサブソリューションを使用してソリューションを構築する - * `B` [フィボナッチ数](src/algorithms/math/fibonacci) - * `B` [ジャンプゲーム](src/algorithms/uncategorized/jump-game) - * `B` [ユニークなパス](src/algorithms/uncategorized/unique-paths) - * `B` [雨テラス](src/algorithms/uncategorized/rain-terraces) - トラップ雨水問題 - * `B` [再帰的階段](src/algorithms/uncategorized/recursive-staircase) - 上に到達する方法の数を数える - * `A` [Levenshtein Distance](src/algorithms/string/levenshtein-distance) - 2つのシーケンス間の最小編集距離 - * `A` [最長共通部分列](src/algorithms/sets/longest-common-subsequence) (LCS) - * `A` [最長共通部分文字列](src/algorithms/string/longest-common-substring) - * `A` [最長増加サブシーケンス](src/algorithms/sets/longest-increasing-subsequence) - * `A` [最短共通共通配列](src/algorithms/sets/shortest-common-supersequence) - * `A` [0/1ナップザック問題](src/algorithms/sets/knapsack-problem) - * `A` [整数パーティション](src/algorithms/math/integer-partition) - * `A` [最大サブアレイ](src/algorithms/sets/maximum-subarray) - * `A` [Bellman-Fordアルゴリズム](src/algorithms/graph/bellman-ford) - すべてのグラフ頂点への最短経路を見つける - * `A` [Floyd-Warshallアルゴリズム](src/algorithms/graph/floyd-warshall) - すべての頂点ペア間の最短経路を見つける - * `A` [正規表現マッチング](src/algorithms/string/regular-expression-matching) -* **バックトラッキング** - ブルートフォースと同様に、可能なすべてのソリューションを生成しようとしますが、 - 次のソリューションを生成するたびにすべての条件を満たすかどうかをテストし、それ以降は引き続きソリューションを生成します。 - それ以外の場合は、バックトラックして、解決策を見つける別の経路に進みます。 - 通常、状態空間のDFSトラバーサルが使用されています。 - * `B` [ジャンプゲーム](src/algorithms/uncategorized/jump-game) - * `B` [ユニークなパス](src/algorithms/uncategorized/unique-paths) - * `B` [パワーセット](src/algorithms/sets/power-set) - セットのすべてのサブセット - * `A` [ハミルトニアンサイクル](src/algorithms/graph/hamiltonian-cycle) - すべての頂点を正確に1回訪問する - * `A` [N-クイーンズ問題](src/algorithms/uncategorized/n-queens) - * `A` [ナイトツアー](src/algorithms/uncategorized/knight-tour) - * `A` [組み合わせ合計](src/algorithms/sets/combination-sum) - 特定の合計を構成するすべての組み合わせを見つける -* **ブランチ&バウンド** - バックトラック検索の各段階で見つかった最もコストの低いソリューションを覚えておいて、最もコストの低いソリューションのコストを使用します。これまでに発見された最もコストの低いソリューションよりも大きなコストで部分ソリューションを破棄するように指示します。通常、状態空間ツリーのDFSトラバーサルと組み合わせたBFSトラバーサルが使用されています。 - -## このリポジトリの使い方 - -**すべての依存関係をインストールする** -``` -npm install -``` - -**ESLintを実行する** - -これを実行してコードの品質をチェックすることができます。 - -``` -npm run lint -``` - -**すべてのテストを実行する** -``` -npm test -``` - -**名前でテストを実行する** -``` -npm test -- 'LinkedList' -``` - -**playground** - -データ構造とアルゴリズムを `./src/playground/playground.js` ファイルで再生し、 -それに対するテストを書くことができ `./src/playground/__test__/playground.test.js`. - -次に、次のコマンドを実行して、遊び場コードが正常に動作するかどうかをテストします。 - -``` -npm test -- 'playground' -``` - -## 有用な情報 - -### 参考文献 - -[▶ データ構造とアルゴリズム on YouTube](https://www.youtube.com/playlist?list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) - -### ビッグO表記 - -*Big O表記法は* 入力サイズが大きくなるにつれて実行時間やスペース要件がどのように増加するかに応じてアルゴリズムを分類するために使用されます。下のチャートでは、Big O表記で指定されたアルゴリズムの成長の最も一般的な順序を見つけることができます。 - -![Big Oグラフ](./assets/big-o-graph.png) - -出典: [Big Oチートシート](http://bigocheatsheet.com/). - -以下は、最も使用されているBig O表記のリストと、入力データのさまざまなサイズに対するパフォーマンス比較です。 - -| Big O Notation | Computations for 10 elements | Computations for 100 elements | Computations for 1000 elements | -| -------------- | ---------------------------- | ----------------------------- | ------------------------------- | -| **O(1)** | 1 | 1 | 1 | -| **O(log N)** | 3 | 6 | 9 | -| **O(N)** | 10 | 100 | 1000 | -| **O(N log N)** | 30 | 600 | 9000 | -| **O(N^2)** | 100 | 10000 | 1000000 | -| **O(2^N)** | 1024 | 1.26e+29 | 1.07e+301 | -| **O(N!)** | 3628800 | 9.3e+157 | 4.02e+2567 | - -### データ構造操作の複雑さ - -| Data Structure | Access | Search | Insertion | Deletion | Comments | -| ----------------------- | :-------: | :-------: | :-------: | :-------: | :-------- | -| **Array** | 1 | n | n | n | | -| **Stack** | n | n | 1 | 1 | | -| **Queue** | n | n | 1 | 1 | | -| **Linked List** | n | n | 1 | 1 | | -| **Hash Table** | - | n | n | n | In case of perfect hash function costs would be O(1) | -| **Binary Search Tree** | n | n | n | n | In case of balanced tree costs would be O(log(n)) | -| **B-Tree** | log(n) | log(n) | log(n) | log(n) | | -| **Red-Black Tree** | log(n) | log(n) | log(n) | log(n) | | -| **AVL Tree** | log(n) | log(n) | log(n) | log(n) | | -| **Bloom Filter** | - | 1 | 1 | - | False positives are possible while searching | - -### 配列の並べ替えアルゴリズムの複雑さ - -| Name | Best | Average | Worst | Memory | Stable | Comments | -| --------------------- | :-------------: | :-----------------: | :-----------------: | :-------: | :-------: | :-------- | -| **Bubble sort** | n | n2 | n2 | 1 | Yes | | -| **Insertion sort** | n | n2 | n2 | 1 | Yes | | -| **Selection sort** | n2 | n2 | n2 | 1 | No | | -| **Heap sort** | n log(n) | n log(n) | n log(n) | 1 | No | | -| **Merge sort** | n log(n) | n log(n) | n log(n) | n | Yes | | -| **Quick sort** | n log(n) | n log(n) | n2 | log(n) | No | Quicksort is usually done in-place with O(log(n)) stack space | -| **Shell sort** | n log(n) | depends on gap sequence | n (log(n))2 | 1 | No | | -| **Counting sort** | n + r | n + r | n + r | n + r | Yes | r - biggest number in array | -| **Radix sort** | n * k | n * k | n * k | n + k | Yes | k - length of longest key | - -> ℹ️ A few more [projects](https://trekhleb.dev/projects/) and [articles](https://trekhleb.dev/blog/) about JavaScript and algorithms on [trekhleb.dev](https://trekhleb.dev) diff --git a/README.ko-KR.md b/README.ko-KR.md deleted file mode 100644 index d4b0d4ef14..0000000000 --- a/README.ko-KR.md +++ /dev/null @@ -1,284 +0,0 @@ -# JavaScript 알고리즘 및 자료 구조 - -[![CI](https://github.com/trekhleb/javascript-algorithms/workflows/CI/badge.svg)](https://github.com/trekhleb/javascript-algorithms/actions?query=workflow%3ACI+branch%3Amaster) -[![codecov](https://codecov.io/gh/trekhleb/javascript-algorithms/branch/master/graph/badge.svg)](https://codecov.io/gh/trekhleb/javascript-algorithms) - -이 저장소에는 많이 알려진 알고리즘 및 자료 구조의 Javascript 기반 예제를 담고 있습니다. - -각 알고리즘과 자료 구조에 대해 연관되어 있는 설명이 README에 작성되어 있으며, -링크를 통해 더 자세한 설명을 만날 수 있습니다. (관련된 YouTube 영상도 포함). - -_Read this in other languages:_ -[_English_](https://github.com/trekhleb/javascript-algorithms/), -[_简体中文_](README.zh-CN.md), -[_繁體中文_](README.zh-TW.md), -[_日本語_](README.ja-JP.md), -[_Polski_](README.pl-PL.md), -[_Français_](README.fr-FR.md), -[_Español_](README.es-ES.md), -[_Português_](README.pt-BR.md), -[_Русский_](README.ru-RU.md), -[_Türk_](README.tr-TR.md), -[_Italiana_](README.it-IT.md), -[_Bahasa Indonesia_](README.id-ID.md), -[_Українська_](README.uk-UA.md), -[_Arabic_](README.ar-AR.md), -[_Tiếng Việt_](README.vi-VN.md), -[_Deutsch_](README.de-DE.md), -[_Uzbek_](README.uz-UZ.md) -[_עברית_](README.he-IL.md) - -## 자료 구조 - -자료 구조는 데이터를 특정 방식으로 구성하고 저장함으로써 더 효율적으로 -접근하고 수정할 수 있게 해줍니다. 간단히 말해, 자료 구조는 데이터 값들, -데이터 간의 관계, 그리고 데이터를 다룰 수 있는 함수와 작업의 모임입니다. - - -`B` - 입문자, `A` - 숙련자 - -* `B` [연결 리스트](src/data-structures/linked-list) -* `B` [이중 연결 리스트](src/data-structures/doubly-linked-list) -* `B` [큐](src/data-structures/queue) -* `B` [스택](src/data-structures/stack) -* `B` [해시 테이블](src/data-structures/hash-table) -* `B` [힙](src/data-structures/heap) -* `B` [우선순위 큐](src/data-structures/priority-queue) -* `A` [트라이](src/data-structures/trie) -* `A` [트리](src/data-structures/tree) - * `A` [이진 탐색 트리](src/data-structures/tree/binary-search-tree) - * `A` [AVL 트리](src/data-structures/tree/avl-tree) - * `A` [Red-Black 트리](src/data-structures/tree/red-black-tree) - * `A` [세그먼트 트리](src/data-structures/tree/segment-tree) - min/max/sum range 쿼리 예제. - * `A` [Fenwick 트리](src/data-structures/tree/fenwick-tree) (Binary Indexed Tree) -* `A` [그래프](src/data-structures/graph) (유방향, 무방향) -* `A` [서로소 집합](src/data-structures/disjoint-set) -* `A` [블룸 필터](src/data-structures/bloom-filter) - -## 알고리즘 - -알고리즘은 어떤 종류의 문제를 풀 수 있는 정확한 방법이며, -일련의 작업을 정확하게 정의해 놓은 규칙들입니다. - -`B` - 입문자, `A` - 숙련자 - -### 주제별 알고리즘 - -* **Math** - * `B` [Bit Manipulation](src/algorithms/math/bits) - set/get/update/clear bits, 2의 곱 / 나누기, 음수로 만들기 etc. - * `B` [팩토리얼](src/algorithms/math/factorial) - * `B` [피보나치 수](src/algorithms/math/fibonacci) - * `B` [소수 판별](src/algorithms/math/primality-test) (trial division 방식) - * `B` [유클리드 호제법](src/algorithms/math/euclidean-algorithm) - 최대공약수 (GCD) - * `B` [최소 공배수](src/algorithms/math/least-common-multiple) - LCM - * `B` [에라토스테네스의 체](src/algorithms/math/sieve-of-eratosthenes) - 특정수 이하의 모든 소수 찾기 - * `B` [2의 거듭제곱 판별법](src/algorithms/math/is-power-of-two) - 어떤 수가 2의 거듭제곱인지 판별 (naive 와 bitwise 알고리즘) - * `B` [파스칼 삼각형](src/algorithms/math/pascal-triangle) - * `A` [자연수 분할](src/algorithms/math/integer-partition) - * `A` [리우 후이 π 알고리즘](src/algorithms/math/liu-hui) - N-각형을 기반으로 π 근사치 구하기 -* **Sets** - * `B` [카티지언 프로덕트](src/algorithms/sets/cartesian-product) - 곱집합 - * `B` [Fisher–Yates 셔플](src/algorithms/sets/fisher-yates) - 유한 시퀀스의 무작위 순열 - * `A` [멱집합](src/algorithms/sets/power-set) - 집합의 모든 부분집합 - * `A` [순열](src/algorithms/sets/permutations) (반복 유,무) - * `A` [조합](src/algorithms/sets/combinations) (반복 유,무) - * `A` [최장 공통 부분수열](src/algorithms/sets/longest-common-subsequence) (LCS) - * `A` [최장 증가 수열](src/algorithms/sets/longest-increasing-subsequence) - * `A` [Shortest Common Supersequence](src/algorithms/sets/shortest-common-supersequence) (SCS) - * `A` [배낭 문제](src/algorithms/sets/knapsack-problem) - "0/1" 과 "Unbound" - * `A` [최대 구간합](src/algorithms/sets/maximum-subarray) - "브루트 포스" 과 "동적 계획법" (Kadane's) 버전 - * `A` [조합 합](src/algorithms/sets/combination-sum) - 특정 합을 구성하는 모든 조합 찾기 -* **Strings** - * `B` [해밍 거리](src/algorithms/string/hamming-distance) - 심볼이 다른 위치의 갯수 - * `A` [편집 거리](src/algorithms/string/levenshtein-distance) - 두 시퀀스 간위 최소 편집거리 - * `A` [커누스-모리스-프랫 알고리즘](src/algorithms/string/knuth-morris-pratt) (KMP 알고리즘) - 부분 문자열 탐색 (패턴 매칭) - * `A` [Z 알고리즘](src/algorithms/string/z-algorithm) - 부분 문자열 탐색 (패턴 매칭) - * `A` [라빈 카프 알고리즘](src/algorithms/string/rabin-karp) - 부분 문자열 탐색 - * `A` [최장 공통 부분 문자열](src/algorithms/string/longest-common-substring) - * `A` [정규 표현식 매칭](src/algorithms/string/regular-expression-matching) -* **Searches** - * `B` [선형 탐색](src/algorithms/search/linear-search) - * `B` [점프 탐색](src/algorithms/search/jump-search) (or Block Search) - 정렬된 배열에서 탐색 - * `B` [이진 탐색](src/algorithms/search/binary-search) - 정렬된 배열에서 탐색 - * `B` [보간 탐색](src/algorithms/search/interpolation-search) - 균등한 분포를 이루는 정렬된 배열에서 탐색 -* **Sorting** - * `B` [거품 정렬](src/algorithms/sorting/bubble-sort) - * `B` [선택 정렬](src/algorithms/sorting/selection-sort) - * `B` [삽입 정렬](src/algorithms/sorting/insertion-sort) - * `B` [힙 정렬](src/algorithms/sorting/heap-sort) - * `B` [병합 정렬](src/algorithms/sorting/merge-sort) - * `B` [퀵 정렬](src/algorithms/sorting/quick-sort) - 제자리(in-place)와 제자리가 아닌(non-in-place) 구현 - * `B` [셸 정렬](src/algorithms/sorting/shell-sort) - * `B` [계수 정렬](src/algorithms/sorting/counting-sort) - * `B` [기수 정렬](src/algorithms/sorting/radix-sort) -* **Trees** - * `B` [깊이 우선 탐색](src/algorithms/tree/depth-first-search) (DFS) - * `B` [너비 우선 탐색](src/algorithms/tree/breadth-first-search) (BFS) -* **Graphs** - * `B` [깊이 우선 탐색](src/algorithms/graph/depth-first-search) (DFS) - * `B` [너비 우선 탐색](src/algorithms/graph/breadth-first-search) (BFS) - * `B` [크루스칼 알고리즘](src/algorithms/graph/kruskal) - 최소 신장 트리 찾기 (MST) 무방향 가중 그래프 - * `A` [다익스트라 알고리즘](src/algorithms/graph/dijkstra) - 한 점에서 다른 모든 점까지 최단 거리 찾기 - * `A` [벨만-포드 알고리즘](src/algorithms/graph/bellman-ford) - 한 점에서 다른 모든 점까지 최단 거리 찾기 - * `A` [플로이드-워셜 알고리즘](src/algorithms/graph/floyd-warshall) - 모든 종단 간의 최단거리 찾기 - * `A` [사이클 탐지](src/algorithms/graph/detect-cycle) - 유방향, 무방향 그래프 (DFS 와 Disjoint Set 에 기반한 버전) - * `A` [프림 알고리즘](src/algorithms/graph/prim) - 무방향 가중치 그래프에서 최소 신장 트리 (MST) 찾기 - * `A` [위상 정렬](src/algorithms/graph/topological-sorting) - DFS 방식 - * `A` [단절점](src/algorithms/graph/articulation-points) - 타잔의 알고리즘 (DFS 기반) - * `A` [단절선](src/algorithms/graph/bridges) - DFS 기반 알고리즘 - * `A` [오일러 경로 와 오일러 회로](src/algorithms/graph/eulerian-path) - Fleury의 알고리즘 - 모든 엣지를 한번만 방문 - * `A` [해밀턴 경로](src/algorithms/graph/hamiltonian-cycle) - 모든 꼭짓점을 한번만 방문 - * `A` [강결합 컴포넌트](src/algorithms/graph/strongly-connected-components) - Kosaraju의 알고리즘 - * `A` [외판원 문제](src/algorithms/graph/travelling-salesman) - 각 도시를 다 방문하고 다시 출발점으로 돌아오는 최단 경로 찾기 -* **Uncategorized** - * `B` [하노이 탑](src/algorithms/uncategorized/hanoi-tower) - * `B` [정방 행렬 회전](src/algorithms/uncategorized/square-matrix-rotation) - 제자리(in-place) 알고리즘 - * `B` [점프 게임](src/algorithms/uncategorized/jump-game) - 백트래킹, 동적계획법 (top-down + bottom-up), 탐욕 알고리즘 예제 - * `B` [Unique 경로](src/algorithms/uncategorized/unique-paths) - 백트래킹, 동적계획법, 파스칼 삼각형에 기반한 예제 - * `B` [빗물 담기 문제](src/algorithms/uncategorized/rain-terraces) - trapping rain water problem (동적계획법, 브루트포스 버전) - * `A` [N-Queens 문제](src/algorithms/uncategorized/n-queens) - * `A` [기사의 여행 문제](src/algorithms/uncategorized/knight-tour) - -### 패러다임별 알고리즘 - -알고리즘 패러다임 이란, 알고리즘이 주어진 문제를 해결하기 위해 채택한 기초가 되는 일반적인 방법 혹은 접근법입니다. 알고리즘이 해결하는 문제나 알고리즘의 동작 방식이 완전히 다르더라도,알고리즘의 동작 원칙이 같으면 같은 패러다음을 사용했다고 말할 수 있으며, 주로 알고리즘을 구분하는 기준으로 쓰인다. 알고리즘이 일반적인 컴퓨터의 프로그램에 대한 개념보다 보다 더 추상적인 개념인 것처럼 알고리즘의 패러다임은 명확히 정의된 수학적 실체가 있는 것이 아니기 때문에 그 어떤 알고리즘의 개념보다도 훨씬 추상적인 개념입니다. - -* **브루트 포스(Brute Force)** - 가능한 모든 경우를 탐색한 뒤 최적을 찾아내는 방식입니다. - * `B` [선형 탐색](src/algorithms/search/linear-search) - * `B` [빗물 담기 문제](src/algorithms/uncategorized/rain-terraces) - trapping rain water problem - * `A` [최대 구간합](src/algorithms/sets/maximum-subarray) - * `A` [외판원 문제](src/algorithms/graph/travelling-salesman) - 각 도시를 다 방문하고 다시 출발점으로 돌아오는 최단 경로 찾기 -* **탐욕 알고리즘(Greedy)** - 이후를 고려하지 않고 현재 시점에서 가장 최적인 선택을 하는 방식입니다. - * `B` [점프 게임](src/algorithms/uncategorized/jump-game) - * `A` [쪼갤수 있는 배낭 문제](src/algorithms/sets/knapsack-problem) - * `A` [다익스트라 알고리즘](src/algorithms/graph/dijkstra) - 모든 점 까지의 최단거리 찾기 - * `A` [프림 알고리즘](src/algorithms/graph/prim) - 무방향 가중치 그래프에서 최소 신창 트리 (MST) 찾기 - * `A` [크루스칼 알고리즘](src/algorithms/graph/kruskal) - 무방향 가중치 그래프에서 최소 신창 트리 (MST) 찾기 -* **분할 정복법(Divide and Conquer)** - 문제를 여러 작은 문제로 분할한 뒤 해결하는 방식입니다. - * `B` [이진 탐색](src/algorithms/search/binary-search) - * `B` [하노이 탑](src/algorithms/uncategorized/hanoi-tower) - * `B` [파스칼 삼각형](src/algorithms/math/pascal-triangle) - * `B` [유클리드 호제법](src/algorithms/math/euclidean-algorithm) - 최대공약수 계산 (GCD) - * `B` [병합 정렬](src/algorithms/sorting/merge-sort) - * `B` [퀵 정렬](src/algorithms/sorting/quick-sort) - * `B` [트리 깊이 우선 탐색](src/algorithms/tree/depth-first-search) (DFS) - * `B` [그래프 깊이 우선 탐색](src/algorithms/graph/depth-first-search) (DFS) - * `B` [점프 게임](src/algorithms/uncategorized/jump-game) - * `A` [순열](src/algorithms/sets/permutations) (반복 유,무) - * `A` [조합](src/algorithms/sets/combinations) (반복 유,무) -* **동적 계획법(Dynamic Programming)** - 이전에 찾은 결과를 이용하여 최종적으로 해결하는 방식입니다. - * `B` [피보나치 수](src/algorithms/math/fibonacci) - * `B` [점프 게임](src/algorithms/uncategorized/jump-game) - * `B` [Unique Paths](src/algorithms/uncategorized/unique-paths) - * `B` [빗물 담기 문제](src/algorithms/uncategorized/rain-terraces) - trapping rain water problem - * `A` [편집 거리](src/algorithms/string/levenshtein-distance) - 두 시퀀스 간의 최소 편집 거리 - * `A` [최장 공통 부분 수열](src/algorithms/sets/longest-common-subsequence) (LCS) - * `A` [최장 공통 부분 문자열](src/algorithms/string/longest-common-substring) - * `A` [최장 증가 수열](src/algorithms/sets/longest-increasing-subsequence) - * `A` [Shortest Common Supersequence](src/algorithms/sets/shortest-common-supersequence) - * `A` [0/1 배낭 문제](src/algorithms/sets/knapsack-problem) - * `A` [자연수 분할](src/algorithms/math/integer-partition) - * `A` [최대 구간합](src/algorithms/sets/maximum-subarray) - * `A` [벨만-포드 알고리즘](src/algorithms/graph/bellman-ford) - 모든 점 까지의 최단 거리 찾기 - * `A` [플로이드-워셜 알고리즘](src/algorithms/graph/floyd-warshall) - 모든 종단 간의 최단거리 찾기 - * `A` [정규 표현식 매칭](src/algorithms/string/regular-expression-matching) -* **백트래킹(Backtracking)** - 모든 가능한 경우를 고려한다는 점에서 브루트 포스와 유사합니다. 하지만 다음 단계로 넘어갈때 마다 모든 조건을 만족했는지 확인하고 진행합니다. 만약 조건을 만족하지 못했다면 뒤로 돌아갑니다 (백트래킹). 그리고 다른 경로를 선택합니다. 보통 상태를 유지한 DFS 탐색을 많이 사용합니다. - * `B` [점프 게임](src/algorithms/uncategorized/jump-game) - * `B` [Unique Paths](src/algorithms/uncategorized/unique-paths) - * `A` [해밀턴 경로](src/algorithms/graph/hamiltonian-cycle) - 모든 점을 한번씩 방문 - * `A` [N-Queens 문제](src/algorithms/uncategorized/n-queens) - * `A` [기사의 여행](src/algorithms/uncategorized/knight-tour) - * `A` [조합 합](src/algorithms/sets/combination-sum) - 특정 합을 구성하는 모든 조합 찾기 -* **분기 한정법** - 백트래킹으로 찾은 각 단계의 최소 비용이 드는 해를 기억해 두고 있다가, 이 비용을 이용해서 더 낮은 최적의 해를 찾습니다. 기억해둔 최소 비용들을 이용해 더 높은 비용이 드는 해결법을 탐색 안함으로써 불필요한 시간 소모를 줄입니다. 보통 상태 공간 트리의 DFS 탐색을 이용한 BFS 탐색 방식에서 사용됩니다. - -## 이 저장소의 사용법 - -**모든 종속 모듈들 설치** -``` -npm install -``` - -**ESLint 실행** - -코드의 품질을 확인 할 수 있습니다. - -``` -npm run lint -``` - -**모든 테스트 실행** -``` -npm test -``` - -**이름을 통해 특정 테스트 실행** -``` -npm test -- 'LinkedList' -``` - -**Playground** - - `./src/playground/playground.js` 파일을 통해 자료 구조와 알고리즘을 작성하고 `./src/playground/__test__/playground.test.js`에 테스트를 작성할 수 있습니다. - -그리고 간단하게 아래 명령어를 통해 의도한대로 동작하는지 확인 할 수 있습니다.: - -``` -npm test -- 'playground' -``` - -## 유용한 정보 - -### 참고 - -[▶ Data Structures and Algorithms on YouTube](https://www.youtube.com/playlist?list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) - -### Big O 표기 - -Big O 표기로 표시한 알고리즘의 증가 양상입니다. - -![Big O graphs](./assets/big-o-graph.png) - -Source: [Big O Cheat Sheet](http://bigocheatsheet.com/). - -아래는 가장 많이 사용되는 Big O 표기와 입력 데이터 크기에 따른 성능을 비교한 표입니다. - -| Big O 표기 | 10 개 일때 | 100 개 일때 | 1000 개 일때 | -| -------------- | ---------------------------- | ----------------------------- | ------------------------------- | -| **O(1)** | 1 | 1 | 1 | -| **O(log N)** | 3 | 6 | 9 | -| **O(N)** | 10 | 100 | 1000 | -| **O(N log N)** | 30 | 600 | 9000 | -| **O(N^2)** | 100 | 10000 | 1000000 | -| **O(2^N)** | 1024 | 1.26e+29 | 1.07e+301 | -| **O(N!)** | 3628800 | 9.3e+157 | 4.02e+2567 | - -### 자료 구조 작업별 복잡도 - -| 자료 구조 | 접근 | 검색 | 삽입 | 삭제 | 비고 | -| ------------------------ | :-------: | :-------: | :-------: | :-------: | :-------- | -| **배열** | 1 | n | n | n | | -| **스택** | n | n | 1 | 1 | | -| **큐** | n | n | 1 | 1 | | -| **연결 리스트** | n | n | 1 | 1 | | -| **해시 테이블** | - | n | n | n | 완벽한 해시 함수의 경우 O(1) | -| **이진 탐색 트리** | n | n | n | n | 균형 트리의 경우 O(log(n)) | -| **B-트리** | log(n) | log(n) | log(n) | log(n) | | -| **Red-Black 트리** | log(n) | log(n) | log(n) | log(n) | | -| **AVL 트리** | log(n) | log(n) | log(n) | log(n) | | -| **Bloom Filter** | - | 1 | 1 | - | 거짓 양성이 탐색 중 발생 가능 | - -### 정렬 알고리즘 복잡도 - -| 이름 | 최적 | 평균 | 최악 | 메모리 | 동일값 순서유지 | 비고 | -| --------------------- | :-------------: | :-----------------: | :-----------------: | :-------: | :--------------: | :-------- | -| **거품 정렬** | n | n2 | n2 | 1 | Yes | | -| **삽입 정렬** | n | n2 | n2 | 1 | Yes | | -| **선택 정렬** | n2 | n2 | n2 | 1 | No | | -| **힙 정렬** | n log(n) | n log(n) | n log(n) | 1 | No | | -| **병합 정렬** | n log(n) | n log(n) | n log(n) | n | Yes | | -| **퀵 정렬** | n log(n) | n log(n) | n2 | log(n) | No | 퀵 정렬은 보통 제자리(in-place)로 O(log(n)) 스택공간으로 수행됩니다. | -| **셸 정렬** | n log(n) | 간격 순서에 영향을 받습니다. | n (log(n))2 | 1 | No | | -| **계수 정렬** | n + r | n + r | n + r | n + r | Yes | r - 배열내 가장 큰 수 | -| **기수 정렬** | n * k | n * k | n * k | n + k | Yes | k - 키값의 최대 길이 | - -> ℹ️ A few more [projects](https://trekhleb.dev/projects/) and [articles](https://trekhleb.dev/blog/) about JavaScript and algorithms on [trekhleb.dev](https://trekhleb.dev) diff --git a/README.md b/README.md deleted file mode 100644 index 3e5c5cc096..0000000000 --- a/README.md +++ /dev/null @@ -1,379 +0,0 @@ -# JavaScript Algorithms and Data Structures - -> 🇺🇦 UKRAINE [IS BEING ATTACKED](https://war.ukraine.ua/) BY RUSSIAN ARMY. CIVILIANS ARE GETTING KILLED. RESIDENTIAL AREAS ARE GETTING BOMBED. -> - Help Ukraine via: -> - [Serhiy Prytula Charity Foundation](https://prytulafoundation.org/en/) -> - [Come Back Alive Charity Foundation](https://savelife.in.ua/en/donate-en/) -> - [National Bank of Ukraine](https://bank.gov.ua/en/news/all/natsionalniy-bank-vidkriv-spetsrahunok-dlya-zboru-koshtiv-na-potrebi-armiyi) -> - More info on [war.ukraine.ua](https://war.ukraine.ua/) and [MFA of Ukraine](https://twitter.com/MFA_Ukraine) - -
- -[![CI](https://github.com/trekhleb/javascript-algorithms/workflows/CI/badge.svg)](https://github.com/trekhleb/javascript-algorithms/actions?query=workflow%3ACI+branch%3Amaster) -[![codecov](https://codecov.io/gh/trekhleb/javascript-algorithms/branch/master/graph/badge.svg)](https://codecov.io/gh/trekhleb/javascript-algorithms) -![repo size](https://img.shields.io/github/repo-size/trekhleb/javascript-algorithms.svg) - -This repository contains JavaScript based examples of many -popular algorithms and data structures. - -Each algorithm and data structure has its own separate README -with related explanations and links for further reading (including ones -to YouTube videos). - -_Read this in other languages:_ -[_简体中文_](README.zh-CN.md), -[_繁體中文_](README.zh-TW.md), -[_한국어_](README.ko-KR.md), -[_日本語_](README.ja-JP.md), -[_Polski_](README.pl-PL.md), -[_Français_](README.fr-FR.md), -[_Español_](README.es-ES.md), -[_Português_](README.pt-BR.md), -[_Русский_](README.ru-RU.md), -[_Türkçe_](README.tr-TR.md), -[_Italiano_](README.it-IT.md), -[_Bahasa Indonesia_](README.id-ID.md), -[_Українська_](README.uk-UA.md), -[_Arabic_](README.ar-AR.md), -[_Tiếng Việt_](README.vi-VN.md), -[_Deutsch_](README.de-DE.md), -[_Uzbek_](README.uz-UZ.md), -[_עברית_](README.he-IL.md) - -*☝ Note that this project is meant to be used for learning and researching purposes -only, and it is **not** meant to be used for production.* - -## Data Structures - -A data structure is a particular way of organizing and storing data in a computer so that it can -be accessed and modified efficiently. More precisely, a data structure is a collection of data -values, the relationships among them, and the functions or operations that can be applied to -the data. - -Remember that each data has its own trade-offs. And you need to pay attention more to why you're choosing a certain data structure than to how to implement it. - -`B` - Beginner, `A` - Advanced - -* `B` [Linked List](src/data-structures/linked-list) -* `B` [Doubly Linked List](src/data-structures/doubly-linked-list) -* `B` [Queue](src/data-structures/queue) -* `B` [Stack](src/data-structures/stack) -* `B` [Hash Table](src/data-structures/hash-table) -* `B` [Heap](src/data-structures/heap) - max and min heap versions -* `B` [Priority Queue](src/data-structures/priority-queue) -* `A` [Trie](src/data-structures/trie) -* `A` [Tree](src/data-structures/tree) - * `A` [Binary Search Tree](src/data-structures/tree/binary-search-tree) - * `A` [AVL Tree](src/data-structures/tree/avl-tree) - * `A` [Red-Black Tree](src/data-structures/tree/red-black-tree) - * `A` [Segment Tree](src/data-structures/tree/segment-tree) - with min/max/sum range queries examples - * `A` [Fenwick Tree](src/data-structures/tree/fenwick-tree) (Binary Indexed Tree) -* `A` [Graph](src/data-structures/graph) (both directed and undirected) -* `A` [Disjoint Set](src/data-structures/disjoint-set) - a union–find data structure or merge–find set -* `A` [Bloom Filter](src/data-structures/bloom-filter) -* `A` [LRU Cache](src/data-structures/lru-cache/) - Least Recently Used (LRU) cache - -## Algorithms - -An algorithm is an unambiguous specification of how to solve a class of problems. It is -a set of rules that precisely define a sequence of operations. - -`B` - Beginner, `A` - Advanced - -### Algorithms by Topic - -* **Math** - * `B` [Bit Manipulation](src/algorithms/math/bits) - set/get/update/clear bits, multiplication/division by two, make negative etc. - * `B` [Binary Floating Point](src/algorithms/math/binary-floating-point) - binary representation of the floating-point numbers. - * `B` [Factorial](src/algorithms/math/factorial) - * `B` [Fibonacci Number](src/algorithms/math/fibonacci) - classic and closed-form versions - * `B` [Prime Factors](src/algorithms/math/prime-factors) - finding prime factors and counting them using Hardy-Ramanujan's theorem - * `B` [Primality Test](src/algorithms/math/primality-test) (trial division method) - * `B` [Euclidean Algorithm](src/algorithms/math/euclidean-algorithm) - calculate the Greatest Common Divisor (GCD) - * `B` [Least Common Multiple](src/algorithms/math/least-common-multiple) (LCM) - * `B` [Sieve of Eratosthenes](src/algorithms/math/sieve-of-eratosthenes) - finding all prime numbers up to any given limit - * `B` [Is Power of Two](src/algorithms/math/is-power-of-two) - check if the number is power of two (naive and bitwise algorithms) - * `B` [Pascal's Triangle](src/algorithms/math/pascal-triangle) - * `B` [Complex Number](src/algorithms/math/complex-number) - complex numbers and basic operations with them - * `B` [Radian & Degree](src/algorithms/math/radian) - radians to degree and backwards conversion - * `B` [Fast Powering](src/algorithms/math/fast-powering) - * `B` [Horner's method](src/algorithms/math/horner-method) - polynomial evaluation - * `B` [Matrices](src/algorithms/math/matrix) - matrices and basic matrix operations (multiplication, transposition, etc.) - * `B` [Euclidean Distance](src/algorithms/math/euclidean-distance) - distance between two points/vectors/matrices - * `A` [Integer Partition](src/algorithms/math/integer-partition) - * `A` [Square Root](src/algorithms/math/square-root) - Newton's method - * `A` [Liu Hui π Algorithm](src/algorithms/math/liu-hui) - approximate π calculations based on N-gons - * `A` [Discrete Fourier Transform](src/algorithms/math/fourier-transform) - decompose a function of time (a signal) into the frequencies that make it up -* **Sets** - * `B` [Cartesian Product](src/algorithms/sets/cartesian-product) - product of multiple sets - * `B` [Fisher–Yates Shuffle](src/algorithms/sets/fisher-yates) - random permutation of a finite sequence - * `A` [Power Set](src/algorithms/sets/power-set) - all subsets of a set (bitwise, backtracking, and cascading solutions) - * `A` [Permutations](src/algorithms/sets/permutations) (with and without repetitions) - * `A` [Combinations](src/algorithms/sets/combinations) (with and without repetitions) - * `A` [Longest Common Subsequence](src/algorithms/sets/longest-common-subsequence) (LCS) - * `A` [Longest Increasing Subsequence](src/algorithms/sets/longest-increasing-subsequence) - * `A` [Shortest Common Supersequence](src/algorithms/sets/shortest-common-supersequence) (SCS) - * `A` [Knapsack Problem](src/algorithms/sets/knapsack-problem) - "0/1" and "Unbound" ones - * `A` [Maximum Subarray](src/algorithms/sets/maximum-subarray) - "Brute Force" and "Dynamic Programming" (Kadane's) versions - * `A` [Combination Sum](src/algorithms/sets/combination-sum) - find all combinations that form specific sum -* **Strings** - * `B` [Hamming Distance](src/algorithms/string/hamming-distance) - number of positions at which the symbols are different - * `B` [Palindrome](src/algorithms/string/palindrome) - check if the string is the same in reverse - * `A` [Levenshtein Distance](src/algorithms/string/levenshtein-distance) - minimum edit distance between two sequences - * `A` [Knuth–Morris–Pratt Algorithm](src/algorithms/string/knuth-morris-pratt) (KMP Algorithm) - substring search (pattern matching) - * `A` [Z Algorithm](src/algorithms/string/z-algorithm) - substring search (pattern matching) - * `A` [Rabin Karp Algorithm](src/algorithms/string/rabin-karp) - substring search - * `A` [Longest Common Substring](src/algorithms/string/longest-common-substring) - * `A` [Regular Expression Matching](src/algorithms/string/regular-expression-matching) -* **Searches** - * `B` [Linear Search](src/algorithms/search/linear-search) - * `B` [Jump Search](src/algorithms/search/jump-search) (or Block Search) - search in sorted array - * `B` [Binary Search](src/algorithms/search/binary-search) - search in sorted array - * `B` [Interpolation Search](src/algorithms/search/interpolation-search) - search in uniformly distributed sorted array -* **Sorting** - * `B` [Bubble Sort](src/algorithms/sorting/bubble-sort) - * `B` [Selection Sort](src/algorithms/sorting/selection-sort) - * `B` [Insertion Sort](src/algorithms/sorting/insertion-sort) - * `B` [Heap Sort](src/algorithms/sorting/heap-sort) - * `B` [Merge Sort](src/algorithms/sorting/merge-sort) - * `B` [Quicksort](src/algorithms/sorting/quick-sort) - in-place and non-in-place implementations - * `B` [Shellsort](src/algorithms/sorting/shell-sort) - * `B` [Counting Sort](src/algorithms/sorting/counting-sort) - * `B` [Radix Sort](src/algorithms/sorting/radix-sort) - * `B` [Bucket Sort](src/algorithms/sorting/bucket-sort) -* **Linked Lists** - * `B` [Straight Traversal](src/algorithms/linked-list/traversal) - * `B` [Reverse Traversal](src/algorithms/linked-list/reverse-traversal) -* **Trees** - * `B` [Depth-First Search](src/algorithms/tree/depth-first-search) (DFS) - * `B` [Breadth-First Search](src/algorithms/tree/breadth-first-search) (BFS) -* **Graphs** - * `B` [Depth-First Search](src/algorithms/graph/depth-first-search) (DFS) - * `B` [Breadth-First Search](src/algorithms/graph/breadth-first-search) (BFS) - * `B` [Kruskal’s Algorithm](src/algorithms/graph/kruskal) - finding Minimum Spanning Tree (MST) for weighted undirected graph - * `A` [Dijkstra Algorithm](src/algorithms/graph/dijkstra) - finding the shortest paths to all graph vertices from single vertex - * `A` [Bellman-Ford Algorithm](src/algorithms/graph/bellman-ford) - finding the shortest paths to all graph vertices from single vertex - * `A` [Floyd-Warshall Algorithm](src/algorithms/graph/floyd-warshall) - find the shortest paths between all pairs of vertices - * `A` [Detect Cycle](src/algorithms/graph/detect-cycle) - for both directed and undirected graphs (DFS and Disjoint Set based versions) - * `A` [Prim’s Algorithm](src/algorithms/graph/prim) - finding Minimum Spanning Tree (MST) for weighted undirected graph - * `A` [Topological Sorting](src/algorithms/graph/topological-sorting) - DFS method - * `A` [Articulation Points](src/algorithms/graph/articulation-points) - Tarjan's algorithm (DFS based) - * `A` [Bridges](src/algorithms/graph/bridges) - DFS based algorithm - * `A` [Eulerian Path and Eulerian Circuit](src/algorithms/graph/eulerian-path) - Fleury's algorithm - Visit every edge exactly once - * `A` [Hamiltonian Cycle](src/algorithms/graph/hamiltonian-cycle) - Visit every vertex exactly once - * `A` [Strongly Connected Components](src/algorithms/graph/strongly-connected-components) - Kosaraju's algorithm - * `A` [Travelling Salesman Problem](src/algorithms/graph/travelling-salesman) - shortest possible route that visits each city and returns to the origin city -* **Cryptography** - * `B` [Polynomial Hash](src/algorithms/cryptography/polynomial-hash) - rolling hash function based on polynomial - * `B` [Rail Fence Cipher](src/algorithms/cryptography/rail-fence-cipher) - a transposition cipher algorithm for encoding messages - * `B` [Caesar Cipher](src/algorithms/cryptography/caesar-cipher) - simple substitution cipher - * `B` [Hill Cipher](src/algorithms/cryptography/hill-cipher) - substitution cipher based on linear algebra -* **Machine Learning** - * `B` [NanoNeuron](https://github.com/trekhleb/nano-neuron) - 7 simple JS functions that illustrate how machines can actually learn (forward/backward propagation) - * `B` [k-NN](src/algorithms/ml/knn) - k-nearest neighbors classification algorithm - * `B` [k-Means](src/algorithms/ml/k-means) - k-Means clustering algorithm -* **Image Processing** - * `B` [Seam Carving](src/algorithms/image-processing/seam-carving) - content-aware image resizing algorithm -* **Statistics** - * `B` [Weighted Random](src/algorithms/statistics/weighted-random) - select the random item from the list based on items' weights -* **Evolutionary algorithms** - * `A` [Genetic algorithm](https://github.com/trekhleb/self-parking-car-evolution) - example of how the genetic algorithm may be applied for training the self-parking cars -* **Uncategorized** - * `B` [Tower of Hanoi](src/algorithms/uncategorized/hanoi-tower) - * `B` [Square Matrix Rotation](src/algorithms/uncategorized/square-matrix-rotation) - in-place algorithm - * `B` [Jump Game](src/algorithms/uncategorized/jump-game) - backtracking, dynamic programming (top-down + bottom-up) and greedy examples - * `B` [Unique Paths](src/algorithms/uncategorized/unique-paths) - backtracking, dynamic programming and Pascal's Triangle based examples - * `B` [Rain Terraces](src/algorithms/uncategorized/rain-terraces) - trapping rain water problem (dynamic programming and brute force versions) - * `B` [Recursive Staircase](src/algorithms/uncategorized/recursive-staircase) - count the number of ways to reach to the top (4 solutions) - * `B` [Best Time To Buy Sell Stocks](src/algorithms/uncategorized/best-time-to-buy-sell-stocks) - divide and conquer and one-pass examples - * `B` [Valid Parentheses](src/algorithms/stack/valid-parentheses) - check if a string has valid parentheses (using stack) - * `A` [N-Queens Problem](src/algorithms/uncategorized/n-queens) - * `A` [Knight's Tour](src/algorithms/uncategorized/knight-tour) - -### Algorithms by Paradigm - -An algorithmic paradigm is a generic method or approach which underlies the design of a class -of algorithms. It is an abstraction higher than the notion of an algorithm, just as an -algorithm is an abstraction higher than a computer program. - -* **Brute Force** - look at all the possibilities and selects the best solution - * `B` [Linear Search](src/algorithms/search/linear-search) - * `B` [Rain Terraces](src/algorithms/uncategorized/rain-terraces) - trapping rain water problem - * `B` [Recursive Staircase](src/algorithms/uncategorized/recursive-staircase) - count the number of ways to reach the top - * `A` [Maximum Subarray](src/algorithms/sets/maximum-subarray) - * `A` [Travelling Salesman Problem](src/algorithms/graph/travelling-salesman) - shortest possible route that visits each city and returns to the origin city - * `A` [Discrete Fourier Transform](src/algorithms/math/fourier-transform) - decompose a function of time (a signal) into the frequencies that make it up -* **Greedy** - choose the best option at the current time, without any consideration for the future - * `B` [Jump Game](src/algorithms/uncategorized/jump-game) - * `A` [Unbound Knapsack Problem](src/algorithms/sets/knapsack-problem) - * `A` [Dijkstra Algorithm](src/algorithms/graph/dijkstra) - finding the shortest path to all graph vertices - * `A` [Prim’s Algorithm](src/algorithms/graph/prim) - finding Minimum Spanning Tree (MST) for weighted undirected graph - * `A` [Kruskal’s Algorithm](src/algorithms/graph/kruskal) - finding Minimum Spanning Tree (MST) for weighted undirected graph -* **Divide and Conquer** - divide the problem into smaller parts and then solve those parts - * `B` [Binary Search](src/algorithms/search/binary-search) - * `B` [Tower of Hanoi](src/algorithms/uncategorized/hanoi-tower) - * `B` [Pascal's Triangle](src/algorithms/math/pascal-triangle) - * `B` [Euclidean Algorithm](src/algorithms/math/euclidean-algorithm) - calculate the Greatest Common Divisor (GCD) - * `B` [Merge Sort](src/algorithms/sorting/merge-sort) - * `B` [Quicksort](src/algorithms/sorting/quick-sort) - * `B` [Tree Depth-First Search](src/algorithms/tree/depth-first-search) (DFS) - * `B` [Graph Depth-First Search](src/algorithms/graph/depth-first-search) (DFS) - * `B` [Matrices](src/algorithms/math/matrix) - generating and traversing the matrices of different shapes - * `B` [Jump Game](src/algorithms/uncategorized/jump-game) - * `B` [Fast Powering](src/algorithms/math/fast-powering) - * `B` [Best Time To Buy Sell Stocks](src/algorithms/uncategorized/best-time-to-buy-sell-stocks) - divide and conquer and one-pass examples - * `A` [Permutations](src/algorithms/sets/permutations) (with and without repetitions) - * `A` [Combinations](src/algorithms/sets/combinations) (with and without repetitions) - * `A` [Maximum Subarray](src/algorithms/sets/maximum-subarray) -* **Dynamic Programming** - build up a solution using previously found sub-solutions - * `B` [Fibonacci Number](src/algorithms/math/fibonacci) - * `B` [Jump Game](src/algorithms/uncategorized/jump-game) - * `B` [Unique Paths](src/algorithms/uncategorized/unique-paths) - * `B` [Rain Terraces](src/algorithms/uncategorized/rain-terraces) - trapping rain water problem - * `B` [Recursive Staircase](src/algorithms/uncategorized/recursive-staircase) - count the number of ways to reach the top - * `B` [Seam Carving](src/algorithms/image-processing/seam-carving) - content-aware image resizing algorithm - * `A` [Levenshtein Distance](src/algorithms/string/levenshtein-distance) - minimum edit distance between two sequences - * `A` [Longest Common Subsequence](src/algorithms/sets/longest-common-subsequence) (LCS) - * `A` [Longest Common Substring](src/algorithms/string/longest-common-substring) - * `A` [Longest Increasing Subsequence](src/algorithms/sets/longest-increasing-subsequence) - * `A` [Shortest Common Supersequence](src/algorithms/sets/shortest-common-supersequence) - * `A` [0/1 Knapsack Problem](src/algorithms/sets/knapsack-problem) - * `A` [Integer Partition](src/algorithms/math/integer-partition) - * `A` [Maximum Subarray](src/algorithms/sets/maximum-subarray) - * `A` [Bellman-Ford Algorithm](src/algorithms/graph/bellman-ford) - finding the shortest path to all graph vertices - * `A` [Floyd-Warshall Algorithm](src/algorithms/graph/floyd-warshall) - find the shortest paths between all pairs of vertices - * `A` [Regular Expression Matching](src/algorithms/string/regular-expression-matching) -* **Backtracking** - similarly to brute force, try to generate all possible solutions, but each time you generate the next solution, you test -if it satisfies all conditions and only then continue generating subsequent solutions. Otherwise, backtrack and go on a -different path to finding a solution. Normally the DFS traversal of state-space is being used. - * `B` [Jump Game](src/algorithms/uncategorized/jump-game) - * `B` [Unique Paths](src/algorithms/uncategorized/unique-paths) - * `B` [Power Set](src/algorithms/sets/power-set) - all subsets of a set - * `A` [Hamiltonian Cycle](src/algorithms/graph/hamiltonian-cycle) - Visit every vertex exactly once - * `A` [N-Queens Problem](src/algorithms/uncategorized/n-queens) - * `A` [Knight's Tour](src/algorithms/uncategorized/knight-tour) - * `A` [Combination Sum](src/algorithms/sets/combination-sum) - find all combinations that form specific sum -* **Branch & Bound** - remember the lowest-cost solution found at each stage of the backtracking -search, and use the cost of the lowest-cost solution found so far as a lower bound on the cost of -a least-cost solution to the problem in order to discard partial solutions with costs larger than the -lowest-cost solution found so far. Normally, BFS traversal in combination with DFS traversal of state-space -tree is being used. - -## How to use this repository - -**Install all dependencies** - -``` -npm install -``` - -**Run ESLint** - -You may want to run it to check code quality. - -``` -npm run lint -``` - -**Run all tests** - -``` -npm test -``` - -**Run tests by name** - -``` -npm test -- 'LinkedList' -``` - -**Troubleshooting** - -If linting or testing is failing, try to delete the `node_modules` folder and re-install npm packages: - -``` -rm -rf ./node_modules -npm i -``` - -Also, make sure that you're using the correct Node version (`>=16`). If you're using [nvm](https://github.com/nvm-sh/nvm) for Node version management you may run `nvm use` from the root folder of the project and the correct version will be picked up. - -**Playground** - -You may play with data-structures and algorithms in `./src/playground/playground.js` file and write -tests for it in `./src/playground/__test__/playground.test.js`. - -Then just, simply run the following command to test if your playground code works as expected: - -``` -npm test -- 'playground' -``` - -## Useful Information - -### References - -- [▶ Data Structures and Algorithms on YouTube](https://www.youtube.com/playlist?list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) -- [✍🏻 Data Structure Sketches](https://okso.app/showcase/data-structures) - -### Big O Notation - -*Big O notation* is used to classify algorithms according to how their running time or space requirements grow as the input size grows. -On the chart below, you may find the most common orders of growth of algorithms specified in Big O notation. - -![Big O graphs](./assets/big-o-graph.png) - -Source: [Big O Cheat Sheet](http://bigocheatsheet.com/). - -Below is the list of some of the most used Big O notations and their performance comparisons against different sizes of the input data. - -| Big O Notation | Type | Computations for 10 elements | Computations for 100 elements | Computations for 1000 elements | -| -------------- | ----------- | ---------------------------- | ----------------------------- | ------------------------------- | -| **O(1)** | Constant | 1 | 1 | 1 | -| **O(log N)** | Logarithmic | 3 | 6 | 9 | -| **O(N)** | Linear | 10 | 100 | 1000 | -| **O(N log N)** | n log(n) | 30 | 600 | 9000 | -| **O(N^2)** | Quadratic | 100 | 10000 | 1000000 | -| **O(2^N)** | Exponential | 1024 | 1.26e+29 | 1.07e+301 | -| **O(N!)** | Factorial | 3628800 | 9.3e+157 | 4.02e+2567 | - -### Data Structure Operations Complexity - -| Data Structure | Access | Search | Insertion | Deletion | Comments | -| ----------------------- | :-------: | :-------: | :-------: | :-------: | :-------- | -| **Array** | 1 | n | n | n | | -| **Stack** | n | n | 1 | 1 | | -| **Queue** | n | n | 1 | 1 | | -| **Linked List** | n | n | 1 | n | | -| **Hash Table** | - | n | n | n | In case of perfect hash function costs would be O(1) | -| **Binary Search Tree** | n | n | n | n | In case of balanced tree costs would be O(log(n)) | -| **B-Tree** | log(n) | log(n) | log(n) | log(n) | | -| **Red-Black Tree** | log(n) | log(n) | log(n) | log(n) | | -| **AVL Tree** | log(n) | log(n) | log(n) | log(n) | | -| **Bloom Filter** | - | 1 | 1 | - | False positives are possible while searching | - -### Array Sorting Algorithms Complexity - -| Name | Best | Average | Worst | Memory | Stable | Comments | -| --------------------- | :-------------: | :-----------------: | :-----------------: | :-------: | :-------: | :-------- | -| **Bubble sort** | n | n2 | n2 | 1 | Yes | | -| **Insertion sort** | n | n2 | n2 | 1 | Yes | | -| **Selection sort** | n2 | n2 | n2 | 1 | No | | -| **Heap sort** | n log(n) | n log(n) | n log(n) | 1 | No | | -| **Merge sort** | n log(n) | n log(n) | n log(n) | n | Yes | | -| **Quick sort** | n log(n) | n log(n) | n2 | log(n) | No | Quicksort is usually done in-place with O(log(n)) stack space | -| **Shell sort** | n log(n) | depends on gap sequence | n (log(n))2 | 1 | No | | -| **Counting sort** | n + r | n + r | n + r | n + r | Yes | r - biggest number in array | -| **Radix sort** | n * k | n * k | n * k | n + k | Yes | k - length of longest key | - -## Project Backers - -> You may support this project via ❤️️ [GitHub](https://github.com/sponsors/trekhleb) or ❤️️ [Patreon](https://www.patreon.com/trekhleb). - -[Folks who are backing this project](https://github.com/trekhleb/javascript-algorithms/blob/master/BACKERS.md) `∑ = 1` - -## Author - -[@trekhleb](https://trekhleb.dev) - -A few more [projects](https://trekhleb.dev/projects/) and [articles](https://trekhleb.dev/blog/) about JavaScript and algorithms on [trekhleb.dev](https://trekhleb.dev) diff --git a/README.pl-PL.md b/README.pl-PL.md deleted file mode 100644 index 56617030ab..0000000000 --- a/README.pl-PL.md +++ /dev/null @@ -1,296 +0,0 @@ -# JavaScript Algorytmy i Struktury Danych - -[![CI](https://github.com/trekhleb/javascript-algorithms/workflows/CI/badge.svg)](https://github.com/trekhleb/javascript-algorithms/actions?query=workflow%3ACI+branch%3Amaster) -[![codecov](https://codecov.io/gh/trekhleb/javascript-algorithms/branch/master/graph/badge.svg)](https://codecov.io/gh/trekhleb/javascript-algorithms) - -To repozytorium zawiera wiele przykładów JavaScript opartych na -znanych algorytmach i strukturach danych. - -Każdy algorytm i struktura danych zawiera osobny plik README -wraz z powiązanymi wyjaśnieniami i odnośnikami do dalszego czytania -(włącznie z tymi do YouTube videos). - -_Read this in other languages:_ -[_English_](https://github.com/trekhleb/javascript-algorithms/) -[_简体中文_](README.zh-CN.md), -[_繁體中文_](README.zh-TW.md), -[_한국어_](README.ko-KR.md), -[_日本語_](README.ja-JP.md), -[_Français_](README.fr-FR.md), -[_Español_](README.es-ES.md), -[_Português_](README.pt-BR.md), -[_Русский_](README.ru-RU.md), -[_Türk_](README.tr-TR.md), -[_Italiana_](README.it-IT.md), -[_Bahasa Indonesia_](README.id-ID.md), -[_Українська_](README.uk-UA.md), -[_Arabic_](README.ar-AR.md), -[_Tiếng Việt_](README.vi-VN.md), -[_Deutsch_](README.de-DE.md), -[_Uzbek_](README.uz-UZ.md) -[_עברית_](README.he-IL.md) - -## Struktury Danych - -Struktura danych to sposób uporządkowania i przechowywania informacji w -komputerze żeby mogłaby być sprawnie dostępna i efektywnie zmodyfikowana. -Dokładniej, struktura danych jest zbiorem wartości danych, relacjami -pomiędzy nimi, zadaniami lub działaniami, które mogą dotyczyć danych. - -`B` - Początkujący, `A` - Zaawansowany - -* `B` [Lista](src/data-structures/linked-list) -* `B` [Lista Dwukierunkowa](src/data-structures/doubly-linked-list) -* `B` [Kolejka](src/data-structures/queue) -* `B` [Stos](src/data-structures/stack) -* `B` [Tabela Skrótu](src/data-structures/hash-table) -* `B` [Sterta](src/data-structures/heap) -* `B` [Kolejka Priorytetowa](src/data-structures/priority-queue) -* `A` [Trie](src/data-structures/trie) -* `A` [Drzewo](src/data-structures/tree) - * `A` [Wyszukiwanie Binarne](src/data-structures/tree/binary-search-tree) - * `A` [AVL Drzewo](src/data-structures/tree/avl-tree) - * `A` [Drzewa czerwono-czarne](src/data-structures/tree/red-black-tree) - * `A` [Drzewo Segmentu](src/data-structures/tree/segment-tree) - z przykładami zapytań o min / max / sumie sum - * `A` [Drzewo Fenwicka](src/data-structures/tree/fenwick-tree) (Drzewo Indeksowane Binarnie) -* `A` [Graf](src/data-structures/graph) (zarówno skierowane i nieukierunkowane) -* `A` [Rozłączny Zestaw](src/data-structures/disjoint-set) -* `A` [Filtr Blooma](src/data-structures/bloom-filter) - -## Algorytmy - -Algorytm jest to skończony ciąg jasno zdefiniowanych czynności, koniecznych -do wykonania pewnego rodzaju zadań. Sposób postępowania prowadzący do -rozwiązania problemu. - -`B` - Początkujący, `A` - Zaawansowany - -### Algorytmy według tematu - -* **Matematyka** - * `B` [Manipulacja Bitami](src/algorithms/math/bits) - ustaw / uzyskaj / aktualizuj / usuwaj bity, mnożenie / dzielenie przez dwa, tworzenie negatywów itp. - * `B` [Silnia](src/algorithms/math/factorial) - * `B` [Ciąg Fibonacciego](src/algorithms/math/fibonacci) - * `B` [Test Pierwszorzędności](src/algorithms/math/primality-test) (metoda podziału na próby) - * `B` [Algorytm Euclideana](src/algorithms/math/euclidean-algorithm) - obliczyć Największy Wspólny Dzielnik (GCD) - * `B` [Najmniejsza Wspólna Wielokrotność](src/algorithms/math/least-common-multiple) (LCM) - * `B` [Sito Eratosthenes-a](src/algorithms/math/sieve-of-eratosthenes) - znajdowanie wszystkich liczb pierwszych do określonego limitu - * `B` [Jest Potęgą Dwójki](src/algorithms/math/is-power-of-two) - sprawdź, czy liczba jest potęgą dwóch (algorytmy naiwne i bitowe) - * `B` [Trójkąt Pascala](src/algorithms/math/pascal-triangle) - * `A` [Partycja Całkowita](src/algorithms/math/integer-partition) - * `A` [Algorytm Liu Huia](src/algorithms/math/liu-hui) - przybliżone obliczenia na podstawie N-gonów -* **Zestawy** - * `B` [Produkt Kartezyjny](src/algorithms/sets/cartesian-product) - wynik wielu zestawów - * `B` [Przetasowanie Fisher Yates-a](src/algorithms/sets/fisher-yates) - losowa permutacja kończącej się serii - * `A` [Zestaw Zasilający](src/algorithms/sets/power-set) - podzbiór wszystkich serii - * `A` [Permutacje](src/algorithms/sets/permutations) (z albo bez powtórzeń) - * `A` [Kombinacje](src/algorithms/sets/combinations) (z albo bez powtórzeń) - * `A` [Najdłuższa Wspólna Podsekwencja](src/algorithms/sets/longest-common-subsequence) (LCS) - * `A` [Najdłuższa Wzrostająca Podsekwencja](src/algorithms/sets/longest-increasing-subsequence) - * `A` [Najkrótsza Wspólna Supersekwencja](src/algorithms/sets/shortest-common-supersequence) (SCS) - * `A` [Problem Knapsacka](src/algorithms/sets/knapsack-problem) - "0/1" i "Rozwiązany" - * `A` [Maksymalna Podtablica](src/algorithms/sets/maximum-subarray) - "Metoda Siłowa" i "Dynamiczne Programowanie" (Kadane-a) wersje - * `A` [Suma Kombinacji](src/algorithms/sets/combination-sum) - -znajdź wszystkie kombinacje, które tworzą określoną sumę -* **Łańcuchy** - * `B` [Odległość Hamminga](src/algorithms/string/hamming-distance) - liczba pozycji, w których symbole są różne - * `A` [Odległość Levenshteina](src/algorithms/string/levenshtein-distance) - minimalna odległość edycji między dwiema sekwencjami - * `A` [Algorytm Knuth–Morris–Pratta](src/algorithms/string/knuth-morris-pratt) (Algorytm KMP) - dopasowywanie wzorców (dopasowywanie wzorców) - * `A` [Algorytm Z](src/algorithms/string/z-algorithm) - szukanie podłańcucha(dopasowywanie wzorców) - * `A` [Algorytm Rabin Karpa](src/algorithms/string/rabin-karp) - szukanie podłańcucha - * `A` [Najdłuższa Wspólna Podłańcucha](src/algorithms/string/longest-common-substring) - * `A` [Dopasowanie Wyrażeń Regularnych](src/algorithms/string/regular-expression-matching) -* **Szukanie** - * `B` [Wyszukiwanie Liniowe](src/algorithms/search/linear-search) - * `B` [Jump Search](src/algorithms/search/jump-search) (lub Przeszukiwanie Bloku) - szukaj w posortowanej tablicy - * `B` [Wyszukiwanie Binarne](src/algorithms/search/binary-search) - szukaj w posortowanej tablicy - * `B` [Wyszukiwanie Interpolacyjne](src/algorithms/search/interpolation-search) - szukaj w równomiernie rozłożonej, posortowanej tablicy -* **Sortowanie** - * `B` [Sortowanie bąbelkowe](src/algorithms/sorting/bubble-sort) - * `B` [Sortowanie przez wymiane](src/algorithms/sorting/selection-sort) - * `B` [Sortowanie przez wstawianie](src/algorithms/sorting/insertion-sort) - * `B` [Sortowanie stogowe](src/algorithms/sorting/heap-sort) - * `B` [Sortowanie przez scalanie](src/algorithms/sorting/merge-sort) - * `B` [Sortowanie szybkie](src/algorithms/sorting/quick-sort) - wdrożenia w miejscu i nie na miejscu - * `B` [Sortowanie Shella](src/algorithms/sorting/shell-sort) - * `B` [Sortowanie przez zliczanie](src/algorithms/sorting/counting-sort) - * `B` [Sortowanie pozycyjne](src/algorithms/sorting/radix-sort) -* **Drzewa** - * `B` [Przeszukiwanie w głąb](src/algorithms/tree/depth-first-search) (DFS) - * `B` [Przeszukiwanie wszerz](src/algorithms/tree/breadth-first-search) (BFS) -* **Grafy** - * `B` [Przeszukiwanie w głąb](src/algorithms/graph/depth-first-search) (DFS) - * `B` [Przeszukiwanie wszerz](src/algorithms/graph/breadth-first-search) (BFS) - * `B` [Algorytm Kruskala](src/algorithms/graph/kruskal) - znalezienie Minimalnego Drzewa Opinającego (MST) dla ważonego nieukierunkowanego wykresu - * `A` [Algorytm Dijkstry](src/algorithms/graph/dijkstra) - znajdowanie najkrótszej ścieżki z pojedynczego źródła w grafie - * `A` [Algorytm Bellmana-Forda](src/algorithms/graph/bellman-ford) - znajdowanie najkrótszych ścieżek do wszystkich wierzchołków wykresu z jednego wierzchołka - * `A` [Algorytm Floyd-Warshalla](src/algorithms/graph/floyd-warshall) - znajdź najkrótsze ścieżki między wszystkimi parami wierzchołków - * `A` [Detect Cycle](src/algorithms/graph/detect-cycle) - zarówno dla wykresów skierowanych, jak i nieukierunkowanych(wersje oparte na DFS i Rozłączny Zestaw) - * `A` [Algorytm Prima](src/algorithms/graph/prim) - znalezienie Minimalnego Drzewa Opinającego (MST) dla ważonego nieukierunkowanego wykresu - * `A` [Sortowanie Topologiczne](src/algorithms/graph/topological-sorting) - metoda DFS - * `A` [Punkty Artykulacji](src/algorithms/graph/articulation-points) - Algorytm Tarjana (oparty o DFS) - * `A` [Mosty](src/algorithms/graph/bridges) - Oparty na algorytmie DFS - * `A` [Ścieżka Euleriana i Obwód Euleriana](src/algorithms/graph/eulerian-path) - Algorytm Fleurya - Odwiedź każdą krawędź dokładnie raz - * `A` [Cykl Hamiltoniana](src/algorithms/graph/hamiltonian-cycle) - Odwiedź każdy wierzchołek dokładnie raz - * `A` [Silnie Połączone Komponenty](src/algorithms/graph/strongly-connected-components) - Algorytm Kosaraja - * `A` [Travelling Salesman Problem](src/algorithms/graph/travelling-salesman) - najkrótsza ścieżka która odwiedza każde miasto i wraca miasta początkującego -* **Niezkategorizowane** - * `B` [Wieża Hanoi](src/algorithms/uncategorized/hanoi-tower) - * `B` [Kwadratowa Matryca Obrotu](src/algorithms/uncategorized/square-matrix-rotation) - algorytm w miejscu - * `B` [Jump Game](src/algorithms/uncategorized/jump-game) - cofanie, dynamiczne programowanie (od góry do dołu + od dołu do góry) i przykłady chciwego - * `B` [Unikatowe Ścieżki](src/algorithms/uncategorized/unique-paths) - cofanie, dynamiczne programowanie i przykłady oparte na Trójkącie Pascala - * `A` [Problem N-Queens](src/algorithms/uncategorized/n-queens) - * `A` [Knight's Tour](src/algorithms/uncategorized/knight-tour) - -### Algorytmy według paradygmatu - -Paradygmat algorytmiczny jest ogólną metodą lub podejściem, które jest -podstawą projektowania klasy algorytmów. Jest abstrakcją wyższą niż -pojęcie algorytmu, podobnie jak algorytm jest abstrakcją wyższą niż -program komputerowy. - -* **Metoda Siłowa** - Sprawdza wszystkie możliwosci i wybiera najlepsze rozwiązanie. - * `B` [Wyszukiwanie Liniowe](src/algorithms/search/linear-search) - * `A` [Maksymalna Podtablica](src/algorithms/sets/maximum-subarray) - * `A` [Problem z Podróżującym Sprzedawcą](src/algorithms/graph/travelling-salesman) - najkrótsza możliwa trasa, która odwiedza każde miasto i wraca do miasta początkowego -* **Chciwy** - wybierz najlepszą opcję w obecnym czasie, bez względu na przyszłość - * `B` [Jump Game](src/algorithms/uncategorized/jump-game) - * `A` [Niezwiązany Problem Knapsacka ](src/algorithms/sets/knapsack-problem) - * `A` [Algorytm Dijkstry](src/algorithms/graph/dijkstra) - -znalezienie najkrótszej ścieżki do wszystkich wierzchołków grafu - * `A` [Algorytm Prima](src/algorithms/graph/prim) - znalezienie Minimalnego Drzewa Opinającego (MST) dla ważonego nieukierunkowanego wykresu - * `A` [Algorytm Kruskala](src/algorithms/graph/kruskal) - znalezienie Minimalnego Drzewa Opinającego (MST) dla ważonego nieukierunkowanego wykresu -* **Dziel i Zwyciężaj** - podziel problem na mniejsze części, a następnie rozwiąż te części - * `B` [Wyszukiwanie Binarne](src/algorithms/search/binary-search) - * `B` [Wieża Hanoi](src/algorithms/uncategorized/hanoi-tower) - * `B` [Trójkąt Pascala](src/algorithms/math/pascal-triangle) - * `B` [Algorytm Euclideana](src/algorithms/math/euclidean-algorithm) - obliczyć Największy Wspólny Dzielnik(GCD) - * `B` [Sortowanie przez scalanie](src/algorithms/sorting/merge-sort) - * `B` [Szybkie Sortowanie](src/algorithms/sorting/quick-sort) - * `B` [Drzewo Przeszukiwania W Głąb](src/algorithms/tree/depth-first-search) (DFS) - * `B` [Graf Przeszukiwania W Głąb](src/algorithms/graph/depth-first-search) (DFS) - * `B` [Jump Game](src/algorithms/uncategorized/jump-game) - * `A` [Permutacje](src/algorithms/sets/permutations) (z albo bez powtórzeń) - * `A` [Kombinacje](src/algorithms/sets/combinations) (z albo bez powtórzeń) -* **Programowanie Dynamiczne** - zbuduj rozwiązanie, korzystając z wcześniej znalezionych podrzędnych rozwiązań - * `B` [Ciąg Fibonacciego](src/algorithms/math/fibonacci) - * `B` [Jump Game](src/algorithms/uncategorized/jump-game) - * `B` [Unikatowe Scieżki](src/algorithms/uncategorized/unique-paths) - * `A` [Dystans Levenshteina](src/algorithms/string/levenshtein-distance) - minimalna odległość edycji między dwiema sekwencjami - * `A` [Najdłuższa Wspólna Podsekwencja](src/algorithms/sets/longest-common-subsequence) (LCS) - * `A` [Najdłuższa Wspólna Podłańcucha](src/algorithms/string/longest-common-substring) - * `A` [Najdłuższa Wzrostająca Podsekwencja](src/algorithms/sets/longest-increasing-subsequence) - * `A` [Najkrótsza Wspólna Supersekwencja](src/algorithms/sets/shortest-common-supersequence) - * `A` [0/1 Problem Knapsacka](src/algorithms/sets/knapsack-problem) - * `A` [Partycja Całkowita](src/algorithms/math/integer-partition) - * `A` [Maksymalne Podtablice](src/algorithms/sets/maximum-subarray) - * `A` [Algorytm Bellman-Forda](src/algorithms/graph/bellman-ford) - znalezienie najkrótszej ścieżki wszystkich wierzchołków wykresu - * `A` [Algorytm Floyd-Warshalla](src/algorithms/graph/floyd-warshall) - -znajdź najkrótsze ścieżki między wszystkimi parami wierzchołków - * `A` [Dopasowanie Wyrażeń Regularnych](src/algorithms/string/regular-expression-matching) -* **Algorytm z nawrotami** - podobny do metody siłowej, próbuje wygenerować wszystkie możliwe rozwiązania, jednak za każdym razem generujesz następne rozwiązanie które testujesz -jeżeli zaspokaja wszystkie warunki, tylko wtedy generuje kolejne rozwiązania. W innym wypadku, cofa sie, i podąża inna ścieżka znaleźenia rozwiązania. Zazwyczaj, używane jest przejście przez Przeszukiwania W Głąb(DFS) przestrzeni stanów. - * `B` [Jump Game](src/algorithms/uncategorized/jump-game) - * `B` [Unikatowe Scieżki](src/algorithms/uncategorized/unique-paths) - * `A` [Cykl Hamiltoniana](src/algorithms/graph/hamiltonian-cycle) - Odwiedź każdy wierzchołek dokładnie raz - * `A` [Problem N-Queens](src/algorithms/uncategorized/n-queens) - * `A` [Knight's Tour](src/algorithms/uncategorized/knight-tour) - * `A` [Zestaw Sumy](src/algorithms/sets/combination-sum) - znajduje wszystkie zestawy które tworzą określoną sumę -* **Metoda Podziału i Ograniczeń** - Pamięta o niskonakładowym rozwiązaniu znalezionym na każdym etapie szukania nawrotu, -używa kosztu niskonakładowego kosztu, które dotychczas zostało znalezione jako niska granica najmniejszego kosztu -do rozwiązanie problemu, aby odrzucić cząstkowe rozwiązania o kosztach większych niż niskonakładowe -rozwiązanie znalezione do tej pory. -Zazwyczan trajektoria BFS, w połączeniu z trajektorią Przeszukiwania W Głąb (DFS) drzewa przestrzeni stanów jest użyte. - -## Jak używać repozytorium - -**Zainstaluj wszystkie zależnosci** -``` -npm install -``` - -**Uruchom ESLint** - -Możesz to uruchomić aby sprawdzić jakość kodu. - -``` -npm run lint -``` - -**Uruchom wszystkie testy** -``` -npm test -``` - -**Uruchom testy używając określonej nazwy** -``` -npm test -- 'LinkedList' -``` - -**Playground** - -Możesz pociwiczyć ze strukturą danych i algorytmami w `./src/playground/playground.js` zakartotekuj i napisz -testy do tego w `./src/playground/__test__/playground.test.js`. - -Następnie uruchom następującą komendę w celu przetestowania czy twoje kod działa według oczekiwań: - -``` -npm test -- 'playground' -``` - -## Pomocne informacje - -### Źródła - -[â–¶ Struktury Danych i Algorytmy na YouTube](https://www.youtube.com/playlist?list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) - -### Big O Notacja - -Kolejność wzrastania algorytmów według Big O notacji. - -![Big O grafy](./assets/big-o-graph.png) - -Źródło: [Big O Cheat Sheet](http://bigocheatsheet.com/). - -Poniżej umieszczamy listę najbardziej używanych Big O notacji i ich porównania wydajności do róznych rozmiarów z wprowadzonych danych. - -| Big O notacja | Obliczenia na 10 elementów | Obliczenia na 100 elementów | Obliczenia na 1000 elementów | -| -------------- | ---------------------------- | ----------------------------- | ------------------------------- | -| **O(1)** | 1 | 1 | 1 | -| **O(log N)** | 3 | 6 | 9 | -| **O(N)** | 10 | 100 | 1000 | -| **O(N log N)** | 30 | 600 | 9000 | -| **O(N^2)** | 100 | 10000 | 1000000 | -| **O(2^N)** | 1024 | 1.26e+29 | 1.07e+301 | -| **O(N!)** | 3628800 | 9.3e+157 | 4.02e+2567 | - -### Złożoność operacji struktury danych - -| Struktura Danych | Dostęp | Szukaj | Umieszczanie | Usuwanie | Komentarze | -| ------------------------------- | :-------: | :-------: | :----------: | :-------: | :----------- | -| **Szereg** | 1 | n | n | n | | -| **Sterta** | n | n | 1 | 1 | | -| **Kolejka** | n | n | 1 | 1 | | -| **Lista Powiązana** | n | n | 1 | 1 | | -| **Tablica funkcji mieszanej** | - | n | n | n | W wypadku idealnej funkcji skrótu koszt mógłby sie równać O(1) | -| **Binarne Drzewo Poszukiwań** | n | n | n | n | W przypadku zrównoważonych kosztów drzew byłoby O(log(n)) | -| **B-Drzewo** | log(n) | log(n) | log(n) | log(n) | | -| **Drzewa czerwono-czarne** | log(n) | log(n) | log(n) | log(n) | | -| **AVL Drzewo** | log(n) | log(n) | log(n) | log(n) | | -| **Filtr Blooma** | - | 1 | 1 | - | Fałszywe dotatnie są możliwe podczas wyszukiwania | - -### Sortowanie Tablic Złożoności Algorytmów - -| Nazwa | Najlepszy | Średni | Najgorszy | Pamięć | Stabilność | Komentarze | -| ----------------------------------- | :-------------: | :-----------------: | :-----------------: | :-------: | :---------: | :---------- | -| **Sortowanie bąbelkowe** | n | n2 | n2 | 1 | Yes | | -| **Sortowanie przez wstawianie** | n | n2 | n2 | 1 | Yes | | -| **Sortowanie przez wybieranie** | n2 | n2 | n2 | 1 | No | | -| **Sortowanie przez kopcowanie** | n log(n) | n log(n) | n log(n) | 1 | No | | -| **Sortowanie przez scalanie** | n log(n) | n log(n) | n log(n) | n | Yes | | -| **Szybkie sortowanie** | n log(n) | n log(n) | n2 | log(n) | No | Szybkie sortowanie jest zazwyczaj robione w miejsce O(log(n)) stosu przestrzeni | -| **Sortowanie Shella** | n log(n) | zależy od luki w układzie | n (log(n))2 | 1 | No | | -| **Sortowanie przez zliczanie** | n + r | n + r | n + r | n + r | Yes | r - największy numer w tablicy| -| **Sortowanie Radix** | n * k | n * k | n * k | n + k | Yes | k -długość najdłuższego klucza | - -> ℹ️ A few more [projects](https://trekhleb.dev/projects/) and [articles](https://trekhleb.dev/blog/) about JavaScript and algorithms on [trekhleb.dev](https://trekhleb.dev) diff --git a/README.pt-BR.md b/README.pt-BR.md deleted file mode 100644 index 5b16798bc9..0000000000 --- a/README.pt-BR.md +++ /dev/null @@ -1,304 +0,0 @@ -# Estrutura de Dados e Algoritmos em JavaScript - -[![CI](https://github.com/trekhleb/javascript-algorithms/workflows/CI/badge.svg)](https://github.com/trekhleb/javascript-algorithms/actions?query=workflow%3ACI+branch%3Amaster) -[![codecov](https://codecov.io/gh/trekhleb/javascript-algorithms/branch/master/graph/badge.svg)](https://codecov.io/gh/trekhleb/javascript-algorithms) - -Este repositório contém exemplos baseados em JavaScript de muitos -algoritmos e estruturas de dados populares. - -Cada algoritmo e estrutura de dados possui seu próprio README -com explicações relacionadas e links para leitura adicional (incluindo -vídeos para YouTube) - -_Leia isto em outros idiomas:_ -[_English_](https://github.com/trekhleb/javascript-algorithms/) -[_简体中文_](README.zh-CN.md), -[_繁體中文_](README.zh-TW.md), -[_한국어_](README.ko-KR.md), -[_日本語_](README.ja-JP.md), -[_Polski_](README.pl-PL.md), -[_Français_](README.fr-FR.md), -[_Español_](README.es-ES.md), -[_Русский_](README.ru-RU.md), -[_Türk_](README.tr-TR.md), -[_Italiana_](README.it-IT.md), -[_Bahasa Indonesia_](README.id-ID.md), -[_Українська_](README.uk-UA.md), -[_Arabic_](README.ar-AR.md), -[_Tiếng Việt_](README.vi-VN.md), -[_Deutsch_](README.de-DE.md), -[_Uzbek_](README.uz-UZ.md) -[_עברית_](README.he-IL.md) - -## Estrutura de Dados - -Uma estrutura de dados é uma maneira particular de organizar e armazenar dados em um computador para que ele possa -ser acessado e modificado de forma eficiente. Mais precisamente, uma estrutura de dados é uma coleção de valores de dados, as relações entre eles e as funções ou operações que podem ser aplicadas aos dados. - -`B` - Iniciante, `A` - Avançado - -* `B` [Lista Encadeada (Linked List)](src/data-structures/linked-list/README.pt-BR.md) -* `B` [Lista Duplamente Ligada (Doubly Linked List)](src/data-structures/doubly-linked-list/README.pt-BR.md) -* `B` [Fila (Queue)](src/data-structures/queue/README.pt-BR.md) -* `B` [Pilha (Stack)](src/data-structures/stack/README.pt-BR.md) -* `B` [Tabela de Hash (Hash Table)](src/data-structures/hash-table/README.pt-BR.md) -* `B` [Heap](src/data-structures/heap/README.pt-BR.md) - versões de heap máximo e mínimo -* `B` [Fila de Prioridade (Priority Queue)](src/data-structures/priority-queue/README.pt-BR.md) -* `A` [Árvore de Prefixos (Trie)](src/data-structures/trie/README.pt-BR.md) -* `A` [Árvore (Tree)](src/data-structures/tree/README.pt-BR.md) - * `A` [Árvore de Pesquisa Binária (Binary Search Tree)](src/data-structures/tree/binary-search-tree/README.pt-BR.md) - * `A` [Árvore AVL (AVL Tree)](src/data-structures/tree/avl-tree/README.pt-BR.md) - * `A` [Árvore Rubro-Negra (Red-Black Tree)](src/data-structures/tree/red-black-tree/README.pt-BR.md) - * `A` [Árvore de Segmento (Segment Tree)](src/data-structures/tree/segment-tree/README.pt-BR.md) - com exemplos de consultas min / max / sum range - * `A` [Árvore Fenwick (Fenwick Tree)](src/data-structures/tree/fenwick-tree/README.pt-BR.md) (Árvore indexada binária) -* `A` [Grafo (Graph)](src/data-structures/graph/README.pt-BR.md) (ambos dirigidos e não direcionados) -* `A` [Conjunto Disjunto (Disjoint Set)](src/data-structures/disjoint-set/README.pt-BR.md) -* `A` [Filtro Bloom (Bloom Filter)](src/data-structures/bloom-filter/README.pt-BR.md) - -## Algoritmos - -Um algoritmo é uma especificação inequívoca de como resolver uma classe de problemas. Isto é -um conjunto de regras que define precisamente uma sequência de operações. - -`B` - Iniciante, `A` - Avançado - -### Algoritmos por Tópico - -* **Matemática** - * `B` [Manipulação Bit](src/algorithms/math/bits) - set/get/update/clear bits, multiplicação / divisão por dois, tornar negativo etc. - * `B` [Fatorial](src/algorithms/math/factorial) - * `B` [Número de Fibonacci](src/algorithms/math/fibonacci) - * `B` [Teste de Primalidade](src/algorithms/math/primality-test) (método de divisão experimental) - * `B` [Algoritmo Euclidiano](src/algorithms/math/euclidean-algorithm) - Calcular o Máximo Divisor Comum (MDC) - * `B` [Mínimo Múltiplo Comum](src/algorithms/math/least-common-multiple) Calcular o Mínimo Múltiplo Comum (MMC) - * `B` [Peneira de Eratóstenes](src/algorithms/math/sieve-of-eratosthenes) - Encontrar todos os números primos até um determinado limite - * `B` [Potência de Dois](src/algorithms/math/is-power-of-two) - Verifique se o número é a potência de dois (algoritmos ingênuos e bit a bit) - * `B` [Triângulo de Pascal](src/algorithms/math/pascal-triangle) - * `B` [Número Complexo](src/algorithms/math/complex-number) - Números complexos e operações básicas com eles - * `A` [Partição Inteira](src/algorithms/math/integer-partition) - * `A` [Algoritmo Liu Hui π](src/algorithms/math/liu-hui) - Cálculos aproximados de π baseados em N-gons -* **Conjuntos** - * `B` [Produto Cartesiano](src/algorithms/sets/cartesian-product) - Produto de vários conjuntos - * `B` [Permutações de Fisher–Yates](src/algorithms/sets/fisher-yates) - Permutação aleatória de uma sequência finita - * `A` [Potência e Conjunto](src/algorithms/sets/power-set) - Todos os subconjuntos de um conjunto - * `A` [Permutações](src/algorithms/sets/permutations) (com e sem repetições) - * `A` [Combinações](src/algorithms/sets/combinations) (com e sem repetições) - * `A` [Mais Longa Subsequência Comum](src/algorithms/sets/longest-common-subsequence) (LCS) - * `A` [Maior Subsequência Crescente](src/algorithms/sets/longest-increasing-subsequence) - * `A` [Supersequência Comum Mais Curta](src/algorithms/sets/shortest-common-supersequence) (SCS) - * `A` [Problema da Mochila](src/algorithms/sets/knapsack-problem) - "0/1" e "Não consolidado" - * `A` [Subarray Máximo](src/algorithms/sets/maximum-subarray) - "Força bruta" e "Programação Dinâmica", versões de Kadane - * `A` [Soma de Combinação](src/algorithms/sets/combination-sum) - Encontre todas as combinações que formam uma soma específica -* **Cadeia de Caracteres** - * `B` [Distância de Hamming](src/algorithms/string/hamming-distance) - Número de posições em que os símbolos são diferentes - * `B` [Palíndromos](src/algorithms/string/palindrome) - Verifique se a cadeia de caracteres (string) é a mesma ao contrário - * `A` [Distância Levenshtein](src/algorithms/string/levenshtein-distance) - Distância mínima de edição entre duas sequências - * `A` [Algoritmo Knuth–Morris–Pratt](src/algorithms/string/knuth-morris-pratt) (Algoritmo KMP) - Pesquisa de substring (correspondência de padrão) - * `A` [Z Algorithm](src/algorithms/string/z-algorithm) - Pesquisa de substring (correspondência de padrão) - * `A` [Algoritmo de Rabin Karp](src/algorithms/string/rabin-karp) - Pesquisa de substring - * `A` [Substring Comum Mais Longa](src/algorithms/string/longest-common-substring) - * `A` [Expressões Regulares Correspondentes](src/algorithms/string/regular-expression-matching) -* **Buscas** - * `B` [Busca Linear (Linear Search)](src/algorithms/search/linear-search) - * `B` [Busca por Saltos (Jump Search)](src/algorithms/search/jump-search) - Pesquisa em matriz ordenada - * `B` [Busca Binária (Binary Search)](src/algorithms/search/binary-search) - Pesquisa em matriz ordenada - * `B` [Busca por Interpolação (Interpolation Search)](src/algorithms/search/interpolation-search) - Pesquisa em matriz classificada uniformemente distribuída -* **Classificação** - * `B` [Bubble Sort](src/algorithms/sorting/bubble-sort) - * `B` [Selection Sort](src/algorithms/sorting/selection-sort) - * `B` [Insertion Sort](src/algorithms/sorting/insertion-sort) - * `B` [Heap Sort](src/algorithms/sorting/heap-sort) - * `B` [Merge Sort](src/algorithms/sorting/merge-sort) - * `B` [Quicksort](src/algorithms/sorting/quick-sort) - Implementações local e não local - * `B` [Shellsort](src/algorithms/sorting/shell-sort) - * `B` [Counting Sort](src/algorithms/sorting/counting-sort) - * `B` [Radix Sort](src/algorithms/sorting/radix-sort) -* **Árvores** - * `B` [Busca em Profundidade (Depth-First Search)](src/algorithms/tree/depth-first-search) (DFS) - * `B` [Busca em Largura (Breadth-First Search)](src/algorithms/tree/breadth-first-search) (BFS) -* **Grafos** - * `B` [Busca em Profundidade (Depth-First Search)](src/algorithms/graph/depth-first-search) (DFS) - * `B` [Busca em Largura (Breadth-First Search)](src/algorithms/graph/breadth-first-search) (BFS) - * `B` [Algoritmo de Kruskal](src/algorithms/graph/kruskal) - Encontrando Árvore Mínima de Abrangência (MST) para grafo conexo com pesos - * `A` [Algoritmo de Dijkstra](src/algorithms/graph/dijkstra) - Encontrar caminhos mais curtos para todos os vértices do grafo a partir de um único vértice - * `A` [Algoritmo de Bellman-Ford](src/algorithms/graph/bellman-ford) - Encontrar caminhos mais curtos para todos os vértices do grafo a partir de um único vértice - * `A` [Algoritmo de Floyd-Warshall](src/algorithms/graph/floyd-warshall) - Encontrar caminhos mais curtos entre todos os pares de vértices - * `A` [Detectar Ciclo](src/algorithms/graph/detect-cycle) - Para grafos direcionados e não direcionados (versões baseadas em DFS e Conjunto Disjuntivo) - * `A` [Algoritmo de Prim](src/algorithms/graph/prim) - Encontrando Árvore Mínima de Abrangência (MST) para grafo não direcionado ponderado - * `A` [Ordenação Topológica](src/algorithms/graph/topological-sorting) - Métodos DFS - * `A` [Pontos de Articulação](src/algorithms/graph/articulation-points) - O algoritmo de Tarjan (baseado em DFS) - * `A` [Pontes](src/algorithms/graph/bridges) - Algoritmo baseado em DFS - * `A` [Caminho e Circuito Euleriano](src/algorithms/graph/eulerian-path) - Algoritmo de Fleury - Visite todas as bordas exatamente uma vez - * `A` [Ciclo Hamiltoniano](src/algorithms/graph/hamiltonian-cycle) - Visite todas as bordas exatamente uma vez - * `A` [Componentes Fortemente Conectados](src/algorithms/graph/strongly-connected-components) - Algoritmo de Kosaraju - * `A` [Problema do Caixeiro Viajante](src/algorithms/graph/travelling-salesman) - Rota mais curta possível que visita cada cidade e retorna à cidade de origem -* **Criptografia** - * `B` [Hash Polinomial](src/algorithms/cryptography/polynomial-hash) - Função de hash de rolagem baseada em polinômio -* **Sem categoria** - * `B` [Torre de Hanoi](src/algorithms/uncategorized/hanoi-tower) - * `B` [Rotação de Matriz Quadrada](src/algorithms/uncategorized/square-matrix-rotation) - Algoritmo no local - * `B` [Jogo do Salto](src/algorithms/uncategorized/jump-game) - Backtracking, programação dinâmica (top-down + bottom-up) e exemplos gananciosos - * `B` [Caminhos Únicos](src/algorithms/uncategorized/unique-paths) - Backtracking, programação dinâmica e exemplos baseados no triângulo de Pascal - * `B` [Terraços de Chuva](src/algorithms/uncategorized/rain-terraces) - Problema de retenção da água da chuva (programação dinâmica e versões de força bruta) - * `A` [Problema das N-Rainhas](src/algorithms/uncategorized/n-queens) - * `A` [Passeio do Cavaleiro](src/algorithms/uncategorized/knight-tour) - -### Algoritmos por Paradigma - -Um paradigma algorítmico é um método ou abordagem genérica subjacente ao design de uma classe -de algoritmos. É uma abstração maior do que a noção de um algoritmo, assim como -algoritmo é uma abstração maior que um programa de computador. - -* **Força bruta** - Pense em todas as possibilidades e escolha a melhor solução - * `B` [Busca Linear (Linear Search)](src/algorithms/search/linear-search) - * `B` [Terraços de Chuva](src/algorithms/uncategorized/rain-terraces) - Problema de retenção de água da chuva (programação dinâmica e versões de força bruta) - * `A` [Subarray Máximo](src/algorithms/sets/maximum-subarray) - * `A` [Problema do Caixeiro Viajante](src/algorithms/graph/travelling-salesman) - Rota mais curta possível que visita cada cidade e retorna à cidade de origem -* **Ganância** - Escolha a melhor opção no momento, sem qualquer consideração pelo futuro - * `B` [Jogo do Salto](src/algorithms/uncategorized/jump-game) - * `A` [Problema da Mochila](src/algorithms/sets/knapsack-problem) - * `A` [Algoritmo de Dijkstra](src/algorithms/graph/dijkstra) - Encontrar caminhos mais curtos para todos os vértices do grafo a partir de um único vértice - * `A` [Algoritmo de Prim](src/algorithms/graph/prim) - Encontrando Árvore Mínima de Abrangência (MST) para grafo não direcionado ponderado - * `A` [Algoritmo de Kruskal](src/algorithms/graph/kruskal) - Encontrando Árvore Mínima de Abrangência (MST) para grafo conexo com pesos -* **Dividir e Conquistar** - Dividir o problema em partes menores e então resolver essas partes - * `B` [Busca Binária (Binary Search)](src/algorithms/search/binary-search) - * `B` [Torre de Hanoi](src/algorithms/uncategorized/hanoi-tower) - * `B` [Triângulo de Pascal](src/algorithms/math/pascal-triangle) - * `B` [Algoritmo Euclidiano](src/algorithms/math/euclidean-algorithm) - Calcular o Máximo Divisor Comum (MDC) - * `B` [Merge Sort](src/algorithms/sorting/merge-sort) - * `B` [Quicksort](src/algorithms/sorting/quick-sort) - * `B` [Busca em Profundidade (Depth-First Search)](src/algorithms/tree/depth-first-search) (DFS) - * `B` [Busca em Largura (Breadth-First Search)](src/algorithms/graph/breadth-first-search) (BFS) - * `B` [Jogo do Salto](src/algorithms/uncategorized/jump-game) - * `A` [Permutações](src/algorithms/sets/permutations) (com e sem repetições) - * `A` [Combinações](src/algorithms/sets/combinations) (com e sem repetições) -* **Programação Dinâmica** - Criar uma solução usando sub-soluções encontradas anteriormente - * `B` [Número de Fibonacci](src/algorithms/math/fibonacci) - * `B` [Jogo do Salto](src/algorithms/uncategorized/jump-game) - * `B` [Caminhos Únicos](src/algorithms/uncategorized/unique-paths) - * `B` [Terraços de Chuva](src/algorithms/uncategorized/rain-terraces) - Trapping problema da água da chuva - * `A` [Distância Levenshtein](src/algorithms/string/levenshtein-distance) - Distância mínima de edição entre duas sequências - * `A` [Mais Longa Subsequência Comum](src/algorithms/sets/longest-common-subsequence) (LCS) - * `A` [Substring Comum Mais Longa](src/algorithms/string/longest-common-substring) - * `A` [Maior Subsequência Crescente](src/algorithms/sets/longest-increasing-subsequence) - * `A` [Supersequência Comum Mais Curta](src/algorithms/sets/shortest-common-supersequence) - * `A` [Problema da Mochila](src/algorithms/sets/knapsack-problem) - * `A` [Partição Inteira](src/algorithms/math/integer-partition) - * `A` [Subarray Máximo](src/algorithms/sets/maximum-subarray) - * `A` [Algoritmo de Bellman-Ford](src/algorithms/graph/bellman-ford) - Encontrar caminhos mais curtos para todos os vértices do grafo a partir de um único vértice - * `A` [Algoritmo de Floyd-Warshall](src/algorithms/graph/floyd-warshall) - Encontrar caminhos mais curtos entre todos os pares de vértices - * `A` [Expressões Regulares Correspondentes](src/algorithms/string/regular-expression-matching) -* **Backtracking** - Da mesma forma que a força bruta, tente gerar todas as soluções possíveis, mas, cada vez que você gerar a próxima solução será necessário testar se a mesma satisfaz todas as condições, e só então continuará a gerar as soluções subsequentes. Caso contrário, volte atrás e siga um caminho diferente para encontrar uma solução. Normalmente, a passagem DFS do espaço de estados está sendo usada. - * `B` [Jogo do Salto](src/algorithms/uncategorized/jump-game) - * `B` [Caminhos Únicos](src/algorithms/uncategorized/unique-paths) - * `A` [Ciclo Hamiltoniano](src/algorithms/graph/hamiltonian-cycle) - Visite todos os vértices exatamente uma vez - * `A` [Problema das N-Rainhas](src/algorithms/uncategorized/n-queens) - * `A` [Passeio do Cavaleiro](src/algorithms/uncategorized/knight-tour) - * `A` [Soma de Combinação](src/algorithms/sets/combination-sum) - Encontre todas as combinações que formam uma soma específica -* **Branch & Bound** - Lembre-se da solução de menor custo encontrada em cada etapa do retrocesso, pesquisar e usar o custo da solução de menor custo encontrada até o limite inferior do custo de -solução de menor custo para o problema, a fim de descartar soluções parciais com custos maiores que o -solução de menor custo encontrada até o momento. Normalmente, a travessia BFS em combinação com a passagem DFS do espaço de estados -árvore está sendo usada - -## Como usar este repositório - -**Instalar todas as dependências** -``` -npm install -``` - -**Executar o ESLint** - -Você pode querer executá-lo para verificar a qualidade do código. - -``` -npm run lint -``` - -**Execute todos os testes** -``` -npm test -``` - -**Executar testes por nome** -``` -npm test -- 'LinkedList' -``` -**Solução de problemas** - -Caso o linting ou o teste estejam falhando, tente excluir a pasta node_modules e reinstalar os pacotes npm: -``` -rm -rf ./node_modules -npm i -``` - -Verifique também se você está usando uma versão correta do Node (>=14.16.0). Se você estiver usando [nvm](https://github.com/nvm-sh/nvm) para gerenciamento de versão do Node, você pode executar `nvm use` a partir da pasta raiz do projeto e a versão correta será escolhida. - -**Playground** - -Você pode brincar com estruturas de dados e algoritmos no arquivo `./src/playground/playground.js` e escrever -testes para isso em `./src/playground/__test__/playground.test.js`. - -Em seguida, basta executar o seguinte comando para testar se o código do seu playground funciona conforme o esperado: - -``` -npm test -- 'playground' -``` - -## Informação útil - -### Referências - -- [▶ Estruturas de Dados e Algoritmos no YouTube](https://www.youtube.com/playlist?list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) -- [✍🏻 Esboços de Estruturas de Dados](https://okso.app/showcase/data-structures) - -### Notação Big O - -A notação Big O é usada para classificar algoritmos de acordo com a forma como seu tempo de execução ou requisitos de espaço crescem à medida que o tamanho da entrada aumenta. No gráfico abaixo você pode encontrar as ordens mais comuns de crescimento de algoritmos especificados na notação Big O. - -![Notação Big-O](./assets/big-o-graph.png) - -Fonte: [Notação Big-O Dicas](http://bigocheatsheet.com/). - -Abaixo está a lista de algumas das notações Big O mais usadas e suas comparações de desempenho em relação aos diferentes tamanhos dos dados de entrada. - -| Notação Big-O | Cálculos para 10 elementos | Cálculos para 100 elementos | Cálculos para 1000 elementos | -| -------------- | ---------------------------- | ----------------------------- | ------------------------------- | -| **O(1)** | 1 | 1 | 1 | -| **O(log N)** | 3 | 6 | 9 | -| **O(N)** | 10 | 100 | 1000 | -| **O(N log N)** | 30 | 600 | 9000 | -| **O(N^2)** | 100 | 10000 | 1000000 | -| **O(2^N)** | 1024 | 1.26e+29 | 1.07e+301 | -| **O(N!)** | 3628800 | 9.3e+157 | 4.02e+2567 | - -### Complexidade de operações de estrutura de dados - -| Estrutura de dados | Acesso | Busca | Inserção | Eliminação | Comentários | -| ----------------------- | :-------: | :-------: | :-------: | :-------: | :-------- | -| **Array** | 1 | n | n | n | | -| **Stack** | n | n | 1 | 1 | | -| **Queue** | n | n | 1 | 1 | | -| **Linked List** | n | n | 1 | 1 | | -| **Hash Table** | - | n | n | n | Em caso de uma função hash perfeita, os custos seriam O(1) | -| **Binary Search Tree** | n | n | n | n | No caso de custos de árvore equilibrados seria O(log(n)) -| **B-Tree** | log(n) | log(n) | log(n) | log(n) | | -| **Red-Black Tree** | log(n) | log(n) | log(n) | log(n) | | -| **AVL Tree** | log(n) | log(n) | log(n) | log(n) | | -| **Bloom Filter** | - | 1 | 1 | - | Falsos positivos são possíveis durante a pesquisa | - -### Complexidade dos Algoritmos de Ordenação de Matrizes - -| Nome | Melhor | Média | Pior | Mémoria | Estável | Comentários | -| --------------------- | :-------------: | :-----------------: | :-----------------: | :-------: | :-------: | :-------- | -| **Bubble sort** | n | n2 | n2 | 1 | Sim | | -| **Insertion sort** | n | n2 | n2 | 1 | Sim | | -| **Selection sort** | n2 | n2 | n2 | 1 | Não | | -| **Heap sort** | n log(n) | n log(n) | n log(n) | 1 | Não | | -| **Merge sort** | n log(n) | n log(n) | n log(n) | n | Sim | | -| **Quick sort** | n log(n) | n log(n) | n2 | log(n) | Não | O Quicksort geralmente é feito no local com espaço de pilha O(log(n)) | -| **Shell sort** | n log(n) | depende da sequência de lacunas | n (log(n))2 | 1 | Não | | -| **Counting sort** | n + r | n + r | n + r | n + r | Sim | r - maior número na matriz | -| **Radix sort** | n * k | n * k | n * k | n + k | Sim | k - comprimento da chave mais longa | - -> ℹ️ Outros [projetos](https://trekhleb.dev/projects/) e [artigos](https://trekhleb.dev/blog/) sobre JavaScript e algoritmos em [trekhleb.dev](https://trekhleb.dev) diff --git a/README.ru-RU.md b/README.ru-RU.md deleted file mode 100644 index 939ed46700..0000000000 --- a/README.ru-RU.md +++ /dev/null @@ -1,322 +0,0 @@ -# Алгоритмы и структуры данных на JavaScript - -[![CI](https://github.com/trekhleb/javascript-algorithms/workflows/CI/badge.svg)](https://github.com/trekhleb/javascript-algorithms/actions?query=workflow%3ACI+branch%3Amaster) -[![codecov](https://codecov.io/gh/trekhleb/javascript-algorithms/branch/master/graph/badge.svg)](https://codecov.io/gh/trekhleb/javascript-algorithms) - -В этом репозитории содержатся базовые JavaScript-примеры многих популярных алгоритмов и структур данных. - -Для каждого алгоритма и структуры данных есть свой файл README с соответствующими пояснениями и ссылками на материалы для дальнейшего изучения (в том числе и ссылки на видеоролики в YouTube). - -_Читать на других языках:_ -[_English_](https://github.com/trekhleb/javascript-algorithms/), -[_简体中文_](README.zh-CN.md), -[_繁體中文_](README.zh-TW.md), -[_한국어_](README.ko-KR.md), -[_日本語_](README.ja-JP.md), -[_Polski_](README.pl-PL.md), -[_Français_](README.fr-FR.md), -[_Español_](README.es-ES.md), -[_Português_](README.pt-BR.md), -[_Türk_](README.tr-TR.md), -[_Italiana_](README.it-IT.md), -[_Bahasa Indonesia_](README.id-ID.md), -[_Українська_](README.uk-UA.md), -[_Arabic_](README.ar-AR.md), -[_Tiếng Việt_](README.vi-VN.md), -[_Deutsch_](README.de-DE.md), -[_Uzbek_](README.uz-UZ.md) -[_עברית_](README.he-IL.md) - -*☝ Замечание: этот репозиторий предназначен для учебно-исследовательских целей (**не** для использования в продакшн-системах).* - -## Структуры данных - -Структура данных (англ. data structure) — программная единица, позволяющая хранить и обрабатывать множество однотипных и/или логически связанных данных в вычислительной технике. Для добавления, поиска, изменения и удаления данных структура данных предоставляет некоторый набор функций, составляющих её интерфейс. - -`B` - Базовый уровень, `A` - Продвинутый уровень - -* `B` [Связный список](src/data-structures/linked-list) -* `B` [Двунаправленный связный список](src/data-structures/doubly-linked-list) -* `B` [Очередь](src/data-structures/queue) -* `B` [Стек](src/data-structures/stack) -* `B` [Хеш-таблица](src/data-structures/hash-table) -* `B` [Куча](src/data-structures/heap) — максимальная и минимальная версии -* `B` [Очередь с приоритетом](src/data-structures/priority-queue) -* `A` [Префиксное дерево](src/data-structures/trie) -* `A` [Деревья](src/data-structures/tree) - * `A` [Двоичное дерево поиска](src/data-structures/tree/binary-search-tree) - * `A` [АВЛ-дерево](src/data-structures/tree/avl-tree) - * `A` [Красно-чёрное дерево](src/data-structures/tree/red-black-tree) - * `A` [Дерево отрезков](src/data-structures/tree/segment-tree) — для минимума, максимума и суммы отрезков - * `A` [Дерево Фенвика](src/data-structures/tree/fenwick-tree) (двоичное индексированное дерево) -* `A` [Граф](src/data-structures/graph) (ориентированный и неориентированный) -* `A` [Система непересекающихся множеств](src/data-structures/disjoint-set) -* `A` [Фильтр Блума](src/data-structures/bloom-filter) - -## Алгоритмы - -Алгоритм — конечная совокупность точно заданных правил решения некоторого класса задач или набор инструкций, описывающих порядок действий исполнителя для решения некоторой задачи. - -`B` - Базовый уровень, `A` - Продвинутый уровень - -### Алгоритмы по тематике - -* **Математика** - * `B` [Битовые манипуляции](src/algorithms/math/bits) — получение/запись/сброс/обновление битов, умножение/деление на 2, сделать отрицательным и т.п. - * `B` [Двоичное число с плавающей запятой](src/algorithms/math/binary-floating-point) - двоичное представление чисел с плавающей запятой - * `B` [Факториал](src/algorithms/math/factorial) - * `B` [Числа Фибоначчи](src/algorithms/math/fibonacci) — классическое решение, решение в замкнутой форме - * `B` [Простые множители](src/algorithms/math/prime-factors) - нахождение простых множителей и их подсчёт с использованием теоремы Харди-Рамануджана - * `B` [Тест простоты](src/algorithms/math/primality-test) (метод пробного деления) - * `B` [Алгоритм Евклида](src/algorithms/math/euclidean-algorithm) — нахождение наибольшего общего делителя (НОД) - * `B` [Наименьшее общее кратное](src/algorithms/math/least-common-multiple) (НОК) - * `B` [Решето Эратосфена](src/algorithms/math/sieve-of-eratosthenes) — нахождение всех простых чисел до некоторого целого числа n - * `B` [Степень двойки](src/algorithms/math/is-power-of-two) — является ли число степенью двойки (простое и побитовое решения) - * `B` [Треугольник Паскаля](src/algorithms/math/pascal-triangle) - * `B` [Комплексные числа](src/algorithms/math/complex-number) — комплексные числа, базовые операции над ними - * `B` [Радианы и градусы](src/algorithms/math/radian) — конвертирование радианов в градусы и наоборот - * `B` [Быстрое возведение в степень](src/algorithms/math/fast-powering) - * `B` [Схема Горнера](src/algorithms/math/horner-method) - оценка полиномов - * `B` [Матрицы](src/algorithms/math/matrix) - матрицы и основные операции с матрицами (умножение, транспонирование и т.д.) - * `B` [Евклидово расстояние](src/algorithms/math/euclidean-distance) - расстояние между двумя точками/векторами/матрицами - * `A` [Разбиение числа](src/algorithms/math/integer-partition) - * `A` [Квадратный корень](src/algorithms/math/square-root) — метод Ньютона - * `A` [Алгоритм Лю Хуэя](src/algorithms/math/liu-hui) — расчёт числа π с заданной точностью методом вписанных правильных многоугольников - * `A` [Дискретное преобразование Фурье](src/algorithms/math/fourier-transform) — разложение временной функции (сигнала) на частотные составляющие -* **Множества** - * `B` [Декартово произведение](src/algorithms/sets/cartesian-product) — результат перемножения множеств - * `B` [Тасование Фишера — Йетса](src/algorithms/sets/fisher-yates) — создание случайных перестановок конечного множества - * `A` [Булеан](src/algorithms/sets/power-set) — все подмножества заданного множества (побитовый поиск и поиск с возвратом) - * `A` [Перестановки](src/algorithms/sets/permutations) (с повторениями и без повторений) - * `A` [Сочетания](src/algorithms/sets/combinations) (с повторениями и без повторений) - * `A` [Наибольшая общая подпоследовательность](src/algorithms/sets/longest-common-subsequence) - * `A` [Наибольшая увеличивающаяся подпоследовательность](src/algorithms/sets/longest-increasing-subsequence) - * `A` [Наименьшая общая супер-последовательность](src/algorithms/sets/shortest-common-supersequence) - * `A` [Задача о рюкзаке](src/algorithms/sets/knapsack-problem) — "0/1" и "неограниченный" рюкзаки - * `A` [Максимальный под-массив](src/algorithms/sets/maximum-subarray) — метод полного перебора и алгоритм Кадане - * `A` [Комбинации сумм](src/algorithms/sets/combination-sum) — нахождение всех комбинаций, сумма каждой из которых равна заданному числу -* **Алгоритмы работы со строками** - * `B` [Расстояние Хэмминга](src/algorithms/string/hamming-distance) — число позиций, в которых соответствующие символы различны - * `A` [Расстояние Левенштейна](src/algorithms/string/levenshtein-distance) — метрика, измеряющая разность между двумя последовательностями - * `A` [Алгоритм Кнута — Морриса — Пратта](src/algorithms/string/knuth-morris-pratt) — поиск подстроки (сопоставление с шаблоном) - * `A` [Z-функция](src/algorithms/string/z-algorithm) — поиск подстроки (сопоставление с шаблоном) - * `A` [Алгоритм Рабина — Карпа](src/algorithms/string/rabin-karp) — поиск подстроки - * `A` [Наибольшая общая подстрока](src/algorithms/string/longest-common-substring) - * `A` [Разборщик регулярных выражений](src/algorithms/string/regular-expression-matching) -* **Алгоритмы поиска** - * `B` [Линейный поиск](src/algorithms/search/linear-search) - * `B` [Поиск с перескоком](src/algorithms/search/jump-search) (поиск блоков) — поиск в упорядоченном массиве - * `B` [Двоичный поиск](src/algorithms/search/binary-search) — поиск в упорядоченном массиве - * `B` [Интерполяционный поиск](src/algorithms/search/interpolation-search) — поиск в равномерно распределённом упорядоченном массиве. -* **Алгоритмы сортировки** - * `B` [Сортировка пузырьком](src/algorithms/sorting/bubble-sort) - * `B` [Сортировка выбором](src/algorithms/sorting/selection-sort) - * `B` [Сортировка вставками](src/algorithms/sorting/insertion-sort) - * `B` [Пирамидальная сортировка (сортировка кучей)](src/algorithms/sorting/heap-sort) - * `B` [Сортировка слиянием](src/algorithms/sorting/merge-sort) - * `B` [Быстрая сортировка](src/algorithms/sorting/quick-sort) — с использованием дополнительной памяти и без её использования - * `B` [Сортировка Шелла](src/algorithms/sorting/shell-sort) - * `B` [Сортировка подсчётом](src/algorithms/sorting/counting-sort) - * `B` [Поразрядная сортировка](src/algorithms/sorting/radix-sort) -* **Связный список** - * `B` [Прямой обход](src/algorithms/linked-list/traversal) - * `B` [Обратный обход](src/algorithms/linked-list/reverse-traversal) -* **Деревья** - * `B` [Поиск в глубину](src/algorithms/tree/depth-first-search) - * `B` [Поиск в ширину](src/algorithms/tree/breadth-first-search) -* **Графы** - * `B` [Поиск в глубину](src/algorithms/graph/depth-first-search) - * `B` [Поиск в ширину](src/algorithms/graph/breadth-first-search) - * `B` [Алгоритм Краскала](src/algorithms/graph/kruskal) — нахождение минимального остовного дерева для взвешенного неориентированного графа - * `A` [Алгоритм Дейкстры](src/algorithms/graph/dijkstra) — нахождение кратчайших путей от одной из вершин графа до всех остальных - * `A` [Алгоритм Беллмана — Форда](src/algorithms/graph/bellman-ford) — нахождение кратчайших путей от одной из вершин графа до всех остальных - * `A` [Алгоритм Флойда — Уоршелла](src/algorithms/graph/floyd-warshall) — нахождение кратчайших расстояний между всеми вершинами графа - * `A` [Задача нахождения цикла](src/algorithms/graph/detect-cycle) — для ориентированных и неориентированных графов (на основе поиска в глубину и системы непересекающихся множеств) - * `A` [Алгоритм Прима](src/algorithms/graph/prim) — нахождение минимального остовного дерева для взвешенного неориентированного графа - * `A` [Топологическая сортировка](src/algorithms/graph/topological-sorting) — на основе поиска в глубину - * `A` [Шарниры (разделяющие вершины)](src/algorithms/graph/articulation-points) — алгоритм Тарьяна (на основе поиска в глубину) - * `A` [Мосты](src/algorithms/graph/bridges) — на основе поиска в глубину - * `A` [Эйлеров путь и Эйлеров цикл](src/algorithms/graph/eulerian-path) — алгоритм Флёри (однократное посещение каждой вершины) - * `A` [Гамильтонов цикл](src/algorithms/graph/hamiltonian-cycle) — проходит через каждую вершину графа ровно один раз - * `A` [Компоненты сильной связности](src/algorithms/graph/strongly-connected-components) — алгоритм Косарайю - * `A` [Задача коммивояжёра](src/algorithms/graph/travelling-salesman) — кратчайший маршрут, проходящий через указанные города с последующим возвратом в исходный город -* **Криптография** - * `B` [Полиноминальный хэш](src/algorithms/cryptography/polynomial-hash) — функция кольцевого хэша, основанная на полиноме - * `B` [Шифр ​​ограждения рельсов](src/algorithms/cryptography/rail-fence-cipher) - алгоритм транспозиционного шифра для кодирования сообщений - * `B` [Шифр Цезаря](src/algorithms/cryptography/caesar-cipher) - простой подстановочный шифр - * `B` [Шифр Хилла](src/algorithms/cryptography/hill-cipher) - подстановочный шифр на основе линейной алгебры -* **Машинное обучение** - * `B` [Нано-нейрон](https://github.com/trekhleb/nano-neuron) — 7 простых JavaScript функций, отображающих способности машины к обучению (прямое и обратное распространение) - * `B` [k-NN](src/algorithms/ml/knn) - алгоритм классификации k-ближайших соседей - * `B` [k-Means](src/algorithms/ml/k-means) - алгоритм кластеризации по методу k-средних -* **Обработка изображений** - * `B` [Резьба по шву](src/algorithms/image-processing/seam-carving) - алгоритм изменения размера изображения с учетом содержания -* **Статистика** - * `B` [Взвешенная случайность](src/algorithms/statistics/weighted-random) - выбор случайного элемента из списка на основе веса элементов -* **Эволюционные алгоритмы** - * `A` [Генетический алгоритм](https://github.com/trekhleb/self-parking-car-evolution) - пример применения генетического алгоритма для обучения самопаркующихся автомобилей -* **Прочие алгоритмы** - * `B` [Ханойская башня](src/algorithms/uncategorized/hanoi-tower) - * `B` [Поворот квадратной матрицы](src/algorithms/uncategorized/square-matrix-rotation) — используется дополнительная память - * `B` [Прыжки](src/algorithms/uncategorized/jump-game) — на основе бэктрекинга, динамического программирования (сверху-вниз + снизу-вверх) и жадных алгоритмов - * `B` [Поиск уникальных путей](src/algorithms/uncategorized/unique-paths) — на основе бэктрекинга, динамического программирования и треугольника Паскаля - * `B` [Подсчёт дождевой воды](src/algorithms/uncategorized/rain-terraces) — на основе перебора и динамического программирования - * `B` [Задача о рекурсивной лестнице](src/algorithms/uncategorized/recursive-staircase) — подсчёт количества путей, по которым можно достичь верха лестницы (4 способа) - * `B` [Лучшее время для покупки и продажи акций](src/algorithms/uncategorized/best-time-to-buy-sell-stocks) - примеры "разделяй и властвуй" и в один проход - * `A` [Задача об N ферзях](src/algorithms/uncategorized/n-queens) - * `A` [Маршрут коня](src/algorithms/uncategorized/knight-tour) - -### Алгоритмы по парадигме программирования - -Парадигма программирования — общий метод или подход, лежащий в основе целого класса алгоритмов. Понятие "парадигма программирования" является более абстрактным по отношению к понятию "алгоритм", которое в свою очередь является более абстрактным по отношению к понятию "компьютерная программа". - -* **Алгоритмы полного перебора** — поиск лучшего решения исчерпыванием всевозможных вариантов - * `B` [Линейный поиск](src/algorithms/search/linear-search) - * `B` [Подсчёт дождевой воды](src/algorithms/uncategorized/rain-terraces) - * `B` [Задача о рекурсивной лестнице](src/algorithms/uncategorized/recursive-staircase) — подсчёт количества путей, по которым можно достичь верха лестницы - * `A` [Максимальный подмассив](src/algorithms/sets/maximum-subarray) - * `A` [Задача коммивояжёра](src/algorithms/graph/travelling-salesman) — кратчайший маршрут, проходящий через указанные города с последующим возвратом в исходный город - * `A` [Дискретное преобразование Фурье](src/algorithms/math/fourier-transform) — разложение временной функции (сигнала) на частотные составляющие -* **Жадные алгоритмы** — принятие локально оптимальных решений с учётом допущения об оптимальности конечного решения - * `B` [Прыжки](src/algorithms/uncategorized/jump-game) - * `A` [Задача о неограниченном рюкзаке](src/algorithms/sets/knapsack-problem) - * `A` [Алгоритм Дейкстры](src/algorithms/graph/dijkstra) — нахождение кратчайших путей от одной из вершин графа до всех остальных - * `A` [Алгоритм Прима](src/algorithms/graph/prim) — нахождение минимального остовного дерева для взвешенного неориентированного графа - * `A` [Алгоритм Краскала](src/algorithms/graph/kruskal) — нахождение минимального остовного дерева для взвешенного неориентированного графа -* **Разделяй и властвуй** — рекурсивное разбиение решаемой задачи на более мелкие - * `B` [Двоичный поиск](src/algorithms/search/binary-search) - * `B` [Ханойская башня](src/algorithms/uncategorized/hanoi-tower) - * `B` [Треугольник Паскаля](src/algorithms/math/pascal-triangle) - * `B` [Алгоритм Евклида](src/algorithms/math/euclidean-algorithm) — нахождение наибольшего общего делителя (НОД) - * `B` [Сортировка слиянием](src/algorithms/sorting/merge-sort) - * `B` [Быстрая сортировка](src/algorithms/sorting/quick-sort) - * `B` [Поиск в глубину (дерево)](src/algorithms/tree/depth-first-search) - * `B` [Поиск в глубину (граф)](src/algorithms/graph/depth-first-search) - * `B` [Матрицы](src/algorithms/math/matrix) - генерирование и обход матриц различной формы - * `B` [Прыжки](src/algorithms/uncategorized/jump-game) - * `B` [Быстрое возведение в степень](src/algorithms/math/fast-powering) - * `B` [Лучшее время для покупки и продажи акций](src/algorithms/uncategorized/best-time-to-buy-sell-stocks) - примеры "разделяй и властвуй" и в один проход - * `A` [Перестановки](src/algorithms/sets/permutations) (с повторениями и без повторений) - * `A` [Сочетания](src/algorithms/sets/combinations) (с повторениями и без повторений) -* **Динамическое программирование** — решение общей задачи конструируется на основе ранее найденных решений подзадач - * `B` [Числа Фибоначчи](src/algorithms/math/fibonacci) - * `B` [Прыжки](src/algorithms/uncategorized/jump-game) - * `B` [Поиск уникальных путей](src/algorithms/uncategorized/unique-paths) - * `B` [Подсчёт дождевой воды](src/algorithms/uncategorized/rain-terraces) - * `B` [Задача о рекурсивной лестнице](src/algorithms/uncategorized/recursive-staircase) — подсчёт количества путей, по которым можно достичь верха лестницы - * `B` [Резьба по шву](src/algorithms/image-processing/seam-carving) - алгоритм изменения размера изображения с учетом содержания - * `A` [Расстояние Левенштейна](src/algorithms/string/levenshtein-distance) — метрика, измеряющая разность между двумя последовательностями - * `A` [Наибольшая общая подпоследовательность](src/algorithms/sets/longest-common-subsequence) - * `A` [Наибольшая общая подстрока](src/algorithms/string/longest-common-substring) - * `A` [Наибольшая увеличивающаяся подпоследовательность](src/algorithms/sets/longest-increasing-subsequence) - * `A` [Наименьшая общая суперпоследовательность](src/algorithms/sets/shortest-common-supersequence) - * `A` [Рюкзак 0-1](src/algorithms/sets/knapsack-problem) - * `A` [Разбиение числа](src/algorithms/math/integer-partition) - * `A` [Максимальный подмассив](src/algorithms/sets/maximum-subarray) - * `A` [Алгоритм Беллмана — Форда](src/algorithms/graph/bellman-ford) — поиск кратчайшего пути во взвешенном графе - * `A` [Алгоритм Флойда — Уоршелла](src/algorithms/graph/floyd-warshall) — нахождение кратчайших путей от одной из вершин графа до всех остальных - * `A` [Разборщик регулярных выражений](src/algorithms/string/regular-expression-matching) -* **Поиск с возвратом (бэктрекинг)** — при поиске решения многократно делается попытка расширить текущее частичное решение. Если расширение невозможно, то происходит возврат к предыдущему более короткому частичному решению, и делается попытка его расширить другим возможным способом. Обычно используется обход пространства состояний в глубину. - * `B` [Прыжки](src/algorithms/uncategorized/jump-game) - * `B` [Поиск уникальных путей](src/algorithms/uncategorized/unique-paths) - * `B` [Булеан](src/algorithms/sets/power-set) — все подмножества заданного множества - * `A` [Гамильтонов цикл](src/algorithms/graph/hamiltonian-cycle) — проходит через каждую вершину графа ровно один раз - * `A` [Задача об N ферзях](src/algorithms/uncategorized/n-queens) - * `A` [Маршрут коня](src/algorithms/uncategorized/knight-tour) - * `A` [Комбинации сумм](src/algorithms/sets/combination-sum) — нахождение всех комбинаций, сумма каждой из которых равна заданному числу -* **Метод ветвей и границ** — основан на упорядоченном переборе решений и рассмотрении только тех из них, которые являются перспективными (по тем или иным признакам) и отбрасывании бесперспективных множеств решений. Обычно используется обход в ширину в совокупности с обходом дерева пространства состояний в глубину. - -## Как использовать этот репозиторий - -**Установка всех зависимостей** -``` -npm install -``` - -**Запуск ESLint** - -Эта команда может потребоваться вам для проверки качества кода. - -``` -npm run lint -``` - -**Запуск всех тестов** - -``` -npm test -``` - -**Запуск определённого теста** - -``` -npm test -- 'LinkedList' -``` - -**Песочница** - -Вы можете экспериментировать с алгоритмами и структурами данных в файле `./src/playground/playground.js` -(файл `./src/playground/__test__/playground.test.js` предназначен для написания тестов). - -Для проверки работоспособности вашего кода используйте команду: - -``` -npm test -- 'playground' -``` - -## Полезная информация - -### Ссылки - -[▶ О структурах данных и алгоритмах](https://www.youtube.com/playlist?list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) - -### Нотация «О» большое - -*Нотация «О» большое* используется для классификации алгоритмов в соответствии с ростом времени выполнения и затрачиваемой памяти при увеличении размера входных данных. На диаграмме ниже представлены общие порядки роста алгоритмов в соответствии с нотацией «О» большое. - -![Big O graphs](./assets/big-o-graph.png) - -Источник: [Big O Cheat Sheet](http://bigocheatsheet.com/). - -Ниже представлены часто используемые обозначения в нотации «О» большое, а также сравнение их производительностей на различных размерах входных данных. - -| Нотация «О» большое | 10 элементов | 100 элементов | 1000 элементов | -| ------------------- | ------------ | ------------- | -------------- | -| **O(1)** | 1 | 1 | 1 | -| **O(log N)** | 3 | 6 | 9 | -| **O(N)** | 10 | 100 | 1000 | -| **O(N log N)** | 30 | 600 | 9000 | -| **O(N^2)** | 100 | 10000 | 1000000 | -| **O(2^N)** | 1024 | 1.26e+29 | 1.07e+301 | -| **O(N!)** | 3628800 | 9.3e+157 | 4.02e+2567 | - -### Сложности операций в структурах данных - -| Структура данных | Получение | Поиск | Вставка | Удаление | Комментарии | -| -------------------------- | :-------: | :-------: | :-------: | :-------: | :---------- | -| **Массив** | 1 | n | n | n | | -| **Стек** | n | n | 1 | 1 | | -| **Очередь** | n | n | 1 | 1 | | -| **Связный список** | n | n | 1 | n | | -| **Хеш-таблица** | - | n | n | n | Для идеальной хеш-функции — O(1) | -| **Двоичное дерево поиска** | n | n | n | n | В сбалансированном дереве — O(log(n)) | -| **B-дерево** | log(n) | log(n) | log(n) | log(n) | | -| **Красно-чёрное дерево** | log(n) | log(n) | log(n) | log(n) | | -| **АВЛ-дерево** | log(n) | log(n) | log(n) | log(n) | | -| **Фильтр Блума** | - | 1 | 1 | - | Возможно получение ложно-положительного срабатывания | - -### Сложности алгоритмов сортировки - -| Наименование | Лучший случай | Средний случай | Худший случай | Память | Устойчивость | Комментарии | -| -------------------------- | :-----------: | :------------: | :-----------: | :----: | :----------: | :---------- | -| **Сортировка пузырьком** | n | n2 | n2 | 1 | Да | | -| **Сортировка вставками** | n | n2 | n2 | 1 | Да | | -| **Сортировка выбором** | n2 | n2 | n2 | 1 | Нет | | -| **Сортировка кучей** | n log(n) | n log(n) | n log(n) | 1 | Нет | | -| **Сортировка слиянием** | n log(n) | n log(n) | n log(n) | n | Да | | -| **Быстрая сортировка** | n log(n) | n log(n) | n2 | log(n) | Нет | Быстрая сортировка обычно выполняется с использованием O(log(n)) дополнительной памяти | -| **Сортировка Шелла** | n log(n) | зависит от выбранных шагов | n (log(n))2 | 1 | Нет | | -| **Сортировка подсчётом** | n + r | n + r | n + r | n + r | Да | r — наибольшее число в массиве | -| **Поразрядная сортировка** | n * k | n * k | n * k | n + k | Да | k — длина самого длинного ключа | - -> ℹ️ A few more [projects](https://trekhleb.dev/projects/) and [articles](https://trekhleb.dev/blog/) about JavaScript and algorithms on [trekhleb.dev](https://trekhleb.dev) diff --git a/README.tr-TR.md b/README.tr-TR.md deleted file mode 100644 index 53600480db..0000000000 --- a/README.tr-TR.md +++ /dev/null @@ -1,325 +0,0 @@ -# JavaScript Algoritmalar ve Veri Yapıları - -[![CI](https://github.com/trekhleb/javascript-algorithms/workflows/CI/badge.svg)](https://github.com/trekhleb/javascript-algorithms/actions?query=workflow%3ACI+branch%3Amaster) -[![codecov](https://codecov.io/gh/trekhleb/javascript-algorithms/branch/master/graph/badge.svg)](https://codecov.io/gh/trekhleb/javascript-algorithms) - -Bu repository popüler algoritmaların ve veri yapılarının birçoğunun Javascript tabanlı örneklerini bulundurur. - -Her bir algoritma ve veri yapısı kendine -ait açıklama ve videoya sahip README dosyası içerir. - -_Read this in other languages:_ -[_简体中文_](README.zh-CN.md), -[_繁體中文_](README.zh-TW.md), -[_한국어_](README.ko-KR.md), -[_日本語_](README.ja-JP.md), -[_Polski_](README.pl-PL.md), -[_Français_](README.fr-FR.md), -[_Español_](README.es-ES.md), -[_Português_](README.pt-BR.md), -[_Русский_](README.ru-RU.md), -[_Italiana_](README.it-IT.md), -[_Bahasa Indonesia_](README.id-ID.md), -[_Українська_](README.uk-UA.md), -[_Arabic_](README.ar-AR.md), -[_Tiếng Việt_](README.vi-VN.md), -[_Deutsch_](README.de-DE.md), -[_Uzbek_](README.uz-UZ.md) -[_עברית_](README.he-IL.md) - -*☝ Not, bu proje araştırma ve öğrenme amacı ile yapılmış -olup üretim için **yapılmamıştır**.* - -## Veri Yapıları - -Bir veri yapısı, verileri bir bilgisayarda organize etmenin ve depolamanın belirli bir yoludur, böylece -verimli bir şekilde erişilebilir ve değiştirilebilir. Daha iyi ifadeyle, bir veri yapısı bir veri koleksiyonudur, -aralarındaki ilişkiler, ve işlevler veya işlemler -veriye uygulanabilir. - -`B` - Başlangıç, `A` - İleri Seviye - -* `B` [Bağlantılı Veri Yapısı](src/data-structures/linked-list) -* `B` [Çift Yönlü Bağlı Liste](src/data-structures/doubly-linked-list) -* `B` [Kuyruk](src/data-structures/queue) -* `B` [Yığın](src/data-structures/stack) -* `B` [Hash Table](src/data-structures/hash-table) -* `B` [Heap](src/data-structures/heap) - max and min heap versions -* `B` [Öncelikli Kuyruk](src/data-structures/priority-queue) -* `A` [Trie](src/data-structures/trie) -* `A` [Ağaç](src/data-structures/tree) - * `A` [İkili Arama Ağaçları](src/data-structures/tree/binary-search-tree) - * `A` [AVL Tree](src/data-structures/tree/avl-tree) - * `A` [Red-Black Tree](src/data-structures/tree/red-black-tree) - * `A` [Segment Tree](src/data-structures/tree/segment-tree) - with min/max/sum range queries examples - * `A` [Fenwick Tree](src/data-structures/tree/fenwick-tree) (Binary Indexed Tree) -* `A` [Graph](src/data-structures/graph) (both directed and undirected) -* `A` [Disjoint Set](src/data-structures/disjoint-set) -* `A` [Bloom Filter](src/data-structures/bloom-filter) - -## Algoritmalar - -Bir algoritma, bir problem sınıfının nasıl çözüleceğine dair kesin bir tanımlamadır. -Bir işlem dizisini açık olarak tanımlayan kurallar dizisidir. - - -`B` - Başlangıç, `A` - İleri Seviye - -### Konusuna göre Algoritma - -* **Matematik** - * `B` [Bit Manipülasyonu](src/algorithms/math/bits) - set/get/update/clear bits, multiplication/division by two, make negative etc. - * `B` [İkili Kayan Nokta](src/algorithms/math/binary-floating-point) - kayan noktalı sayıların ikilik sistemde gösterimi. - * `B` [Faktöriyel](src/algorithms/math/factorial) - * `B` [Fibonacci Sayısı](src/algorithms/math/fibonacci) - klasik ve kapalı-form versiyonları - * `B` [Asallık Testi](src/algorithms/math/primality-test) (deneyerek bölüm metodu) - * `B` [Öklid Algoritması](src/algorithms/math/euclidean-algorithm) - En büyük ortak bölen hesaplama (EBOB) - * `B` [En küçük Ortak Kat](src/algorithms/math/least-common-multiple) (EKOK) - * `B` [Eratosten Kalburu](src/algorithms/math/sieve-of-eratosthenes) - belirli bir sayıya kadarki asal sayıları bulma - * `B` [Is Power of Two](src/algorithms/math/is-power-of-two) - sayı ikinin katı mı sorgusu (naive ve bitwise algoritmaları) - * `B` [Paskal Üçgeni](src/algorithms/math/pascal-triangle) - * `B` [Karmaşık Sayılar](src/algorithms/math/complex-number) - karmaşık sayılar ve karmaşık sayılar ile temel işlemler - * `B` [Radyan & Derece](src/algorithms/math/radian) - radyandan dereceye çeviri ve tersine çeviri - * `B` [Fast Powering](src/algorithms/math/fast-powering) - * `B` [Horner's method](src/algorithms/math/horner-method) - polinomal ifadelerin değerlendirilmesi - * `B` [Matrices](src/algorithms/math/matrix) - matrisler ve basit matris operasyonları (çarpım, tersçapraz, vb.) - * `B` [Euclidean Distance](src/algorithms/math/euclidean-distance) - iki nokta/vektör/matris arasındaki mesafe - * `A` [Tamsayı Bölümü](src/algorithms/math/integer-partition) - * `A` [Karekök](src/algorithms/math/square-root) - Newton yöntemi - * `A` [Liu Hui π Algoritması](src/algorithms/math/liu-hui) - N-gons'a göre yaklaşık π hesabı - * `A` [Ayrık Fourier Dönüşümü](src/algorithms/math/fourier-transform) - bir zaman fonksiyonunu (sinyal) içerdiği frekanslara ayırın -* **Setler** - * `B` [Kartezyen Ürün](src/algorithms/sets/cartesian-product) - birden fazla kümenin çarpımı - * `B` [Fisher–Yates Shuffle](src/algorithms/sets/fisher-yates) - sonlu bir dizinin rastgele permütasyonu - * `A` [Power Set](src/algorithms/sets/power-set) - all subsets of a set (bit düzeyinde ve geri izleme yöntemleri) - * `A` [Permütasyonlar](src/algorithms/sets/permutations)(tekrarlı ve tekrarsız) - * `A` [Kombinasyonlar](src/algorithms/sets/combinations) (tekrarlı ve tekrarsız) - * `A` [En Uzun Ortak Altdizi](src/algorithms/sets/longest-common-subsequence) (LCS) - * `A` [En Uzun Artan Altdizi](src/algorithms/sets/longest-increasing-subsequence) - * `A` [En Kısa Ortak Üst Sıra](src/algorithms/sets/shortest-common-supersequence) (SCS) - * `A` [Knapsack Problem](src/algorithms/sets/knapsack-problem) - "0-1 sırt çantası problemi" ve "Sınırsız sırt çantası problemi" - * `A` [Maksimum Altdizi](src/algorithms/sets/maximum-subarray) - "Kaba Kuvvet" ve "Dinamik Programlara" (Kadane'nin) versiyonu - * `A` [Kombinasyon Toplamı](src/algorithms/sets/combination-sum) - belirli toplamı oluşturan tüm kombinasyonları bulun -* **Metin** - * `B` [Hamming Mesafesi](src/algorithms/string/hamming-distance) - sembollerin farklı olduğu konumların sayısı - * `A` [Levenshtein Mesafesi](src/algorithms/string/levenshtein-distance) - iki sekans arasındaki minimum düzenleme mesafesi - * `A` [Knuth–Morris–Pratt Algoritması](src/algorithms/string/knuth-morris-pratt) (KMP Algorithm) - altmetin araması (örüntü eşleme) - * `A` [Z Algoritması](src/algorithms/string/z-algorithm) - altmetin araması (desen eşleştirme) - * `A` [Rabin Karp Algoritması](src/algorithms/string/rabin-karp) - altmetin araması - * `A` [En Uzun Ortak Alt Metin](src/algorithms/string/longest-common-substring) - * `A` [Regular Expression Eşleme](src/algorithms/string/regular-expression-matching) -* **Aramalar** - * `B` [Doğrusal Arama](src/algorithms/search/linear-search) - * `B` [Jump Search](src/algorithms/search/jump-search) (ya da Block Search) - sıralı dizide arama - * `B` [İkili Arama](src/algorithms/search/binary-search) - sıralı dizide arama - * `B` [Interpolation Search](src/algorithms/search/interpolation-search) - tekdüze dağıtılmış sıralı dizide arama -* **Sıralama** - * `B` [Bubble Sort](src/algorithms/sorting/bubble-sort) - * `B` [Selection Sort](src/algorithms/sorting/selection-sort) - * `B` [Insertion Sort](src/algorithms/sorting/insertion-sort) - * `B` [Heap Sort](src/algorithms/sorting/heap-sort) - * `B` [Merge Sort](src/algorithms/sorting/merge-sort) - * `B` [Quicksort](src/algorithms/sorting/quick-sort) - in-place and non-in-place implementations - * `B` [Shellsort](src/algorithms/sorting/shell-sort) - * `B` [Counting Sort](src/algorithms/sorting/counting-sort) - * `B` [Radix Sort](src/algorithms/sorting/radix-sort) -* **Bağlantılı Liste** - * `B` [Straight Traversal](src/algorithms/linked-list/traversal) - * `B` [Reverse Traversal](src/algorithms/linked-list/reverse-traversal) -* **Ağaçlar** - * `B` [Depth-First Search](src/algorithms/tree/depth-first-search) (DFS) - * `B` [Breadth-First Search](src/algorithms/tree/breadth-first-search) (BFS) -* **Graphs** - * `B` [Depth-First Search](src/algorithms/graph/depth-first-search) (DFS) - * `B` [Breadth-First Search](src/algorithms/graph/breadth-first-search) (BFS) - * `B` [Kruskal’s Algorithm](src/algorithms/graph/kruskal) - ağırlıklı yönlendirilmemiş grafik için Minimum Yayılma Ağacı'nı (MST) bulma - * `A` [Dijkstra Algorithm](src/algorithms/graph/dijkstra) - tek tepe noktasından tüm grafik köşelerine en kısa yolları bulmak - * `A` [Bellman-Ford Algorithm](src/algorithms/graph/bellman-ford) - tek tepe noktasından tüm grafik köşelerine en kısa yolları bulmak - * `A` [Floyd-Warshall Algorithm](src/algorithms/graph/floyd-warshall) - tüm köşe çiftleri arasındaki en kısa yolları bulun - * `A` [Detect Cycle](src/algorithms/graph/detect-cycle) - hem yönlendirilmiş hem de yönlendirilmemiş grafikler için (DFS ve Ayrık Küme tabanlı sürümler) - * `A` [Prim’s Algorithm](src/algorithms/graph/prim) - ağırlıklı yönlendirilmemiş grafik için Minimum Yayılma Ağacı'nı (MST) bulma - * `A` [Topological Sorting](src/algorithms/graph/topological-sorting) - DFS metodu - * `A` [Articulation Points](src/algorithms/graph/articulation-points) - Tarjan's algoritması (DFS based) - * `A` [Bridges](src/algorithms/graph/bridges) - DFS yöntemi ile algoritma - * `A` [Eulerian Path and Eulerian Circuit](src/algorithms/graph/eulerian-path) - Fleury'nin algoritması - Her kenara tam olarak bir kez ulaş - * `A` [Hamiltonian Cycle](src/algorithms/graph/hamiltonian-cycle) - Her köşeyi tam olarak bir kez ziyaret et - * `A` [Strongly Connected Components](src/algorithms/graph/strongly-connected-components) - Kosaraju's algorithm - * `A` [Travelling Salesman Problem](src/algorithms/graph/travelling-salesman) - her şehri ziyaret eden ve başlangıç ​​şehrine geri dönen mümkün olan en kısa rota -* **Kriptografi** - * `B` [Polynomial Hash](src/algorithms/cryptography/polynomial-hash) - polinom temelinde dönen hash işlevi - * `B` [Caesar Cipher](src/algorithms/cryptography/caesar-cipher) - simple substitution cipher -* **Makine Öğrenmesi** - * `B` [NanoNeuron](https://github.com/trekhleb/nano-neuron) - 7 simple JS functions that illustrate how machines can actually learn (forward/backward propagation) -* **Kategoriye Ayrılmayanlar** - * `B` [Tower of Hanoi](src/algorithms/uncategorized/hanoi-tower) - * `B` [Square Matrix Rotation](src/algorithms/uncategorized/square-matrix-rotation) - in-place algorithm - * `B` [Jump Game](src/algorithms/uncategorized/jump-game) - backtracking, dynamic programming (top-down + bottom-up) and greedy examples - * `B` [Unique Paths](src/algorithms/uncategorized/unique-paths) - backtracking, dynamic programming and Pascal's Triangle based examples - * `B` [Rain Terraces](src/algorithms/uncategorized/rain-terraces) - trapping rain water problem (dynamic programming and brute force versions) - * `B` [Recursive Staircase](src/algorithms/uncategorized/recursive-staircase) - tepeye ulaşmanın yollarını sayma (4 çözüm) - * `A` [N-Queens Problem](src/algorithms/uncategorized/n-queens) - * `A` [Knight's Tour](src/algorithms/uncategorized/knight-tour) - -### Algoritmik Paradigma - -Algoritmik paradigma, bir sınıfın tasarımının altında yatan genel bir yöntem veya yaklaşımdır. -Algoritma dizayn tekniği olarak düşünülebilir. Her bir altproblemi (subproblem) asıl problemle -benzerlik gösteren problemlere uygulanabilir. - -* **Brute Force** - mümkün olan tüm çözümleri tara ve en iyisini seç - * `B` [Doğrusal Arama](src/algorithms/search/linear-search) - * `B` [Rain Terraces](src/algorithms/uncategorized/rain-terraces) - trapping rain water problem - * `B` [Recursive Staircase](src/algorithms/uncategorized/recursive-staircase) - tepeye çıkmanın yollarını hesapla - * `A` [Maximum Subarray](src/algorithms/sets/maximum-subarray) - * `A` [Travelling Salesman Problem](src/algorithms/graph/travelling-salesman) - her şehri ziyaret eden ve başlangıç şehrine geri dönen mümkün olan en kısa rota - * `A` [Discrete Fourier Transform](src/algorithms/math/fourier-transform) - bir zaman fonksiyonunu (bir sinyal) onu oluşturan frekanslara ayırır -* **Açgözlü** - geleceği düşünmeden şu an için en iyi seçeneği seçin - * `B` [Jump Game](src/algorithms/uncategorized/jump-game) - * `A` [Unbound Knapsack Problem](src/algorithms/sets/knapsack-problem) - * `A` [Dijkstra Algorithm](src/algorithms/graph/dijkstra) - tüm grafik köşelerine giden en kısa yolu bulmak - * `A` [Prim’s Algorithm](src/algorithms/graph/prim) - ağırlıklı yönlendirilmemiş grafik için Minimum Yayılma Ağacı'nı (MST) bulma - * `A` [Kruskal’s Algorithm](src/algorithms/graph/kruskal) - ağırlıklı yönlendirilmemiş grafik için Minimum Yayılma Ağacı'nı (MST) bulma -* **Böl ve Fethet** - sorunu daha küçük parçalara bölün ve sonra bu parçaları çözün - * `B` [Binary Search](src/algorithms/search/binary-search) - * `B` [Tower of Hanoi](src/algorithms/uncategorized/hanoi-tower) - * `B` [Pascal's Triangle](src/algorithms/math/pascal-triangle) - * `B` [Euclidean Algorithm](src/algorithms/math/euclidean-algorithm) - calculate the Greatest Common Divisor (GCD) - * `B` [Merge Sort](src/algorithms/sorting/merge-sort) - * `B` [Quicksort](src/algorithms/sorting/quick-sort) - * `B` [Tree Depth-First Search](src/algorithms/tree/depth-first-search) (DFS) - * `B` [Graph Depth-First Search](src/algorithms/graph/depth-first-search) (DFS) - * `B` [Jump Game](src/algorithms/uncategorized/jump-game) - * `B` [Fast Powering](src/algorithms/math/fast-powering) - * `A` [Permutations](src/algorithms/sets/permutations) (tekrarlı ve tekrarsız) - * `A` [Combinations](src/algorithms/sets/combinations) (tekrarlı ve tekrarsız) -* **Dinamik Programlama** - önceden bulunan alt çözümleri kullanarak bir çözüm oluşturmak - * `B` [Fibonacci Sayısı](src/algorithms/math/fibonacci) - * `B` [Jump Game](src/algorithms/uncategorized/jump-game) - * `B` [Eşsiz Yol](src/algorithms/uncategorized/unique-paths) - * `B` [Rain Terraces](src/algorithms/uncategorized/rain-terraces) - trapping rain water problem - * `B` [Recursive Staircase](src/algorithms/uncategorized/recursive-staircase) - zirveye ulaşmanın yollarının sayısını sayın - * `A` [Levenshtein Distance](src/algorithms/string/levenshtein-distance) - iki sekans arasındaki minimum düzenleme mesafesi - * `A` [Longest Common Subsequence](src/algorithms/sets/longest-common-subsequence) (LCS) - * `A` [Longest Common Substring](src/algorithms/string/longest-common-substring) - * `A` [Longest Increasing Subsequence](src/algorithms/sets/longest-increasing-subsequence) - * `A` [Shortest Common Supersequence](src/algorithms/sets/shortest-common-supersequence) - * `A` [0/1 Knapsack Problem](src/algorithms/sets/knapsack-problem) - * `A` [Integer Partition](src/algorithms/math/integer-partition) - * `A` [Maximum Subarray](src/algorithms/sets/maximum-subarray) - * `A` [Bellman-Ford Algorithm](src/algorithms/graph/bellman-ford) - tüm grafik köşelerine giden en kısa yolu bulmak - * `A` [Floyd-Warshall Algorithm](src/algorithms/graph/floyd-warshall) - tüm köşe çiftleri arasındaki en kısa yolları bulun - * `A` [Regular Expression Matching](src/algorithms/string/regular-expression-matching) -* **Backtracking** - brute forceye benzer, mümkün tüm sonuçları tara, ancak bir sonraki çözümü her ürettiğinizde test edersiniz -tüm koşulları karşılıyorsa ve ancak o zaman sonraki çözümleri üretmeye devam edin. Aksi takdirde, geri dönün ve farklı bir çözüm arayın(?). -Normally the DFS traversal of state-space is being used. - * `B` [Jump Game](src/algorithms/uncategorized/jump-game) - * `B` [Unique Paths](src/algorithms/uncategorized/unique-paths) - * `B` [Power Set](src/algorithms/sets/power-set) - all subsets of a set - * `A` [Hamiltonian Cycle](src/algorithms/graph/hamiltonian-cycle) - Her köşeyi tam olarak bir kez ziyaret edin - * `A` [N-Queens Problem](src/algorithms/uncategorized/n-queens) - * `A` [Knight's Tour](src/algorithms/uncategorized/knight-tour) - * `A` [Combination Sum](src/algorithms/sets/combination-sum) - belirli toplamı oluşturan tüm kombinasyonları bulun -* **Branch & Bound** - remember the lowest-cost solution found at each stage of the backtracking -search, and use the cost of the lowest-cost solution found so far as a lower bound on the cost of -a least-cost solution to the problem, in order to discard partial solutions with costs larger than the -lowest-cost solution found so far. Normally BFS traversal in combination with DFS traversal of state-space -tree is being used. - -## Repository'in Kullanımı - -**Bütün dependencyleri kurun** -``` -npm install -``` - -**ESLint'i başlatın** - -Bunu kodun kalitesini kontrol etmek amacı ile çalıştırabilirsin. - -``` -npm run lint -``` - -**Bütün testleri çalıştır** -``` -npm test -``` - -**Testleri ismine göre çalıştır** -``` -npm test -- 'LinkedList' -``` - -**Deneme Alanı** - -data-structures ve algorithms içerisinde `./src/playground/playground.js` -yazarak `./src/playground/__test__/playground.test.js` için test edebilirsin. - - -Ardından basitçe alttaki komutu girerek kodunun beklendiği gibi çalışıp çalışmadığını test edebilirsin: - -``` -npm test -- 'playground' -``` - -## Yararlı Bilgiler - -### Referanslar - -[▶ Data Structures and Algorithms on YouTube](https://www.youtube.com/playlist?list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) - -### Big O Notation - -* Big O notation *, algoritmaları, girdi boyutu büyüdükçe çalışma süresi veya alan gereksinimlerinin nasıl arttığına göre sınıflandırmak için kullanılır. -Aşağıdaki grafikte, Big O gösteriminde belirtilen algoritmaların en yaygın büyüme sıralarını bulabilirsiniz. - -![Big O graphs](./assets/big-o-graph.png) - -Kaynak: [Big O Cheat Sheet](http://bigocheatsheet.com/). - -Altta Big O notations ve farklı input boyutlarına karşın yapılmış performans karşılaştırması listelenmektedir. - -| Big O Notation | 10 Element için hesaplama | 100 Element için hesaplama | 1000 Element için hesaplama | -| -------------- | ---------------------------- | ----------------------------- | ------------------------------- | -| **O(1)** | 1 | 1 | 1 | -| **O(log N)** | 3 | 6 | 9 | -| **O(N)** | 10 | 100 | 1000 | -| **O(N log N)** | 30 | 600 | 9000 | -| **O(N^2)** | 100 | 10000 | 1000000 | -| **O(2^N)** | 1024 | 1.26e+29 | 1.07e+301 | -| **O(N!)** | 3628800 | 9.3e+157 | 4.02e+2567 | - -### Veri Yapısı İşlem Karmaşıklığı - -| Veri Yapısı | Access | Search | Insertion | Deletion | Comments | -| ----------------------- | :-------: | :-------: | :-------: | :-------: | :-------- | -| **Dizi** | 1 | n | n | n | | -| **Yığın** | n | n | 1 | 1 | | -| **Sıralı** | n | n | 1 | 1 | | -| **Bağlantılı Liste** | n | n | 1 | n | | -| **Yığın Tablo** | - | n | n | n | Kusursuz hash fonksiyonu durumunda sonuç O(1) | -| **İkili Arama Ağacı** | n | n | n | n | In case of balanced tree costs would be O(log(n)) | -| **B-Tree** | log(n) | log(n) | log(n) | log(n) | | -| **Red-Black Tree** | log(n) | log(n) | log(n) | log(n) | | -| **AVL Tree** | log(n) | log(n) | log(n) | log(n) | | -| **Bloom Filter** | - | 1 | 1 | - | Arama esnasında yanlış sonuçlar çıkabilir | - -### Dizi Sıralama Algoritmaları Karmaşıklığı - -| İsim | En İyi | Ortalama | En Kötü | Hafıza | Kararlı | Yorumlar | -| --------------------- | :-------------: | :-----------------: | :-----------------: | :-------: | :-------: | :-------- | -| **Bubble sort** | n | n2 | n2 | 1 | Evet | | -| **Insertion sort** | n | n2 | n2 | 1 | Evet | | -| **Selection sort** | n2 | n2 | n2 | 1 | Hayır | | -| **Heap sort** | n log(n) | n log(n) | n log(n) | 1 | Hayır | | -| **Merge sort** | n log(n) | n log(n) | n log(n) | n | Evet | | -| **Quick sort** | n log(n) | n log(n) | n2 | log(n) | Hayır | Hızlı sıralama genellikle O(log(n)) yığın alanıyla yapılır | -| **Shell sort** | n log(n) | depends on gap sequence | n (log(n))2 | 1 | Hayır | | -| **Counting sort** | n + r | n + r | n + r | n + r | Evet | r - dizideki en büyük sayı | -| **Radix sort** | n * k | n * k | n * k | n + k | Evet | k - en uzun key'in uzunluğu | - -## Projeyi Destekleme - -Bu projeyi buradan destekleyebilirsiniz ❤️️ [GitHub](https://github.com/sponsors/trekhleb) veya ❤️️ [Patreon](https://www.patreon.com/trekhleb). - -> ℹ️ A few more [projects](https://trekhleb.dev/projects/) and [articles](https://trekhleb.dev/blog/) about JavaScript and algorithms on [trekhleb.dev](https://trekhleb.dev) diff --git a/README.uk-UA.md b/README.uk-UA.md deleted file mode 100644 index 5ee5f7cbcc..0000000000 --- a/README.uk-UA.md +++ /dev/null @@ -1,312 +0,0 @@ -# Алгоритми JavaScript та структури даних - -[![CI](https://github.com/trekhleb/javascript-algorithms/workflows/CI/badge.svg)](https://github.com/trekhleb/javascript-algorithms/actions?query=workflow%3ACI+branch%3Amaster) -[![codecov](https://codecov.io/gh/trekhleb/javascript-algorithms/branch/master/graph/badge.svg)](https://codecov.io/gh/trekhleb/javascript-algorithms) - -Даний репозиторій приклади багатьох популярних алгоритмів та структур даних на основі JavaScript. - -Кожен алгоритм та структура даних має свій окремий README-файл із відповідними поясненнями та посиланнями для подальшого вивчення (включаючи посилання на відео на YouTube). - -_Вивчення матеріалу на інших мовах:_ -[_English_](README.md), -[_简体中文_](README.zh-CN.md), -[_繁體中文_](README.zh-TW.md), -[_한국어_](README.ko-KR.md), -[_日本語_](README.ja-JP.md), -[_Polski_](README.pl-PL.md), -[_Français_](README.fr-FR.md), -[_Español_](README.es-ES.md), -[_Português_](README.pt-BR.md), -[_Русский_](README.ru-RU.md), -[_Türk_](README.tr-TR.md), -[_Italiana_](README.it-IT.md), -[_Bahasa Indonesia_](README.id-ID.md), -[_Arabic_](README.ar-AR.md), -[_Tiếng Việt_](README.vi-VN.md), -[_Deutsch_](README.de-DE.md), -[_Uzbek_](README.uz-UZ.md) -[_עברית_](README.he-IL.md) - -*☝ Зверніть увагу! Даний проект призначений лише для навчальних та дослідницьких цілей, і він **не** призначений для виробництва (продакшн).* - -## Структури даних - -Структура даних (в програмуванні) - це спосіб організації даних в комп'ютерах. Часто разом зі структурою даних пов'язується і специфічний перелік операцій, що можуть бути виконаними над даними, організованими в таку структуру. -Точніше, структура даних - це сукупність даних цінності, взаємозв'язки між ними та функції або операції, до яких можна застосувати дані. - -`B` - Початківець, `A` - Просунутий рівень - -* `B` [Зв'язаний список](src/data-structures/linked-list) -* `B` [Двобічно зв'язаний список](src/data-structures/doubly-linked-list) -* `B` [Черга](src/data-structures/queue) -* `B` [Стек](src/data-structures/stack) -* `B` [Геш-таблиця](src/data-structures/hash-table) -* `B` [Купа, стіс або піраміда](src/data-structures/heap) - max and min heap versions -* `B` [Черга з пріоритетом](src/data-structures/priority-queue) -* `A` [Префіксне дерево](src/data-structures/trie) -* `A` [Дерево](src/data-structures/tree) - * `A` [Двійкове дерево пошуку](src/data-structures/tree/binary-search-tree) - * `A` [АВЛ-дерево](src/data-structures/tree/avl-tree) - * `A` [Червоно-чорне дерево](src/data-structures/tree/red-black-tree) - * `A` [Дерево відрізків](src/data-structures/tree/segment-tree) - with min/max/sum range queries examples - * `A` [Дерево Фенвіка](src/data-structures/tree/fenwick-tree) (Binary Indexed Tree) -* `A` [Граф (абстрактний тип даних)](src/data-structures/graph) (both directed and undirected) -* `A` [Система неперетинних множин](src/data-structures/disjoint-set) -* `A` [Фільтр Блума](src/data-structures/bloom-filter) - - -## Алгоритми - -Алгоритм - це однозначна специфікація способу вирішення класу задач. Це набір правил, які точно визначають послідовність операцій. - -`B` - Початківець, `A` - Просунутий рівень - -### Алгоритми за тематикою - -* **Математика** - * `B` [Бітова маніпуляція](src/algorithms/math/bits) - встановити / отримати / оновити / очистити біти, множення / ділення на два, робити від’ємними тощо - * `B` [Факторіал](src/algorithms/math/factorial) - * `B` [Послідовність Фібоначчі](src/algorithms/math/fibonacci) - класична та закриті версії - * `B` [Основні фактори](src/algorithms/math/prime-factors) - пошук простих множників і підрахунок їх за допомогою теореми Харді-Рамануджана - * `B` [Тест простоти](src/algorithms/math/primality-test) (метод пробного поділу) - * `B` [Алгоритм Евкліда](src/algorithms/math/euclidean-algorithm) - метод обчислення найбільшого спільного дільника (НСД) - * `B` [Найменше спільне кратне](src/algorithms/math/least-common-multiple) (НСК) - * `B` [Решето Ератосфена](src/algorithms/math/sieve-of-eratosthenes) - алгоритм знаходження всіх простих чисел менших деякого цілого числа *n* - * `B` [Піднесення до степеня](src/algorithms/math/is-power-of-two) - перевірити, чи є число ступенем двох (просте та побітове рішення) - * `B` [Трикутник Паскаля](src/algorithms/math/pascal-triangle) - * `B` [Комплексне число](src/algorithms/math/complex-number) - комплексні числа та основні операції з ними - * `B` [Радіани & Градуси](src/algorithms/math/radian) - перетворення радіанів у градуси та навпаки - * `B` [Швидке піднесення до степеня](src/algorithms/math/fast-powering) - * `B` [Схема Горнера](src/algorithms/math/horner-method) - поліноміальна оцінка - * `A` [Розбиття числа](src/algorithms/math/integer-partition) - * `A` [Метод дотичних (метод Ньютона)](src/algorithms/math/square-root) - метод наближеного знаходження кореня дійсного рівняння - * `A` [Алгоритм Лю Хуея](src/algorithms/math/liu-hui) - розрахунок числа π з заданою точністю методом вписаних правильних багатокутників - * `A` [Дискретне перетворення Фур'є](src/algorithms/math/fourier-transform) - розкладання тимчасової функції (сигналу) на частотні складові -* **Множина** - * `B` [Декартів добуток множин](src/algorithms/sets/cartesian-product) - множина усіх можливих впорядкованих пар - * `B` [Тасування Фішера - Єйтса](src/algorithms/sets/fisher-yates) - створення випадкових перестановок кінцевого безлічі - * `A` [Булеан](src/algorithms/sets/power-set) - множина всіх підмножин даної множини (бітові та зворотні рішення) - * `A` [Перестановка](src/algorithms/sets/permutations) (з повтореннями та без) - * `A` [Комбінації](src/algorithms/sets/combinations) (з повтореннями та без) - * `A` [Пошук найдовшої спільної підпослідовності](src/algorithms/sets/longest-common-subsequence) - * `A` [Завдання пошуку найбільшою збільшується підпослідовності](src/algorithms/sets/longest-increasing-subsequence) - * `A` [Найменша загальна супер-послідовність](src/algorithms/sets/shortest-common-supersequence) - * `A` [Задача пакування рюкзака](src/algorithms/sets/knapsack-problem) - приклади "0/1" та "Необмежений" - * `A` [Максимальний підмасив](src/algorithms/sets/maximum-subarray) - метод «Грубої сили» та алгоритм Кадана - * `A` [Комбінована сума](src/algorithms/sets/combination-sum) - знайти всі комбінації, що утворюють конкретну суму -* **Алгоритми роботи з рядками** - * `B` [Відстань Геммінга](src/algorithms/string/hamming-distance) - число позицій, у яких відповідні цифри двох двійкових слів однакової довжини різні - * `A` [Відстань Левенштейна](src/algorithms/string/levenshtein-distance) - міра відмінності двох послідовностей символів (рядків) - * `A` [Алгоритм Кнута — Морріса — Пратта](src/algorithms/string/knuth-morris-pratt) пошук підрядків (узгодження шаблонів) - * `A` [Z-функція](src/algorithms/string/z-algorithm) - пошук підрядків (зіставлення зразків) - * `A` [Алгоритм Рабіна — Карпа](src/algorithms/string/rabin-karp) - алгоритм пошуку рядка - * `A` [Найбільший загальний підрядок](src/algorithms/string/longest-common-substring) - * `A` [Підбирання регулярного виразу](src/algorithms/string/regular-expression-matching) -* **Алгоритми пошуку** - * `B` [Лінійний пошук](src/algorithms/search/linear-search) - * `B` [Пошук блоків](src/algorithms/search/jump-search) - пошук у відсортованому масиві - * `B` [Двійковий пошук](src/algorithms/search/binary-search) - знаходження заданого значення у впорядкованому масиві - * `B` [Інтерполяційний алгоритм пошуку](src/algorithms/search/interpolation-search) - алгоритм для пошуку за заданим ключем в індексованому масиві, який впорядкований за значенням ключів -* **Алгоритми сортування** - * `B` [Сортування бульбашкою](src/algorithms/sorting/bubble-sort) - * `B` [Сортування вибором](src/algorithms/sorting/selection-sort) - * `B` [Сортування включенням](src/algorithms/sorting/insertion-sort) - * `B` [Пірамідальне сортування](src/algorithms/sorting/heap-sort) - * `B` [Сортування злиттям](src/algorithms/sorting/merge-sort) - * `B` [Швидке сортування](src/algorithms/sorting/quick-sort) - * `B` [Сортування Шелла](src/algorithms/sorting/shell-sort) - * `B` [Сортування підрахунком](src/algorithms/sorting/counting-sort) - * `B` [Сортування за розрядами](src/algorithms/sorting/radix-sort) -* **Зв’язані списки** - * `B` [Прямий обхід](src/algorithms/linked-list/traversal) - * `B` [Зворотний обхід](src/algorithms/linked-list/reverse-traversal) -* **Дерева** - * `B` [Пошук у глибину](src/algorithms/tree/depth-first-search) - * `B` [Пошук у ширину](src/algorithms/tree/breadth-first-search) -* **Графи** - * `B` [Пошук у глибину](src/algorithms/graph/depth-first-search) - * `B` [Пошук у ширину](src/algorithms/graph/breadth-first-search) - * `B` [Алгоритм Крускала](src/algorithms/graph/kruskal) - алгоритм побудови мінімального кістякового дерева зваженого неорієнтовного графа - * `A` [Алгоритм Дейкстри](src/algorithms/graph/dijkstra) - знаходження найкоротшого шляху від однієї вершини графа до всіх інших вершин - * `A` [Алгоритм Беллмана — Форда](src/algorithms/graph/bellman-ford) - алгоритм пошуку найкоротшого шляху в зваженому графі - * `A` [Алгоритм Флойда — Воршелла](src/algorithms/graph/floyd-warshall) - знаходження найкоротшого шляху в зваженому графі з додатними або від'ємними вагами ребер (але без від'ємнозначних циклів) - * `A` [Циклічний граф](src/algorithms/graph/detect-cycle) - граф, що складається з єдиного циклу, або, іншими словами, деякого числа вершин, з'єднаних замкнутим ланцюгом. - * `A` [Алгоритм Прима](src/algorithms/graph/prim) - жадібний алгоритм побудови мінімального кістякового дерева зваженого зв'язного неорієнтованого графа - * `A` [Топологічне сортування](src/algorithms/graph/topological-sorting) - впорядковування вершин безконтурного орієнтованого графа згідно з частковим порядком, визначеним ребрами цього графу на множині його вершин - * `A` [Алгоритм Тар'яна](src/algorithms/graph/articulation-points) - алгоритм пошуку компонент сильної зв'язності в орієнтованому графі, що працює за лінійний час - * `A` [Міст (теорія графів)](src/algorithms/graph/bridges) - * `A` [Ейлерів ланцюг](src/algorithms/graph/eulerian-path) - ланцюг у графі, який проходить кожне ребро рівно один раз - * `A` [Гамільтонів граф](src/algorithms/graph/hamiltonian-cycle) - шлях, що містить кожну вершину графа рівно один раз - * `A` [Компонента сильної зв'язності графа](src/algorithms/graph/strongly-connected-components) - Алгоритм Косараджу - алгоритм для знаходження компонент сильної зв’язності орієнтованого графу - * `A` [Задача комівояжера](src/algorithms/graph/travelling-salesman) - знаходження найвигіднішого маршруту, що проходить через вказані міста хоча б по одному разу -* **Криптографія** - * `B` [Хеш-функція](src/algorithms/cryptography/polynomial-hash) - функція, що перетворює вхідні дані будь-якого (як правило великого) розміру в дані фіксованого розміру. - * `B` [Шифр Цезаря (шифр зсуву)](src/algorithms/cryptography/caesar-cipher) - симетричний моноалфавітний алгоритм шифрування, в якому кожна буква відкритого тексту заміняється на ту, що віддалена від неї в алфавіті на сталу кількість позицій - * `B` [Шифр Гілла](src/algorithms/cryptography/hill-cipher) - поліграмний шифр підстановки, заснований на лінійній алгебрі -* **Машинне навчання** - * `B` [Нано-нейрон](https://github.com/trekhleb/nano-neuron) - 7 простих функцій JS, які ілюструють, як машини насправді можуть навчатися (пряме та зворотнє поширення) - * `B` [Метод k-найближчих сусідів](src/algorithms/ml/knn) - простий непараметричний класифікаційний метод, де для класифікації об'єктів у рамках простору властивостей використовуються відстані (зазвичай евклідові), пораховані до усіх інших об'єктів - * `B` [Кластеризація методом к–середніх](src/algorithms/ml/knn) - популярний метод кластеризації, — впорядкування множини об'єктів в порівняно однорідні групи. -* **Без категорії** - * `B` [Ханойська вежа](src/algorithms/uncategorized/hanoi-tower) - * `B` [Поворот квадратної матриці](src/algorithms/uncategorized/square-matrix-rotation) - * `B` [Гра стрибків](src/algorithms/uncategorized/jump-game) - зворотне відстеження, динамічне програмування (зверху вниз + знизу вгору) та жадібні приклади - * `B` [Проблема унікальних шляхів](src/algorithms/uncategorized/unique-paths) - зворотне відстеження, динамічне програмування та приклади на основі Трикутника Паскаля - * `B` [Дощові тераси](src/algorithms/uncategorized/rain-terraces) - проблема захоплення дощової води (динамічне програмування та версії грубої сили) - * `B` [Завдання про рекурсивні сходи](src/algorithms/uncategorized/recursive-staircase) - підрахунок кількості способів досягти вершини (4 рішення) - * `A` [Задача про вісім ферзів](src/algorithms/uncategorized/n-queens) - * `A` [Задача про хід коня](src/algorithms/uncategorized/knight-tour) - -### Парадигма програмування - -Парадиигма програмува́ння — це система ідей і понять, які визначають стиль написання комп'ютерних програм, а також спосіб мислення програміста. Це спосіб концептуалізації, що визначає організацію обчислень і структурування роботи, яку виконує комп'ютер. - -* **Метод «грубої сили» або повний перебір** - метод рішення криптографічної задачі шляхом перебору всіх можливих варіантів ключа - * `B` [Лінійний пошук](src/algorithms/search/linear-search) - * `B` [Дощові тераси](src/algorithms/uncategorized/rain-terraces) - задача про дощові тераси - * `B` [Завдання про рекурсивні сходи](src/algorithms/uncategorized/recursive-staircase) - підрахунок кількості способів досягти вершини - * `A` [Максимальний підмасив](src/algorithms/sets/maximum-subarray) - * `A` [Задача комівояжера](src/algorithms/graph/travelling-salesman) - знаходження найвигіднішого маршруту, що проходить через вказані міста хоча б по одному разу - * `A` [Дискретне перетворення Фур'є](src/algorithms/math/fourier-transform) - розкладання тимчасової функції (сигналу) на частотні складові -* **"Жадібні" алгоритми** - простий і прямолінійний евристичний алгоритм, який приймає найкраще рішення, виходячи з наявних на кожному етапі даних, не зважаючи на можливі наслідки, сподіваючись урешті-решт отримати оптимальний розв'язок - * `B` [Гра стрибків](src/algorithms/uncategorized/jump-game) - зворотне відстеження, динамічне програмування (зверху вниз + знизу вгору) та жадібні приклади - * `A` [Задача пакування рюкзака](src/algorithms/sets/knapsack-problem) - приклади "0/1" та "Необмежений" - * `A` [Алгоритм Дейкстри](src/algorithms/graph/dijkstra) - знаходження найкоротшого шляху від однієї вершини графа до всіх інших вершин - * `A` [Алгоритм Прима](src/algorithms/graph/prim) - жадібний алгоритм побудови мінімального кістякового дерева зваженого зв'язного неорієнтованого графа - * `A` [Алгоритм Крускала](src/algorithms/graph/kruskal) - алгоритм побудови мінімального кістякового дерева зваженого неорієнтовного графа -* **Розділяй і володарюй** - важлива парадигма розробки алгоритмів, що полягає в рекурсивному розбитті розв'язуваної задачі на дві або більше підзадачі того ж типу, але меншого розміру, і комбінуванні їх розв'язків для отримання відповіді до вихідного завдання. Розбиття виконуються доти, поки всі підзавдання не стануть елементарними. - * `B` [Двійковий пошук](src/algorithms/search/binary-search) - знаходження заданого значення у впорядкованому масиві - * `B` [Ханойська вежа](src/algorithms/uncategorized/hanoi-tower) - * `B` [Трикутник Паскаля](src/algorithms/math/pascal-triangle) - * `B` [Алгоритм Евкліда](src/algorithms/math/euclidean-algorithm) - метод обчислення найбільшого спільного дільника (НСД) - * `B` [Сортування злиттям](src/algorithms/sorting/merge-sort) - * `B` [Швидке сортування](src/algorithms/sorting/quick-sort) - * `B` [Пошук у глибину](src/algorithms/tree/depth-first-search) - * `B` [Пошук у ширину](src/algorithms/tree/breadth-first-search) - * `B` [Гра стрибків](src/algorithms/uncategorized/jump-game) - зворотне відстеження, динамічне програмування (зверху вниз + знизу вгору) та жадібні приклади - * `B` [Швидке піднесення до степеня](src/algorithms/math/fast-powering) - * `A` [Перестановка](src/algorithms/sets/permutations) (з повтореннями та без) - * `A` [Комбінації](src/algorithms/sets/combinations) (з повтореннями та без) -* **Динамічне програмування** - розділ математики, який присвячено теорії і методам розв'язання багатокрокових задач оптимального управління - * `B` [Послідовність Фібоначчі](src/algorithms/math/fibonacci) - класична та закриті версії - * `B` [Гра стрибків](src/algorithms/uncategorized/jump-game) - зворотне відстеження, динамічне програмування (зверху вниз + знизу вгору) та жадібні приклади - * `B` [Проблема унікальних шляхів](src/algorithms/uncategorized/unique-paths) - зворотне відстеження, динамічне програмування та приклади на основі Трикутника Паскаля - * `B` [Дощові тераси](src/algorithms/uncategorized/rain-terraces) - проблема захоплення дощової води (динамічне програмування та версії грубої сили) - * `B` [Завдання про рекурсивні сходи](src/algorithms/uncategorized/recursive-staircase) - підрахунок кількості способів досягти вершини (4 рішення) - * `A` [Відстань Левенштейна](src/algorithms/string/levenshtein-distance) - міра відмінності двох послідовностей символів (рядків) - * `A` [Пошук найдовшої спільної підпослідовності](src/algorithms/sets/longest-common-subsequence) - * `A` [Найбільший загальний підрядок](src/algorithms/string/longest-common-substring) - * `A` [Завдання пошуку найбільшою збільшується підпослідовності](src/algorithms/sets/longest-increasing-subsequence) - * `A` [Найменша загальна супер-послідовність](src/algorithms/sets/shortest-common-supersequence) - * `A` [Задача пакування рюкзака](src/algorithms/sets/knapsack-problem) - приклади "0/1" та "Необмежений" - * `A` [Розбиття числа](src/algorithms/math/integer-partition) - * `A` [Максимальний підмасив](src/algorithms/sets/maximum-subarray) - * `A` [Алгоритм Беллмана — Форда](src/algorithms/graph/bellman-ford) - алгоритм пошуку найкоротшого шляху в зваженому графі - * `A` [Алгоритм Флойда — Воршелла](src/algorithms/graph/floyd-warshall) - знаходження найкоротшого шляху в зваженому графі з додатними або від'ємними вагами ребер (але без від'ємнозначних циклів) - * `A` [Підбирання регулярного виразу](src/algorithms/string/regular-expression-matching) -* **Пошук із зворотом** - подібно до грубої сили, намагайтеся генерувати всі можливі рішення, але кожного разу, коли ви створюєте наступне рішення, тестуєте чи він задовольняє всім умовам, і лише потім продовжуєте генерувати наступні рішення. В іншому випадку поверніться назад і рухайтесь далі іншим шляхом пошуку рішення. - * `B` [Гра стрибків](src/algorithms/uncategorized/jump-game) - зворотне відстеження, динамічне програмування (зверху вниз + знизу вгору) та жадібні приклади - * `B` [Проблема унікальних шляхів](src/algorithms/uncategorized/unique-paths) - зворотне відстеження, динамічне програмування та приклади на основі Трикутника Паскаля - * `B` [Булеан](src/algorithms/sets/power-set) - множина всіх підмножин даної множини (бітові та зворотні рішення) - * `A` [Гамільтонів граф](src/algorithms/graph/hamiltonian-cycle) - шлях, що містить кожну вершину графа рівно один раз - * `A` [Задача про вісім ферзів](src/algorithms/uncategorized/n-queens) - * `A` [Задача про хід коня](src/algorithms/uncategorized/knight-tour) - * `A` [Комбінована сума](src/algorithms/sets/combination-sum) - знайти всі комбінації, що утворюють конкретну суму -* **Метод гілок і меж** - один з поширених методів дискретної оптимізації. Метод працює на дереві рішень та визначає принципи роботи конкретних алгоритмів пошуку розв'язків, тобто, є мета-алгоритмом. Для різних задач комбінаторної оптимізації створюють спеціалізовані алгоритми гілок та меж. - -## Як користуватися цим репозиторієм - -**Встановіть усі залежності** -``` -npm install -``` - -**Запустіть ESLint** - -Запустіть для перевірки якості коду - -``` -npm run lint -``` - -**Запустіть усі тести** -``` -npm test -``` - -**Запустіть тести за назвою** -``` -npm test -- 'LinkedList' -``` - -**Ігрище** - -Ви можете побавитись зі структурами даних та алгоритмами в файлі `./src/playground/playground.js` та писати тести до них в даному файлі `./src/playground/__test__/playground.test.js`. - -Для перевірки, чи працює ваш код належним чином запустіть команду: - -``` -npm test -- 'playground' -``` - -## Корисна інформація - -### Список літератури - -[▶ Структури даних та алгоритми на YouTube](https://www.youtube.com/playlist?list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) - -### Асимптотична нотація великого О (нотація Ландау) - -*Асимптотична нотація великого О (нотація Ландау)* розповсюджена математична нотація для формального запису асимптотичної поведінки функцій. Широко вживається в теорії складності обчислень, інформатиці та математиці. -![Асимптотична нотація великого О](./assets/big-o-graph.png) - -Джерело: [Асимптотична нотація великого О](http://bigocheatsheet.com/). - -Нижче наведено список деяких найбільш часто використовуваних позначень нотації Ландаута їх порівняння продуктивності з різними розмірами вхідних даних. - -| Нотація Ландау | Обчислення для 10 елементів | Обчислення для 100 елементів | Обчислення для 1000 елементів | -| -------------- | ---------------------------- | ----------------------------- | ------------------------------- | -| **O(1)** | 1 | 1 | 1 | -| **O(log N)** | 3 | 6 | 9 | -| **O(N)** | 10 | 100 | 1000 | -| **O(N log N)** | 30 | 600 | 9000 | -| **O(N^2)** | 100 | 10000 | 1000000 | -| **O(2^N)** | 1024 | 1.26e+29 | 1.07e+301 | -| **O(N!)** | 3628800 | 9.3e+157 | 4.02e+2567 | - -### Складність операцій в структурі даних - -| Структура даних | Доступ | Пошук | Вставка | Видалення | Коментарі | -| ----------------------- | :-------: | :-------: | :-------: | :-------: | :-------- | -| **Масив** | 1 | n | n | n | | -| **Купа** | n | n | 1 | 1 | | -| **Черга** | n | n | 1 | 1 | | -| **Зв’язаний список** | n | n | 1 | n | | -| **Хеш-таблиця** | - | n | n | n | У разі ідеальної хеш-функції - O(1) | -| **Бінарне дерево пошуку** | n | n | n | n | У разі збалансованого дерева витрати становитимуть O (log (n)) | -| **Б-дерево** | log(n) | log(n) | log(n) | log(n) | | -| **Червоно-чорне дерево** | log(n) | log(n) | log(n) | log(n) | | -| **АВЛ-дерево** | log(n) | log(n) | log(n) | log(n) | | -| **Фільтр Блума** | - | 1 | 1 | - | Під час пошуку можливі помилкові спрацьовування | - -### Складність алгоритмів сортування масивів - -| Назва | Найкращий | Середній | Найгірший | Пам'ять | Стабільність | Коментарі | -| --------------------- | :-------------: | :-----------------: | :-----------------: | :-------: | :-------: | :-------- | -| **Сортування бульбашкою** | n | n2 | n2 | 1 | Так | | -| **Сортування включенням** | n | n2 | n2 | 1 | Так | | -| **Сортування вибором** | n2 | n2 | n2 | 1 | Ні | | -| **Пірамідальне сортування** | n log(n) | n log(n) | n log(n) | 1 | Ні | | -| **Сортування злиттям** | n log(n) | n log(n) | n log(n) | n | Так | | -| **Швидке сортування** | n log(n) | n log(n) | n2 | log(n) | Ні | Швидке сортування зазвичай виконується на місці з використанням O (log (n)) додаткової пам'яті | -| **Сортування Шелла** | n log(n) | залежить від послідовності проміжків | n (log(n))2 | 1 | Ні | | -| **Сортування підрахунком** | n + r | n + r | n + r | n + r | Так | Де r - найбільше число в масиві | -| **Сортування за розрядами** | n * k | n * k | n * k | n + k | Так | Де k - довжина найдовшого ключа | - -## Патронати проекту - -> Ви можете підтримати цей проект через ❤️️ [GitHub](https://github.com/sponsors/trekhleb) або ❤️️ [Patreon](https://www.patreon.com/trekhleb). - -[Люди, які підтримують цей проект](https://github.com/trekhleb/javascript-algorithms/blob/master/BACKERS.md) `∑ = 1` - -> ℹ️ A few more [projects](https://trekhleb.dev/projects/) and [articles](https://trekhleb.dev/blog/) about JavaScript and algorithms on [trekhleb.dev](https://trekhleb.dev) diff --git a/README.uz-UZ.md b/README.uz-UZ.md deleted file mode 100644 index 114a4de9cc..0000000000 --- a/README.uz-UZ.md +++ /dev/null @@ -1,359 +0,0 @@ -# JavaScript algoritmlari va ma'lumotlar tuzilmalari - -[![CI](https://github.com/trekhleb/javascript-algorithms/workflows/CI/badge.svg)](https://github.com/trekhleb/javascript-algorithms/actions?query=workflow%3ACI+branch%3Amaster) -[![codecov](https://codecov.io/gh/trekhleb/javascript-algorithms/branch/master/graph/badge.svg)](https://codecov.io/gh/trekhleb/javascript-algorithms) -![repo size](https://img.shields.io/github/repo-size/trekhleb/javascript-algorithms.svg) - -Bu repozitoriyada JavaScript-ga asoslangan ko'plab mashhur algoritmlar -va ma'lumotlar tuzilmalarining namunalari mavjud. - -Har bir algoritm va ma'lumotlar tuzilmasining alohida README fayli -bo'lib, unda tegishli tushuntirishlar va qo'shimcha o'qish uchun -havolalar (shu jumladan YouTube videolariga ham havolalar) mavjud. - -_Read this in other languages:_ -[_简体中文_](README.zh-CN.md), -[_繁體中文_](README.zh-TW.md), -[_한국어_](README.ko-KR.md), -[_日本語_](README.ja-JP.md), -[_Polski_](README.pl-PL.md), -[_Français_](README.fr-FR.md), -[_Español_](README.es-ES.md), -[_Português_](README.pt-BR.md), -[_Русский_](README.ru-RU.md), -[_Türkçe_](README.tr-TR.md), -[_Italiana_](README.it-IT.md), -[_Bahasa Indonesia_](README.id-ID.md), -[_Українська_](README.uk-UA.md), -[_Arabic_](README.ar-AR.md), -[_Tiếng Việt_](README.vi-VN.md), -[_Deutsch_](README.de-DE.md), -[_Uzbek_](README.uz-UZ.md) -[_עברית_](README.he-IL.md) - -Yodda tuting, bu loyiha faqat o'quv va tadqiqot maqsadida ishlatilishi -uchun mo'ljallangan va ishlab chiqarishda ishlatilishi **mumkin emas**. - -## Ma'lumotlar tuzilmalari - -Ma'lumotlar tuzilmasi - bu kompyuterda ma'lumotlarni samarali tarzda -olish va o'zgartirish uchun ularni tashkil etish va saqlashning ma'lum -bir usuli. Ayniqsa, ma'lumotlar tuzilmasi ma'lumot qiymatlarining -to'plami, ular orasidagi munosabatlar va ma'lumotlarga qo'llanilishi -mumkin bo'lgan funksiyalar yoki operatsiyalardir. - -`B` - Boshlang'ich, `A` - Ilg'or - -- `B` [Bog'langan ro'yxat](src/data-structures/linked-list) -- `B` [Ikki marta bog'langan ro'yxat](src/data-structures/doubly-linked-list) -- `B` [Navbat](src/data-structures/queue) -- `B` [Stek](src/data-structures/stack) -- `B` [Hash jadvali](src/data-structures/hash-table) -- `B` [Heap](src/data-structures/heap) - maksimal va minimal heap versiyalari -- `B` [Ustuvor navbat](src/data-structures/priority-queue) -- `A` [Trie](src/data-structures/trie) -- `A` [Daraxt](src/data-structures/tree) - - `A` [Ikkilik qidiruv daraxt](src/data-structures/tree/binary-search-tree) - - `A` [AVL daraxt](src/data-structures/tree/avl-tree) - - `A` [Qizil-qora daraxt](src/data-structures/tree/red-black-tree) - - `A` [Segment daraxt](src/data-structures/tree/segment-tree) - min/max/sum diapazon so'rovlari bilan misollar - - `A` [Fenwick daraxt](src/data-structures/tree/fenwick-tree) (ikkilik indeksli daraxt) -- `A` [Graf](src/data-structures/graph) (yo'naltirilgan hamda yo'naltirilmagan) -- `A` [Ajratilgan to'plam](src/data-structures/disjoint-set) - union-find ma'lumotlar strukturasi yoki merge-find to'plami -- `A` [Bloom filtri](src/data-structures/bloom-filter) -- `A` [LRU keshi](src/data-structures/lru-cache/) - Eng kam ishlatilgan (LRU) keshi - -## Algoritmlar - -Algoritm muammolar sinfini qanday hal qilishning aniq spetsifikatsiyasi. Bu operatsiyalar ketma-ketligini aniqlaydigan qoidalar to'plami. - -`B` - Boshlang'ich, `A` - Ilg'or - -### Mavzu bo'yicha algoritmlar - -- **Matematika** - - `B` [Bit manipulatsiyasi](src/algorithms/math/bits) - bitlarni qo'yish/olish/yangilash/tozalash, ikkilikka ko'paytirish/bo'lish, manfiy qilish va hokazo. - - `B` [Ikkilik suzuvchi nuqta](src/algorithms/math/binary-floating-point) - suzuvchi nuqtali sonlarning ikkilik tasviri. - - `B` [Faktorial](src/algorithms/math/factorial) - - `B` [Fibonachchi raqam](src/algorithms/math/fibonacci) - klassik va yopiq shakldagi versiyalar - - `B` [Asosiy omillar](src/algorithms/math/prime-factors) - tub omillarni topish va ularni Xardi-Ramanujan teoremasi yordamida sanash - - `B` [Birlamchilik testi](src/algorithms/math/primality-test) (sinov bo'linish usuli) - - `B` [Evklid algoritmi](src/algorithms/math/euclidean-algorithm) - eng katta umumiy bo'luvchini (EKUB) hisoblash - - `B` [Eng kichik umumiy karrali](src/algorithms/math/least-common-multiple) (EKUK) - - `B` [Eratosfen elagi](src/algorithms/math/sieve-of-eratosthenes) - berilgan chegaragacha barcha tub sonlarni topish - - `B` [Ikkining darajasimi](src/algorithms/math/is-power-of-two) - raqamning ikkining darajasi ekanligini tekshirish (sodda va bitli algoritmlar) - - `B` [Paskal uchburchagi](src/algorithms/math/pascal-triangle) - - `B` [Kompleks sonlar](src/algorithms/math/complex-number) - kompleks sonlar va ular bilan asosiy amallar - - `B` [Radian & Daraja](src/algorithms/math/radian) - radianlarni darajaga va orqaga aylantirish - - `B` [Tez ko'tarish](src/algorithms/math/fast-powering) - - `B` [Horner metodi](src/algorithms/math/horner-method) - polinomlarni baholash - - `B` [Matritsalar](src/algorithms/math/matrix) - matritsalar va asosiy matritsa operatsiyalari (ko'paytirish, transpozitsiya va boshqalar). - - `B` [Evklid masofasi](src/algorithms/math/euclidean-distance) - ikki nuqta/vektor/matritsa orasidagi masofa - - `A` [Butun sonlarni bo'lish](src/algorithms/math/integer-partition) - - `A` [Kvadrat ildiz](src/algorithms/math/square-root) - Nyuton metodi - - `A` [Liu Hui π algoritmi](src/algorithms/math/liu-hui) - N-gonlarga asoslangan π ning taxminiy hisoblari - - `A` [Diskret Furye transformatsiyasi](src/algorithms/math/fourier-transform) - vaqt funksiyasini (signalni) uni tashkil etuvchi chastotalarga ajratish -- **Sets** - - `B` [Karteziya maxsuloti](src/algorithms/sets/cartesian-product) - bir nechta to'plamlarning ko'paytmasi - - `B` [Fisher–Yates Shuffle](src/algorithms/sets/fisher-yates) - chekli ketma-ketlikni tasodifiy almashtirish - - `A` [Power Set](src/algorithms/sets/power-set) - to'plamning barcha kichik to'plamlari (bitwise, backtracking va kaskadli echimlar) - - `A` [Permutatsiyalar](src/algorithms/sets/permutations) (takroriyalash bilan va takroriyalashsiz) - - `A` [Kombinatsiyalar](src/algorithms/sets/combinations) (takroriyalash bilan va takroriyalashsiz) - - `A` [Eng uzun umumiy ketma-ketlik](src/algorithms/sets/longest-common-subsequence) (LCS) - - `A` [Eng uzun ortib boruvchi ketma-ketlik](src/algorithms/sets/longest-increasing-subsequence) - - `A` [Eng qisqa umumiy ketma-ketlik](src/algorithms/sets/shortest-common-supersequence) (SCS) - - `A` [Knapsack muammosi](src/algorithms/sets/knapsack-problem) - "0/1" va "Bir-biriga bog'lanmagan" - - `A` [Maksimal kichik massiv](src/algorithms/sets/maximum-subarray) - Toʻliq kuch va dinamik dasturlash (Kadane usuli) versiyalari - - `A` [Kombinatsiya yig'indisi](src/algorithms/sets/combination-sum) - ma'lum summani tashkil etuvchi barcha kombinatsiyalarni topish -- **Stringlar** - - `B` [Hamming masofasi](src/algorithms/string/hamming-distance) - belgilarning bir-biridan farq qiladigan pozitsiyalar soni - - `B` [Palindrom](src/algorithms/string/palindrome) - satrning teskari tomoni ham bir xil ekanligini tekshirish - - `A` [Levenshtein masofasi](src/algorithms/string/levenshtein-distance) - ikki ketma-ketlik o'rtasidagi minimal tahrirlash masofasi - - `A` [Knuth–Morris–Pratt Algoritmi](src/algorithms/string/knuth-morris-pratt) (KMP Algoritmi) - kichik qatorlarni qidirish (mosh keluvchi naqshni qidirish) - - `A` [Z Algoritmi](src/algorithms/string/z-algorithm) - kichik qatorlarni qidirish (mosh keluvchi naqshni qidirish) - - `A` [Rabin Karp Algoritmi](src/algorithms/string/rabin-karp) - kichik qatorlarni qidirish - - `A` [Eng uzun umumiy kichik matn](src/algorithms/string/longest-common-substring) - - `A` [Regulyar ifoda moslashuvi](src/algorithms/string/regular-expression-matching) (RegEx) -- **Qidiruvlar** - - `B` [Linear qidirish](src/algorithms/search/linear-search) - - `B` [Jump qidirish](src/algorithms/search/jump-search) (yoki Blok qidirish) - saralangan qatorda qidirish - - `B` [Ikkilik qidirish](src/algorithms/search/binary-search) - saralangan qatorda qidirish - - `B` [Interpolatsiya qidirish](src/algorithms/search/interpolation-search) - bir tekis taqsimlangan saralangan qatorda qidirish -- **Tartiblash** - - `B` [Pufakcha tartiblash](src/algorithms/sorting/bubble-sort) - - `B` [Tanlash tartibi](src/algorithms/sorting/selection-sort) - - `B` [Kiritish tartibi](src/algorithms/sorting/insertion-sort) - - `B` [Heap tartibi](src/algorithms/sorting/heap-sort) - - `B` [Birlashtirish tartibi](src/algorithms/sorting/merge-sort) - - `B` [Tezkor saralash](src/algorithms/sorting/quick-sort) - joyida va joyida bo'lmagan amalga oshirish - - `B` [Shell tartiblash](src/algorithms/sorting/shell-sort) - - `B` [Sanash tartibi](src/algorithms/sorting/counting-sort) - - `B` [Radiksli tartiblash](src/algorithms/sorting/radix-sort) - - `B` [Bucket tartiblash](src/algorithms/sorting/bucket-sort) -- **Bog'langan ro'yhatlar** - - `B` [To'g'ri traversal](src/algorithms/linked-list/traversal) - - `B` [Teskari traversal](src/algorithms/linked-list/reverse-traversal) -- **Daraxtlar** - - `B` [Birinchi-pastga qarab qidirish](src/algorithms/tree/depth-first-search) (Depth-First Search) - - `B` [Birinchi-yonga qarab qidirish](src/algorithms/tree/breadth-first-search) (Breadth-First Search) -- **Grafiklar** - - `B` [Birinchi-pastga qarab qidirish](src/algorithms/graph/depth-first-search) (Depth-First Search) - - `B` [Birinchi-yonga qarab qidirish](src/algorithms/graph/breadth-first-search) (Breadth-First Search) - - `B` [Kruskal Algoritmi](src/algorithms/graph/kruskal) - og'irlikdagi yo'naltirilmagan grafik uchun Minimal kengayuvchi daraxtni (MST) topish - - `A` [Dijkstra Algoritmi](src/algorithms/graph/dijkstra) - grafikning bir cho'qqisidan qolgan barcha nuqtalarga eng qisqa yo'llarni topish - - `A` [Bellman-Ford Algoritmi](src/algorithms/graph/bellman-ford) - grafikning bir cho'qqisidan qolgan barcha nuqtalarga eng qisqa yo'llarni topish - - `A` [Floyd-Warshall Algoritmi](src/algorithms/graph/floyd-warshall) - grafikning barcha uchlari orasidagi eng qisqa masofalarni topish - - `A` [Siklni aniqlash](src/algorithms/graph/detect-cycle) - yo'naltirilgan va yo'naltirilmagan grafiklar uchun (DFS va Disjoint Set-ga asoslangan versiyalar) - - `A` [Prim Algoritmi](src/algorithms/graph/prim) - og'irlikdagi yo'naltirilmagan grafik uchun Minimal kengayuvchi daraxtni (MST) topish - - `A` [Topologik saralash](src/algorithms/graph/topological-sorting) - DFS metodi - - `A` [Artikulyatsiya nuqtalari](src/algorithms/graph/articulation-points) - Tarjan algoritmi (DFS asosida) - - `A` [Ko'priklar](src/algorithms/graph/bridges) - DFS asosidagi algoritm - - `A` [Eyler yo'li va Eyler sxemasi](src/algorithms/graph/eulerian-path) - Fleury algoritmi - Har bir chekkaga bir marta tashrif buyurish - - `A` [Gamilton sikli](src/algorithms/graph/hamiltonian-cycle) - Har bir cho'qqiga bir marta tashrif buyurish - - `A` [Kuchli bog'langan komponentlar](src/algorithms/graph/strongly-connected-components) - Kosaraju algoritmi - - `A` [Sayohatchi sotuvchi muammosi](src/algorithms/graph/travelling-salesman) - har bir shaharga tashrif buyuradigan va kelib chiqqan shaharga qaytib keladigan eng qisqa yo'l -- **Kriptografiya** - - `B` [Polynomial Hash](src/algorithms/cryptography/polynomial-hash) - polinomga asoslangan hash funktsiyasi - - `B` [Rail Fence Cipher](src/algorithms/cryptography/rail-fence-cipher) - xabarlarni kodlash uchun transpozitsiya shifrlash algoritmi - - `B` [Caesar Cipher](src/algorithms/cryptography/caesar-cipher) - oddiy almashtirish shifridir - - `B` [Hill Cipher](src/algorithms/cryptography/hill-cipher) - chiziqli algebraga asoslangan almashtirish shifri -- **Machine Learning** - - `B` [NanoNeuron](https://github.com/trekhleb/nano-neuron) - Mashinalar aslida qanday o'rganishi mumkinligini ko'rsatadigan 7 ta oddiy JS funksiyasi (forward/backward tarqalish) - - `B` [k-NN](src/algorithms/ml/knn) - eng yaqin qo'shnilarni tasniflash algoritmi - - `B` [k-Means](src/algorithms/ml/k-means) - k-Means kalsterlash algoritmi -- **Tasvirga ishlov berish** - - `B` [Seam Carving](src/algorithms/image-processing/seam-carving) - kontentga moslashuvchan rasm o'lchamini o'zgartirish algoritmi -- **Statistikalar** - - `B` [Weighted Random](src/algorithms/statistics/weighted-random) - elementlarning og'irligi asosida ro'yxatdan tasodifiy elementni tanlash -- **Evolyutsion algoritmlar** - - `A` [Genetik algoritm](https://github.com/trekhleb/self-parking-car-evolution) - avtoturargohni o'rgatish uchun genetik algoritm qanday qo'llanilishiga misol. -- **Kategoriyasiz** - - `B` [Xanoy minorasi](src/algorithms/uncategorized/hanoi-tower) - - `B` [Kvadrat matritsaning aylanishi](src/algorithms/uncategorized/square-matrix-rotation) - joyidagi algoritm - - `B` [Sakrash o'yini](src/algorithms/uncategorized/jump-game) - orqaga qaytish, dinamik dasturlash (yuqoridan pastga + pastdan yuqoriga) va ochko'z misollar - - `B` [Noyob yo'llar](src/algorithms/uncategorized/unique-paths) - orqaga qaytish, dinamik dasturlash va Paskal uchburchagiga asoslangan misolla - - `B` [Yomg'ir teraslari](src/algorithms/uncategorized/rain-terraces) - yomg'ir suvini ushlab turish muammosi (dinamik dasturlash va qo'pol kuch versiyalari) - - `B` [Rekursiv zinapoya](src/algorithms/uncategorized/recursive-staircase) - yuqoriga chiqish yo'llari sonini hisoblash (4 ta echim) - - `B` [Aksiyalarni sotib olish va sotish uchun eng yaxshi vaqt](src/algorithms/uncategorized/best-time-to-buy-sell-stocks) - bo'linib-zabt etish va bir marta o'tish misollari - - `A` [N-Queens Muommosi](src/algorithms/uncategorized/n-queens) - - `A` [Ritsar sayohati](src/algorithms/uncategorized/knight-tour) - -### Paradigma bo'yicha algoritmlar - -Algorithmic paradigm - bu algoritmlar sinfini loyihalashtirishga asos bo'lib xizmat qiladigan umumiy usul yoki yondashuv. Bu algoritm tushunchasidan yuqori darajadagi abstraktsiya bo'lib, algoritm kompyuter dasturi tushunchasidan yuqori darajadagi abstraktsiya bo'lgani kabi. - -- **Brute Force** - barcha imkoniyatlarni ko'rib chiqib va eng yaxshi echimni tanlash - - `B` [Chiziqli qidirish](src/algorithms/search/linear-search) - - `B` [Yomg'irli teraslar](src/algorithms/uncategorized/rain-terraces) - yomg'ir suvini to'plash muammosi - - `B` [Rekursiv zinapoya](src/algorithms/uncategorized/recursive-staircase) - cho'qqiga chiqish yo'llari sonini hisoblash - - `A` [Maksimal kichik massiv](src/algorithms/sets/maximum-subarray) - - `A` [Sayohatchi sotuvchi muammosi](src/algorithms/graph/travelling-salesman) - har bir shaharga tashrif buyuradigan va kelib chiqqan shaharga qaytib keladigan eng qisqa yo'l - - `A` [Diskret Furye transformatsiyasi](src/algorithms/math/fourier-transform) - vaqt funksiyasini (signalni) uni tashkil etuvchi chastotalarga ajratish -- **Greedy** - kelajakni o'ylamasdan, hozirgi vaqtda eng yaxshi variantni tanlash - - `B` [Sakrash o'yini](src/algorithms/uncategorized/jump-game) - - `A` [Bog'lanmagan yukxalta muammosi](src/algorithms/sets/knapsack-problem) - - `A` [Dijkstra Algoritmi](src/algorithms/graph/dijkstra) - grafikning bir cho'qqisidan qolgan barcha nuqtalarga eng qisqa yo'llarni topish - - `A` [Prim Algoritmi](src/algorithms/graph/prim) - og'irlikdagi yo'naltirilmagan grafik uchun Minimal kengayuvchi daraxtni (MST) topish - - `A` [Kruskal Algoritmi](src/algorithms/graph/kruskal) - og'irlikdagi yo'naltirilmagan grafik uchun Minimal kengayuvchi daraxtni (MST) topish -- **Divide and Conquer** - muammoni kichikroq qismlarga bo'lib va keyin bu qismlarni hal qilish - - - `B` [Ikkilik qidiruv](src/algorithms/search/binary-search) - - `B` [Xanoy minorasi](src/algorithms/uncategorized/hanoi-tower) - - `B` [Paskal uchburchagi](src/algorithms/math/pascal-triangle) - - `B` [Evklid Algoritmi](src/algorithms/math/euclidean-algorithm) - eng katta umumiy bo'luvchini (EKUB) hisoblash - - `B` [Birlashtirish tartibi](src/algorithms/sorting/merge-sort) - - `B` [Tezkor saralash](src/algorithms/sorting/quick-sort) - - `B` [Birinchi-pastga qarab qidirish daraxti](src/algorithms/tree/depth-first-search) (DFS) - - `B` [Birinchi-pastga qarab qidirish grafigi](src/algorithms/graph/depth-first-search) (DFS) - - `B` [Matritsalar](src/algorithms/math/matrix) - turli shakldagi matritsalarni hosil qilish va kesib o'tish - - `B` [Sakrash o'yini](src/algorithms/uncategorized/jump-game) - - `B` [Tez ko'tarish](src/algorithms/math/fast-powering) - - `B` [Aksiyalarni sotib olish va sotish uchun eng yaxshi vaqt](src/algorithms/uncategorized/best-time-to-buy-sell-stocks) - bo'linib-zabt etish va bir marta o'tish misollari - - `A` [Permutatsiyalar](src/algorithms/sets/permutations) (takroriyalash bilan va takroriyalashsiz) - - `A` [Kombinatsiyalar](src/algorithms/sets/combinations) (takroriyalash bilan va takroriyalashsiz) - - `A` [Maksimal kichik massiv](src/algorithms/sets/maximum-subarray) - -- **Dinamik dasturlash** - ilgari topilgan kichik yechimlar yordamida yechim yaratish - - `B` [Fibonachchi raqam](src/algorithms/math/fibonacci) - - `B` [Sakrash o'yini](src/algorithms/uncategorized/jump-game) - - `B` [Noyob yo'llar](src/algorithms/uncategorized/unique-paths) - - `B` [Yomg'ir teraslari](src/algorithms/uncategorized/rain-terraces) - yomg'ir suvini to'plash muammosi - - `B` [Recursive Staircase](src/algorithms/uncategorized/recursive-staircase) - count the number of ways to reach to the top - - `B` [Seam Carving](src/algorithms/image-processing/seam-carving) - kontentga moslashuvchan rasm o'lchamini o'zgartirish algoritmi - - `A` [Levenshtein masofasi](src/algorithms/string/levenshtein-distance) - ikki ketma-ketlik o'rtasidagi minimal tahrirlash masofasi - - `A` [Eng uzun umumiy ketma-ketlik](src/algorithms/sets/longest-common-subsequence) (LCS) - - `A` [Eng uzun umumiy kichik matn](src/algorithms/string/longest-common-substring) - - `A` [Eng uzun ortib boruvchi ketma-ketlik](src/algorithms/sets/longest-increasing-subsequence) - - `A` [Eng qisqa umumiy ketma-ketlik](src/algorithms/sets/shortest-common-supersequence) - - `A` [0/1 Knapsak muommosi](src/algorithms/sets/knapsack-problem) - - `A` [Butun sonlarni bo'lish](src/algorithms/math/integer-partition) - - `A` [Maksimal kichik massiv](src/algorithms/sets/maximum-subarray) - - `A` [Bellman-Ford Algoritmi](src/algorithms/graph/bellman-ford) - grafikning bir cho'qqisidan qolgan barcha nuqtalarga eng qisqa yo'llarni topish - - `A` [Floyd-Warshall Algoritmi](src/algorithms/graph/floyd-warshall) -grafikning barcha uchlari orasidagi eng qisqa masofalarni topish - - `A` [Regulyar ifoda moslashuvi](src/algorithms/string/regular-expression-matching) -- **Backtracking** - brute forcega o'xshab, barcha mumkin bo'lgan yechimlarni generatsiya qilishga harakat qiladi, lekin har safar keyingi yechimni yaratganingizda, yechim barcha shartlarga javob beradimi yoki yo'qligini tekshirasiz va shundan keyingina keyingi yechimlarni ishlab chiqarishni davom ettirasiz. Aks holda, orqaga qaytib, yechim topishning boshqa yo'liga o'tasiz. Odatda state-space ning DFS-qidiruvi ishlatiladi. - - `B` [Sakrash o'yini](src/algorithms/uncategorized/jump-game) - - `B` [Noyob yo'llar](src/algorithms/uncategorized/unique-paths) - - `B` [Power Set](src/algorithms/sets/power-set) - to'plamning barcha kichik to'plamlari - - `A` [Gamilton sikli](src/algorithms/graph/hamiltonian-cycle) - Har bir cho'qqiga bir marta tashrif buyurish - - `A` [N-Queens muommosi](src/algorithms/uncategorized/n-queens) - - `A` [Ritsar sayohati](src/algorithms/uncategorized/knight-tour) - - `A` [Kombinatsiya yig'indisi](src/algorithms/sets/combination-sum) - ma'lum summani tashkil etuvchi barcha kombinatsiyalarni topish -- **Branch & Bound** - shu paytgacha topilgan eng arzon echimdan kattaroq xarajatlarga ega qisman echimlarni bekor qilish uchun, backtracking qidiruvining har bir bosqichida topilgan eng arzon echimni eslab qoling va shu paytgacha topilgan eng arzon yechim narxidan muammoni eng kam xarajatli yechim narxining past chegarasi sifatida foydalaning. Odatda state-space daraxtining DFS o'tishi bilan birgalikda BFS traversal qo'llaniladi. - -## Ushbu repozitoriyadan qanday foydalanish kerak - -**Barcha dependensiylarni o'rnating** - -``` -npm install -``` - -**ESLint ni ishga tushiring** - -Kod sifatini tekshirish uchun ESLint ni ishga tushirishingiz mumkin. - -``` -npm run lint -``` - -**Barcha testlarni ishga tushuring** - -``` -npm test -``` - -**Testlarni nom bo'yicha ishga tushirish** - -``` -npm test -- 'LinkedList' -``` - -**Muammolarni bartaraf qilish (Troubleshooting)** - -Agar linting yoki sinov muvaffaqiyatsiz bo'lsa, `node_modules` papkasini o'chirib, npm paketlarini qayta o'rnatishga harakat qiling: - -``` -rm -rf ./node_modules -npm i -``` - -Shuningdek, to'g'ri Node versiyasidan foydalanayotganingizga ishonch hosil qiling (`>=16`). Agar Node versiyasini boshqarish uchun [nvm](https://github.com/nvm-sh/nvm) dan foydalanayotgan bo'lsangiz, loyihaning ildiz papkasidan `nvm use` ni ishga tushiring va to'g'ri versiya tanlanadi. - -**O'yin maydoni (Playground)** - -`./src/playground/playground.js` faylida ma'lumotlar strukturalari va algoritmlar bilan o'ynashingiz, `./src/playground/test/playground.test.js` faylida esa ular uchun testlar yozishingiz mumkin. - -Shundan so'ng, playground kodingiz kutilgandek ishlashini tekshirish uchun quyidagi buyruqni ishga tushirishingiz kifoya: - -``` -npm test -- 'playground' -``` - -## Foydali ma'lumotlar - -### Manbalar - -- [▶ Data Structures and Algorithms on YouTube](https://www.youtube.com/playlist?list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) -- [✍🏻 Data Structure Sketches](https://okso.app/showcase/data-structures) - -### Big O Notation - -_Big O notation_ algoritmlarni kirish hajmi oshgani sayin ularning ishlash vaqti yoki bo'sh joy talablari qanday o'sishiga qarab tasniflash uchun ishlatiladi. Quyidagi jadvalda siz Big O notatsiyasida ko'rsatilgan algoritmlarning o'sishining eng keng tarqalgan tartiblarini topishingiz mumkin. - -![Big O grafiklar](./assets/big-o-graph.png) - -Manba: [Big O Cheat Sheet](http://bigocheatsheet.com/). - -Quyida eng ko'p qo'llaniladigan Big O notatsiyalarining ro'yxati va ularning kirish ma'lumotlarining turli o'lchamlariga nisbatan ishlashini taqqoslash keltirilgan. - -| Big O Notatsiya | Turi | 10 ta element uchun hisob-kitoblar | 100 ta element uchun hisob-kitoblar | 1000 ta element uchun hisob-kitoblar | -| --------------- | ------------ | ---------------------------------- | ----------------------------------- | ------------------------------------ | -| **O(1)** | O'zgarmas | 1 | 1 | 1 | -| **O(log N)** | Logarifmik | 3 | 6 | 9 | -| **O(N)** | Chiziqli | 10 | 100 | 1000 | -| **O(N log N)** | n log(n) | 30 | 600 | 9000 | -| **O(N^2)** | Kvadrat | 100 | 10000 | 1000000 | -| **O(2^N)** | Eksponensial | 1024 | 1.26e+29 | 1.07e+301 | -| **O(N!)** | Faktorial | 3628800 | 9.3e+157 | 4.02e+2567 | - -### Ma'lumotlar tuzilmalarining operatsiyalari murakkabligi - -| Ma'lumotlar tuzilmalari | Kirish | Qidirish | Kiritish | O'chirish | Izohlar | -| --------------------------- | :----: | :------: | :------: | :-------: | :--------------------------------------------------------- | -| **Massiv** | 1 | n | n | n | | -| **Stak** | n | n | 1 | 1 | | -| **Navbat** | n | n | 1 | 1 | | -| **Bog'langan ro'yhat** | n | n | 1 | n | | -| **Hash jadval** | - | n | n | n | Mukammal xash funksiyasi bo'lsa, xarajatlar O (1) bo'ladi. | -| **Ikkilik qidiruv daraxti** | n | n | n | n | Balanslangan daraxt narxida O(log(n)) bo'ladi. | -| **B-daraxti** | log(n) | log(n) | log(n) | log(n) | | -| **Qizil-qora daraxt** | log(n) | log(n) | log(n) | log(n) | | -| **AVL Daraxt** | log(n) | log(n) | log(n) | log(n) | | -| **Bloom filtri** | - | 1 | 1 | - | Qidiruv paytida noto'g'ri pozitivlar bo'lishi mumkin | - -### Massivlarni saralash algoritmlarining murakkabligi - -| Nomi | Eng yaxshi | O'rta | Eng yomon | Xotira | Barqaror | Izohlar | -| ------------------------- | :-----------: | :---------------------: | :-------------------------: | :----: | :------: | :--------------------------------------------------------------------------- | -| **Pufakcha tartiblash** | n | n2 | n2 | 1 | Ha | | -| **Kiritish tartibi** | n | n2 | n2 | 1 | Ha | | -| **Tanlash tartibi** | n2 | n2 | n2 | 1 | Yo'q | | -| **Heap tartibi** | n log(n) | n log(n) | n log(n) | 1 | Yo'q | | -| **Birlashtirish tartibi** | n log(n) | n log(n) | n log(n) | n | Ha | | -| **Tezkor saralash** | n log(n) | n log(n) | n2 | log(n) | Yo'q | Tezkor saralash odatda O(log(n)) stek maydoni bilan joyida amalga oshiriladi | -| **Shell tartiblash** | n log(n) | depends on gap sequence | n (log(n))2 | 1 | Yo'q | | -| **Sanash tartibi** | n + r | n + r | n + r | n + r | Ha | r - massivdagi eng katta raqam | -| **Radiksli tartiblash** | n \* k | n \* k | n \* k | n + k | Ha | k - eng uzun kalitning uzunligi | - -## Loyihani qo'llab-quvvatlovchilar - -> Siz ushbu loyihani ❤️️ [GitHub](https://github.com/sponsors/trekhleb) yoki ❤️️ [Patreon](https://www.patreon.com/trekhleb) orqali qo'llab-quvvatlashingiz mumkin. - -[Ushbu loyihani qo'llab-quvvatlagan odamlar](https://github.com/trekhleb/javascript-algorithms/blob/master/BACKERS.md) `∑ = 1` - -## Muallif - -[@trekhleb](https://trekhleb.dev) - -A few more [projects](https://trekhleb.dev/projects/) and [articles](https://trekhleb.dev/blog/) about JavaScript and algorithms on [trekhleb.dev](https://trekhleb.dev) diff --git a/README.vi-VN.md b/README.vi-VN.md deleted file mode 100644 index 4c35f467f8..0000000000 --- a/README.vi-VN.md +++ /dev/null @@ -1,329 +0,0 @@ -# JavaScript Thuật Toán và Cấu Trúc Dữ Liệu - -[![CI](https://github.com/trekhleb/javascript-algorithms/workflows/CI/badge.svg)](https://github.com/trekhleb/javascript-algorithms/actions?query=workflow%3ACI+branch%3Amaster) -[![codecov](https://codecov.io/gh/trekhleb/javascript-algorithms/branch/master/graph/badge.svg)](https://codecov.io/gh/trekhleb/javascript-algorithms) - -Repository này bao gồm nhiều ví dụ thuật toán và cấu trúc dữ liệu phổ biến -dựa trên Javascript. - -Mối thuật toán và cấu trúc dữ liệu có README riêng với những lý giải và links -liên quan để đọc thêm (bao gồm cả những videos trên Youtube). - -_Đọc bằng ngôn ngữ khác:_ -[_English_](README.md), -[_简体中文_](README.zh-CN.md), -[_繁體中文_](README.zh-TW.md), -[_한국어_](README.ko-KR.md), -[_日本語_](README.ja-JP.md), -[_Polski_](README.pl-PL.md), -[_Français_](README.fr-FR.md), -[_Español_](README.es-ES.md), -[_Português_](README.pt-BR.md), -[_Русский_](README.ru-RU.md), -[_Türk_](README.tr-TR.md), -[_Italiana_](README.it-IT.md), -[_Bahasa Indonesia_](README.id-ID.md), -[_Українська_](README.uk-UA.md), -[_Arabic_](README.ar-AR.md) -[_עברית_](README.he-IL.md) - -*☝ Dự án này chỉ được sử dụng cho mục đích học tập và nghiên cứu, **không** được dùng -cho mục đích thương mại.* - -## Cấu Trúc Dữ Liệu - -Cấu trúc dữ liệu là một cách cụ thể để tổ chức và lưu trữ dữ liệu trong máy tính để nó có thể -được truy cập và sửa đổi một cách hiệu quả. Chính xác hơn, cấu trúc dữ liệu là một tập hợp -các giá trị dữ liệu, các mối quan hệ giữa chúng và các hàm hoặc phép toán có thể được áp dụng -cho dữ liệu. - -`B` - Cơ bản, `A` - Nâng cao - -* `B` [Danh sách liên kết](src/data-structures/linked-list) -* `B` [Danh sách liên kết đôi](src/data-structures/doubly-linked-list) -* `B` [Hàng đợi](src/data-structures/queue) -* `B` [Ngăn xếp](src/data-structures/stack) -* `B` [Bảng băm](src/data-structures/hash-table) -* `B` [Đống](src/data-structures/heap) - max và min heap -* `B` [Hàng đợi ưu tiên](src/data-structures/priority-queue) -* `A` [Cây tiền tố](src/data-structures/trie) -* `A` [Cây](src/data-structures/tree) - * `A` [Cây tìm kiếm nhị phân](src/data-structures/tree/binary-search-tree) - * `A` [Cây AVL](src/data-structures/tree/avl-tree) - * `A` [Cây đỏ đen](src/data-structures/tree/red-black-tree) - * `A` [Cây phân đoạn](src/data-structures/tree/segment-tree) - với các ví dụ truy vấn phạm vi nhỏ nhất/lớn nhất/tổng - * `A` [CÂy Fenwick](src/data-structures/tree/fenwick-tree) (Cây chỉ mục nhị phân) -* `A` [Đồ thị](src/data-structures/graph) (có hướng và vô hướng) -* `A` [Tập hợp không giao nhau](src/data-structures/disjoint-set) -* `A` [Bộ lọc Bloom](src/data-structures/bloom-filter) - -## Thuật Toán - -Thuật toán là một đặc tả rõ ràng về cách giải quyết một lớp vấn đề. Nó là một tập hợp các -quy tắc xác định chính xác một chuỗi phép toán. - -`B` - Cơ bản, `A` - Nâng cao - -### Thuật toán theo chủ đề - -* **Toán** - * `B` [Thao tác bit](src/algorithms/math/bits) - đặt/lấy/cập nhật/xóa bit, nhân/chia 2, đổi dấu âm,... - * `B` [Giai thừa](src/algorithms/math/factorial) - * `B` [Số Fibonacci](src/algorithms/math/fibonacci) - cổ điển và dạng đóng - * `B` [Thừa số nguyên tố](src/algorithms/math/prime-factors) - tìm và đếm thừa số nguyên tố sử dụng định luật Hardy-Ramanujan's - * `B` [Kiểm tra tính nguyên tố](src/algorithms/math/primality-test) (phân chia thử nghiệm) - * `B` [Thuật toán Euclid](src/algorithms/math/euclidean-algorithm) - tính ước số chung lớn nhất (GCD) - * `B` [Bội số chung nhỏ nhất](src/algorithms/math/least-common-multiple) (LCM) - * `B` [Sàng số nguyên tố](src/algorithms/math/sieve-of-eratosthenes) - tìm tất cả các số nguyên tố trong bất kỳ phạm vi nhất định nào - * `B` [Xác định lũy thừa của 2](src/algorithms/math/is-power-of-two) - kiểm tra xem số có phải là lũy thừa của 2 hay không (thuật toán nguyên bản và theo bit) - * `B` [Tam giác Pascal](src/algorithms/math/pascal-triangle) - * `B` [Số phức](src/algorithms/math/complex-number) - số phức và các phép toán cơ bản với số phức - * `B` [Radian & độ](src/algorithms/math/radian) - chuyển đổi giữa đơn vị radian và độ - * `B` [Tính nhanh lũy thừa](src/algorithms/math/fast-powering) - * `B` [Phương pháp Horner's](src/algorithms/math/horner-method) - tính giá trị đa thức - * `B` [Ma trận](src/algorithms/math/matrix) - ma trận và các phép toán cơ bản (phép nhân, phép chuyển vị,...) - * `B` [Khoảng cách Euclid](src/algorithms/math/euclidean-distance) - khoảng cách giữa hai điểm/véc-tơ/ma trận - * `A` [Phân hoạch](src/algorithms/math/integer-partition) - * `A` [Căn bậc hai](src/algorithms/math/square-root) - phương pháp Newton - * `A` [Thuật cắt đường tròn - Lưu Huy](src/algorithms/math/liu-hui) - phép tính gần đúng số π dựa vào đa giác - * `A` [Biến đổi Fourier rời rạc](src/algorithms/math/fourier-transform) - phân giải tín hiệu thời gian thành các tần số tạo nên tín hiệu đó -* **Tập hợp** - * `B` [Tích Đề-các](src/algorithms/sets/cartesian-product) - tích của nhiều tập hợp - * `B` [Thuật toán xáo trộn](src/algorithms/sets/fisher-yates) - dãy hữu hạn hoán vị ngẫu nhiên - * `A` [Tập lũy thừa](src/algorithms/sets/power-set) - tập hợp chứa tất cả các tập con (theo bit và quay lui) - * `A` [Hoán vị](src/algorithms/sets/permutations) (lặp và không lặp) - * `A` [Tổ hợp](src/algorithms/sets/combinations) (lặp và không lặp) - * `A` [Dãy con chung dài nhất](src/algorithms/sets/longest-common-subsequence) (LCS) - * `A` [Dãy con chung tăng dần dài nhất](src/algorithms/sets/longest-increasing-subsequence) - * `A` [Dãy con chung ngắn nhất](src/algorithms/sets/shortest-common-supersequence) (SCS) - * `A` [Bài toán xếp ba lô](src/algorithms/sets/knapsack-problem) - dạng 0-1 và không bị chặn - * `A` [Mảng con lớn nhất](src/algorithms/sets/maximum-subarray) - phiên bản vét cạn và quy hoạch động (Kadane) - * `A` [Tổ hợp của tổng](src/algorithms/sets/combination-sum) - tìm tất cả các tổ hợp tạo thành tổng cụ thể -* **Chuỗi** - * `B` [Khoảng cách Hamming](src/algorithms/string/hamming-distance) - số các vị trí các ký hiệu khác nhau - * `A` [Khoảng cách Levenshtein](src/algorithms/string/levenshtein-distance) - khoảng cách thay đổi nhỏ nhất giữa hai chuỗi ký tự - * `A` [Thuật toán Knuth–Morris–Pratt](src/algorithms/string/knuth-morris-pratt) (thuật toán KMP) - tìm chuỗi con (đối sánh mẫu) - * `A` [Thuật toán Z](src/algorithms/string/z-algorithm) - tìm chuỗi con (đối sánh mẫu) - * `A` [Thuật toán Rabin Karp](src/algorithms/string/rabin-karp) - tìm chuỗi con - * `A` [Xâu con chung dài nhất](src/algorithms/string/longest-common-substring) - * `A` [Phối biểu thức chính quy](src/algorithms/string/regular-expression-matching) -* **Tìm kiếm** - * `B` [Tìm kiếm tuyến tính](src/algorithms/search/linear-search) - * `B` [Tìm kiếm nhảy](src/algorithms/search/jump-search) (tìm khối) - tìm kiếm trong mảng đã sắp xếp - * `B` [Tìm kiếm nhị phân](src/algorithms/search/binary-search) - tìm kiếm trong mảng đã sắp xếp - * `B` [Tìm kiếm nội suy ](src/algorithms/search/interpolation-search) - Tìm kiếm strong mảng có thứ tự được phân phối đồng nhất -* **Sắp xếp** - * `B` [Sắp xếp nổi bọt](src/algorithms/sorting/bubble-sort) - * `B` [Sắp xếp chọn](src/algorithms/sorting/selection-sort) - * `B` [Sắp xếp chèn](src/algorithms/sorting/insertion-sort) - * `B` [Sắp xếp vun đống](src/algorithms/sorting/heap-sort) - * `B` [Sắp xếp trộn](src/algorithms/sorting/merge-sort) - * `B` [Sắp xếp nhanh](src/algorithms/sorting/quick-sort) - Tại chỗ và không tại chỗ - * `B` [Shellsort](src/algorithms/sorting/shell-sort) - * `B` [Sắp xếp đếm](src/algorithms/sorting/counting-sort) - * `B` [Sắp xếp theo cơ số](src/algorithms/sorting/radix-sort) -* **Danh sách liên kết** - * `B` [Di chuyển chính hướng](src/algorithms/linked-list/traversal) - * `B` [Di chuyển ngược hướng](src/algorithms/linked-list/reverse-traversal) -* **Cây** - * `B` [Depth-First Search](src/algorithms/tree/depth-first-search) (DFS) - * `B` [Breadth-First Search](src/algorithms/tree/breadth-first-search) (BFS) -* **Đồ thị** - * `B` [Tìm kiếm theo chiều sâu](src/algorithms/graph/depth-first-search) (DFS) - * `B` [Tìm kiếm theo chiều rộng](src/algorithms/graph/breadth-first-search) (BFS) - * `B` [Thuật toán Kruskal](src/algorithms/graph/kruskal) - tìm cây bao trùm nhỏ nhất (MST) cho đồ thị vô hướng có trọng số - * `A` [Thuật toán Dijkstra Algorithm](src/algorithms/graph/dijkstra) - tìm những đường ngắn nhất từ một định tới tất cả các đỉnh - * `A` [Thuật toán Bellman-Ford](src/algorithms/graph/bellman-ford) - tìm những đường ngắn nhất từ một đỉnh tới tất cả các đỉnh của đồ thị - * `A` [Thuật toán Floyd-Warshall](src/algorithms/graph/floyd-warshall) - tìm những đường ngắn nhất giữa tất cả các cặp đỉnh - * `A` [Phát hiện vòng](src/algorithms/graph/detect-cycle) - cho cả đồ thị có hướng và vô hướng (dựa trên DFS và tập không giao) - * `A` [Thuật toán Prim](src/algorithms/graph/prim) - tìm cây bao trùm nhỏ nhất (MST) cho đồ thị vô hướng có trọng số - * `A` [Sắp xếp tô pô](src/algorithms/graph/topological-sorting) - phương pháp DFS - * `A` [Điểm khớp](src/algorithms/graph/articulation-points) - Thuật toán Tarjan (dựa trên DFS) - * `A` [Cầu nối](src/algorithms/graph/bridges) - dựa trên DFS - * `A` [Đường đi Euler và Chu trình Euler](src/algorithms/graph/eulerian-path) - thuật toán Fleury - đi qua các cạnh chỉ một lần duy nhất - * `A` [Chu trình Hamilton](src/algorithms/graph/hamiltonian-cycle) - đi qua các đỉnh chỉ một lần duy nhất - * `A` [Các thành phần kết nối chặt](src/algorithms/graph/strongly-connected-components) - Thuật toán Kosaraju - * `A` [Bài toán người bán hàng](src/algorithms/graph/travelling-salesman) - tuyến đường ngắn nhất có thể đến thăm từng thành phố và trở về thành phố gốc -* **Mật mã học** - * `B` [Băm đa thức](src/algorithms/cryptography/polynomial-hash) - lăn hàm băm dựa trên đa thức - * `B` [Mật mã hàng rào đường sắt](src/algorithms/cryptography/rail-fence-cipher) - một thuật toán mật mã chuyển vị để mã hóa thông điệp - * `B` [Mật mã Caesar](src/algorithms/cryptography/caesar-cipher) - mật mã chuyển vị đơn giản - * `B` [Mật mã Hill](src/algorithms/cryptography/hill-cipher) - mật mã chuyển vị đơn giản dựa trên đại số tuyến tính -* **Học máy** - * `B` [NanoNeuron](https://github.com/trekhleb/nano-neuron) - 7 hàm JS đơn giản minh họa cách máy tính thực sự có thể học (truyền thuận / truyền ngược) - * `B` [k-NN](src/algorithms/ml/knn) - thuật toán phân loại k láng giềng gần nhất - * `B` [k-Means](src/algorithms/ml/k-means) - thuật toán phân cụm k-Means -* **Khác** - * `B` [Tháp Hà Nội](src/algorithms/uncategorized/hanoi-tower) - * `B` [Xoay ma trận vuông](src/algorithms/uncategorized/square-matrix-rotation) - thuật toán tại chỗ - * `B` [Trò chơi nhảy](src/algorithms/uncategorized/jump-game) - ví dụ quay lui, quy hoạch động (từ trên xuống + từ dưới lên), dynamic programming (top-down + bottom-up) và tham lam - * `B` [Các đường đi đặc trưng duy nhất](src/algorithms/uncategorized/unique-paths) - ví dụ quay lui, quy hoạch động và tam giác Pascal - * `B` [Thu thập nước mưa](src/algorithms/uncategorized/rain-terraces) - bài toán bẫy nước mưa (phiên bản quy hoạch động và vét cạn) - * `B` [Cầu thang đệ quy](src/algorithms/uncategorized/recursive-staircase) - đếm số cách lên đến đỉnh (4 lời giải) - * `B` [Thời điểm tốt nhất để mua bán cổ phiếu ](src/algorithms/uncategorized/best-time-to-buy-sell-stocks) - ví dụ chia để trị và một đường chuyền - * `A` [Bài toán n quân hậu](src/algorithms/uncategorized/n-queens) - * `A` [Mã đi tuần](src/algorithms/uncategorized/knight-tour) - -### Thuật toán theo mẫu hình - -Mẫu hình thuật toán là một phương pháp hoặc cách tiếp cận chung làm cơ sở cho việc thiết kế một -lớp thuật toán. Nó là một sự trừu tượng cao hơn khái niệm về một thuật toán, cũng giống như -một thuật toán là một sự trừu tượng cao hơn một chương trình máy tính. - -* **Vét cạn** - xem xét tất cả các khả năng và chọn giải pháp tốt nhất - * `B` [Tìm kiếm tuyến tính](src/algorithms/search/linear-search) - * `B` [Thu thập nước mưa](src/algorithms/uncategorized/rain-terraces) - bài toán bẫy nước mưa - * `B` [Cầu thang đệ quy](src/algorithms/uncategorized/recursive-staircase) - đếm số cách lên đến đỉnh - * `A` [Mảng con lớn nhất](src/algorithms/sets/maximum-subarray) - * `A` [Bài toán người bán hàng](src/algorithms/graph/travelling-salesman) - tuyến đường ngắn nhất có thể đến thăm từng thành phố và trở về thành phố gốc - * `A` [Biến đổi Fourier rời rạc](src/algorithms/math/fourier-transform) - phân giải tín hiệu thời gian thành các tần số tạo nên tín hiệu đó -* **Tham lam** - chọn phương án tốt nhất vào thời điểm hiện tại mà không cần cân nhắc đến tương lai - * `B` [Trò chơi nhảy](src/algorithms/uncategorized/jump-game) - * `A` [Bài xếp ba lô không bị chặn](src/algorithms/sets/knapsack-problem) - * `A` [Thuật toán Dijkstra](src/algorithms/graph/dijkstra) - tìm những đường ngắn nhất từ một định tới tất cả các đỉnh - * `A` [Thuật toán Prim](src/algorithms/graph/prim) - tìm cây bao trùm nhỏ nhất (MST) cho đồ thị vô hướng có trọng số - * `A` [Thuật toán Kruskal](src/algorithms/graph/kruskal) - tìm cây bao trùm nhỏ nhất (MST) cho đồ thị vô hướng có trọng số -* **Chia để trị** - chia vấn đề thành các phần nhỏ hơn rồi giải quyết các phần đó - * `B` [Tìm kiếm nhị phân](src/algorithms/search/binary-search) - * `B` [Tháp Hà Nội](src/algorithms/uncategorized/hanoi-tower) - * `B` [Tam giác Pascal](src/algorithms/math/pascal-triangle) - * `B` [Thuật toán Euclid](src/algorithms/math/euclidean-algorithm) - tính ước số chung lớn nhất - * `B` [Sắp xếp trộn](src/algorithms/sorting/merge-sort) - * `B` [Sắp xếp nhanh](src/algorithms/sorting/quick-sort) - * `B` [Cây tìm kiếm theo chiều sâu](src/algorithms/tree/depth-first-search) (DFS) - * `B` [Đồ thị tìm kiếm theo chiều sâu](src/algorithms/graph/depth-first-search) (DFS) - * `B` [Ma trận](src/algorithms/math/matrix) - tạo và duyệt các ma trận có kích thước khác nhau - * `B` [Trò chơi nhảy](src/algorithms/uncategorized/jump-game) - * `B` [Tính nhanh lũy thừa](src/algorithms/math/fast-powering) - * `B` [Thời điểm tốt nhất để mua bán cổ phiếu](src/algorithms/uncategorized/best-time-to-buy-sell-stocks) - ví dụ chia để trị và một đường chuyền - * `A` [Hoán vị](src/algorithms/sets/permutations) (lặp và không lặp) - * `A` [Tổ hợp](src/algorithms/sets/combinations) (lặp và không lặp) -* **Quy hoạch động** - xây dựng một giải pháp bằng cách sử dụng các giải pháp phụ đã tìm thấy trước đây - * `B` [Số Fibonacci](src/algorithms/math/fibonacci) - * `B` [Trò chơi nhảy](src/algorithms/uncategorized/jump-game) - * `B` [Đường đi độc nhất](src/algorithms/uncategorized/unique-paths) - * `B` [Thu thập nước mưa](src/algorithms/uncategorized/rain-terraces) - bài toán bẫy nước mưa - * `B` [Cầu thang đệ quy](src/algorithms/uncategorized/recursive-staircase) - đếm số cách lên đến đỉnh - * `A` [Khoảng cách Levenshtein](src/algorithms/string/levenshtein-distance) - khoảng cách thay đổi nhỏ nhất giữa hai chuỗi ký tự - * `A` [Dãy con chung dài nhất](src/algorithms/sets/longest-common-subsequence) (LCS) - * `A` [Xâu con chung dài nhất](src/algorithms/string/longest-common-substring) - * `A` [Dãy con chung tăng dần dài nhất](src/algorithms/sets/longest-increasing-subsequence) - * `A` [Dãy con chung ngắn nhất](src/algorithms/sets/shortest-common-supersequence) - * `A` [Bài xếp ba lô dạng 0-1](src/algorithms/sets/knapsack-problem) - * `A` [Integer Partition](src/algorithms/math/integer-partition) - * `A` [Mảng con lớn nhất](src/algorithms/sets/maximum-subarray) - * `A` [Thuật toán Bellman-Ford](src/algorithms/graph/bellman-ford) - tìm những đường ngắn nhất từ một đỉnh tới tất cả các đỉnh của đồ thị - * `A` [Thuật toán Floyd-Warshall](src/algorithms/graph/floyd-warshall) - tìm những đường ngắn nhất giữa tất cả các cặp đỉnh - * `A` [Phối biểu thức chính quy](src/algorithms/string/regular-expression-matching) -* **Quay lui** - tương tự như vét cạn, cố tạo ra tất cả các giải pháp có thể, nhưng mỗi lần bạn tạo ra giải pháp tiếp theo, -bạn sẽ kiểm tra xem nó có thỏa mãn tất cả các điều kiện hay không và chỉ khi thỏa mãn mới tiếp tục tạo ra các giải pháp tiếp theo. -Nếu không, hãy quay lại và đi trên một con đường khác để tìm ra giải pháp. Thông thường, truyền DFS của không gian trạng thái được sử dụng. - * `B` [Trò chơi nhảy](src/algorithms/uncategorized/jump-game) - * `B` [Đường đi độc nhất](src/algorithms/uncategorized/unique-paths) - * `B` [Tập lũy thừa](src/algorithms/sets/power-set) - tập hợp chứa tất cả các tập con - * `A` [Chu trình Hamilton](src/algorithms/graph/hamiltonian-cycle) - đi qua các đỉnh một lần duy nhất - * `A` [Bài toán n quân hậu](src/algorithms/uncategorized/n-queens) - * `A` [Mã đi tuần](src/algorithms/uncategorized/knight-tour) - * `A` [Tổ hợp của tổng](src/algorithms/sets/combination-sum) - tìm tất cả các tổ hợp tạo thành tổng cụ thể -* **Branch & Bound** - ghi nhớ giải pháp chi với phí thấp nhất được tìm thấy ở mỗi giai đoạn của quá trình tìm kiếm quay lui, -sử dụng chi phí của giải pháp có chi phí thấp nhất được tìm thấy cho đến nay như một giới hạn dưới về chi phí của -một giải pháp ít chi phí nhân cho bài toán, để loại bỏ các giải pháp từng phần với chi phí lớn hơn giải pháp chi phí thấp nhất được tìm thấy cho đến nay. -Thông thường BFS duyệt kết hợp với duyệt DFS của cây không gian trạng thái đang được sử dụng. - -## Hướng dẫn sử dụng repository - -**Cài đặt tất cả các phụ thuộc** -``` -npm install -``` - -**Chạy ESLint** - -Bạn có thể muốn chạy nó để kiểm tra chất lượng code. - -``` -npm run lint -``` - -**Chạy tất cả các kiểm thử** -``` -npm test -``` - -**Chạy kiểm thử theo tên** -``` -npm test -- 'LinkedList' -``` - -**Sân chơi** - -Bạn có thể chơi với các cấu trúc dữ liệu và thuật toán trong tệp `./src/playground/playground.js` -và viết các bài kiểm thử cho nó ở `./src/playground/__test__/playground.test.js`. - -Sau đó, chỉ cần chạy lệnh sau để kiểm tra xem sân chơi của bạn có hoạt động như mong đợi hay không: - -``` -npm test -- 'playground' -``` - -## Thông tin hữu ích - -### Tham khảo - -[▶ Data Structures and Algorithms on YouTube](https://www.youtube.com/playlist?list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) - -### Kí hiệu O lớn - -*Kí hiệu O lớn* được dùng để phân loại thuật toán theo thời gian chạy hoặc yêu cầu không gian gia tăng khi kích thước đầu vào gia tăng. -Trên biểu đồ bên dưới, bạn có thể tìm thấy hầu hết các thứ tự tăng trưởng phổ biến của các thuật toán được chỉ định trong ký hiệu O lớn. - -![Đồ thị O lớn](./assets/big-o-graph.png) - -Nguồn: [Big O Cheat Sheet](http://bigocheatsheet.com/). - -Dưới đây là danh sách một số ký hiệu O lớn thông dụng và so sánh với các kích thước khác nhau của dữ liệu đầu vào. - -| Kí hiệu O lớn | Tính toán cho 10 phần tử | Tính toán cho 100 phần tử | Tính toán cho 1000 phần tử | -| -------------- | ---------------------------- | ----------------------------- | ------------------------------- | -| **O(1)** | 1 | 1 | 1 | -| **O(log N)** | 3 | 6 | 9 | -| **O(N)** | 10 | 100 | 1000 | -| **O(N log N)** | 30 | 600 | 9000 | -| **O(N^2)** | 100 | 10000 | 1000000 | -| **O(2^N)** | 1024 | 1.26e+29 | 1.07e+301 | -| **O(N!)** | 3628800 | 9.3e+157 | 4.02e+2567 | - -### Độ phức tạp của các phép toán cấu trúc dữ liệu - -| Cấu trúc dữ liệu | Truy cập | Tìm kiếm | Chèn | Xóa | Bình luận | -| ----------------------- | :-------: | :-------: | :-------: | :-------: | :-------- | -| **Mảng** | 1 | n | n | n | | -| **Ngăn xếp** | n | n | 1 | 1 | | -| **Hàng đợi** | n | n | 1 | 1 | | -| **Danh sách liên kết** | n | n | 1 | n | | -| **Bảng băm** | - | n | n | n | Trong trường hợp hàm băm hoàn hảo, chi phí sẽ là O(1) | -| **Cây tìm kiếm nhị phân** | n | n | n | n | Trong trường hợp cây cân bằng, chi phí sẽ là O(log(n)) | -| **Cây B** | log(n) | log(n) | log(n) | log(n) | | -| **Cây đỏ đen** | log(n) | log(n) | log(n) | log(n) | | -| **Cây AVL** | log(n) | log(n) | log(n) | log(n) | | -| **Bộ lọc Bloom** | - | 1 | 1 | - | Có thể có kết quả dương tính giả trong khi tìm kiếm | - -### Độ phức tạp của các thuật toán sắp xếp mảng - -| Tên | Tốt nhất | Trung bình | Tệ nhất | Bộ nhớ | Ổn định | Bình luận | -| --------------------- | :-------------: | :-----------------: | :-----------------: | :-------: | :-------: | :-------- | -| **Sắp xếp nổi bọt** | n | n2 | n2 | 1 | Có | | -| **Sắp xếp chèn** | n | n2 | n2 | 1 | Có | | -| **Sắp xếp chọn** | n2 | n2 | n2 | 1 | Không | | -| **Sắp xếp vun đống** | n log(n) | n log(n) | n log(n) | 1 | Không | | -| **Sắp xếp trộn** | n log(n) | n log(n) | n log(n) | n | Có | | -| **Sắp xếp nhanh** | n log(n) | n log(n) | n2 | log(n) | Không | Sắp xếp nhanh thường được thực hiện tại chỗ với không gian ngăn xếp O (log (n)) | -| **Shell sort** | n log(n) | phụ thuộc vào khoảng cách dãy | n (log(n))2 | 1 | Không | | -| **Sắp xếp đếm** | n + r | n + r | n + r | n + r | Có | r - số lớn nhất trong mảng | -| **Sắp xếp theo cơ số** | n * k | n * k | n * k | n + k | Có | k - độ dài của khóa dài nhất | - -## Project Backers - -> Bạn có thể hỗ trợ dự án này qua ❤️️ [GitHub](https://github.com/sponsors/trekhleb) hoặc ❤️️ [Patreon](https://www.patreon.com/trekhleb). - -[Những người đang ủng hộ dự án này](https://github.com/trekhleb/javascript-algorithms/blob/master/BACKERS.md) `∑ = 0` diff --git a/README.zh-CN.md b/README.zh-CN.md deleted file mode 100644 index 14e0f0e36c..0000000000 --- a/README.zh-CN.md +++ /dev/null @@ -1,299 +0,0 @@ -# JavaScript 算法与数据结构 - -[![CI](https://github.com/trekhleb/javascript-algorithms/workflows/CI/badge.svg)](https://github.com/trekhleb/javascript-algorithms/actions?query=workflow%3ACI+branch%3Amaster) -[![codecov](https://codecov.io/gh/trekhleb/javascript-algorithms/branch/master/graph/badge.svg)](https://codecov.io/gh/trekhleb/javascript-algorithms) - -本仓库包含了多种基于 JavaScript 的算法与数据结构。 - -每种算法和数据结构都有自己的 README,包含相关说明和链接,以便进一步阅读 (还有 YouTube 视频) 。 - -_Read this in other languages:_ -[_English_](https://github.com/trekhleb/javascript-algorithms/), -[_繁體中文_](README.zh-TW.md), -[_한국어_](README.ko-KR.md), -[_日本語_](README.ja-JP.md), -[_Polski_](README.pl-PL.md), -[_Français_](README.fr-FR.md), -[_Español_](README.es-ES.md), -[_Português_](README.pt-BR.md), -[_Русский_](README.ru-RU.md), -[_Türk_](README.tr-TR.md), -[_Italiana_](README.it-IT.md), -[_Bahasa Indonesia_](README.id-ID.md), -[_Українська_](README.uk-UA.md), -[_Arabic_](README.ar-AR.md), -[_Tiếng Việt_](README.vi-VN.md), -[_Deutsch_](README.de-DE.md), -[_Uzbek_](README.uz-UZ.md) -[_עברית_](README.he-IL.md) - -*注意:这个项目仅用于学习和研究,**不是**用于生产环境。* - -## 数据结构 - -数据结构是在计算机中组织和存储数据的一种特殊方式,使得数据可以高效地被访问和修改。更确切地说,数据结构是数据值的集合,表示数据之间的关系,也包括了作用在数据上的函数或操作。 - -`B` - 初学者, `A` - 进阶 - -* `B` [链表](src/data-structures/linked-list/README.zh-CN.md) -* `B` [双向链表](src/data-structures/doubly-linked-list/README.zh-CN.md) -* `B` [队列](src/data-structures/queue/README.zh-CN.md) -* `B` [栈](src/data-structures/stack/README.zh-CN.md) -* `B` [哈希表(散列)](src/data-structures/hash-table/README.zh-CN.md) -* `B` [堆](src/data-structures/heap/README.zh-CN.md) - 最大堆 & 最小堆 -* `B` [优先队列](src/data-structures/priority-queue/README.zh-CN.md) -* `A` [字典树](src/data-structures/trie/README.zh-CN.md) -* `A` [树](src/data-structures/tree/README.zh-CN.md) - * `A` [二叉查找树](src/data-structures/tree/binary-search-tree) - * `A` [AVL 树](src/data-structures/tree/avl-tree) - * `A` [红黑树](src/data-structures/tree/red-black-tree) - * `A` [线段树](src/data-structures/tree/segment-tree) - 使用 `最小/最大/总和` 范围查询示例 - * `A` [树状数组](src/data-structures/tree/fenwick-tree) (二叉索引树) -* `A` [图](src/data-structures/graph/README.zh-CN.md) (有向图与无向图) -* `A` [并查集](src/data-structures/disjoint-set) -* `A` [布隆过滤器](src/data-structures/bloom-filter) - -## 算法 - -算法是如何解决一类问题的明确规范。算法是一组精确定义操作序列的规则。 - -`B` - 初学者, `A` - 进阶 - -### 算法主题 - -* **数学** - * `B` [位运算](src/algorithms/math/bits) - set/get/update/clear 位、乘以/除以二进制位 、变负等 - * `B` [阶乘](src/algorithms/math/factorial/README.zh-CN.md) - * `B` [斐波那契数](src/algorithms/math/fibonacci) - `经典` 和 `闭式` 版本 - * `B` [素数检测](src/algorithms/math/primality-test) (排除法) - * `B` [欧几里得算法](src/algorithms/math/euclidean-algorithm) - 计算最大公约数 (GCD) - * `B` [最小公倍数](src/algorithms/math/least-common-multiple) (LCM) - * `B` [素数筛](src/algorithms/math/sieve-of-eratosthenes) - 查找任意给定范围内的所有素数 - * `B` [判断 2 次方数](src/algorithms/math/is-power-of-two) - 检查数字是否为 2 的幂 (原生和按位算法) - * `B` [杨辉三角形](src/algorithms/math/pascal-triangle) - * `B` [复数](src/algorithms/math/complex-number) - 复数及其基本运算 - * `B` [弧度和角](src/algorithms/math/radian) - 弧度与角的相互转换 - * `B` [快速算次方](src/algorithms/math/fast-powering) - * `A` [整数拆分](src/algorithms/math/integer-partition) - * `A` [割圆术](src/algorithms/math/liu-hui) - 基于 N-gons 的近似 π 计算 - * `A` [离散傅里叶变换](src/algorithms/math/fourier-transform) - 把时间信号解析成构成它的频率 -* **集合** - * `B` [笛卡尔积](src/algorithms/sets/cartesian-product) - 多集合结果 - * `A` [洗牌算法](src/algorithms/sets/fisher-yates) - 随机置换有限序列 - * `A` [幂集](src/algorithms/sets/power-set) - 该集合的所有子集 - * `A` [排列](src/algorithms/sets/permutations) (有/无重复) - * `A` [组合](src/algorithms/sets/combinations) (有/无重复) - * `A` [最长公共子序列](src/algorithms/sets/longest-common-subsequence) (LCS) - * `A` [最长递增子序列](src/algorithms/sets/longest-increasing-subsequence) - * `A` [最短公共父序列](src/algorithms/sets/shortest-common-supersequence) (SCS) - * `A` [背包问题](src/algorithms/sets/knapsack-problem) - `0/1` 和 `无边界` 问题 - * `A` [最大子数列问题](src/algorithms/sets/maximum-subarray) - `BF 算法` 和 `动态规划` - * `A` [组合求和](src/algorithms/sets/combination-sum) - 查找形成特定总和的所有组合 -* **字符串** - * `B` [汉明距离](src/algorithms/string/hamming-distance) - 符号不同的位置数 - * `A` [莱温斯坦距离](src/algorithms/string/levenshtein-distance) - 两个序列之间的最小编辑距离 - * `A` [Knuth–Morris–Pratt 算法](src/algorithms/string/knuth-morris-pratt) KMP 算法 - 子串搜索 (模式匹配) - * `A` [字符串快速查找](src/algorithms/string/z-algorithm) - 子串搜索 (模式匹配) - * `A` [Rabin Karp 算法](src/algorithms/string/rabin-karp) - 子串搜索 - * `A` [最长公共子串](src/algorithms/string/longest-common-substring) - * `A` [正则表达式匹配](src/algorithms/string/regular-expression-matching) -* **搜索** - * `B` [线性搜索](src/algorithms/search/linear-search) - * `B` [跳转搜索/块搜索](src/algorithms/search/jump-search) - 搜索有序数组 - * `B` [二分查找](src/algorithms/search/binary-search) - 搜索有序数组 - * `B` [插值搜索](src/algorithms/search/interpolation-search) - 搜索均匀分布的有序数组 -* **排序** - * `B` [冒泡排序](src/algorithms/sorting/bubble-sort) - * `B` [选择排序](src/algorithms/sorting/selection-sort) - * `B` [插入排序](src/algorithms/sorting/insertion-sort) - * `B` [堆排序](src/algorithms/sorting/heap-sort) - * `B` [归并排序](src/algorithms/sorting/merge-sort) - * `B` [快速排序](src/algorithms/sorting/quick-sort) - in-place (原地) 和 non-in-place 版本 - * `B` [希尔排序](src/algorithms/sorting/shell-sort) - * `B` [计数排序](src/algorithms/sorting/counting-sort) - * `B` [基数排序](src/algorithms/sorting/radix-sort) -* **链表** - - `B` [正向遍历](src/algorithms/linked-list/traversal) - - `B` [反向遍历](src/algorithms/linked-list/reverse-traversal) -* **树** - * `B` [深度优先搜索](src/algorithms/tree/depth-first-search) (DFS) - * `B` [广度优先搜索](src/algorithms/tree/breadth-first-search) (BFS) -* **图** - * `B` [深度优先搜索](src/algorithms/graph/depth-first-search) (DFS) - * `B` [广度优先搜索](src/algorithms/graph/breadth-first-search) (BFS) - * `B` [克鲁斯克尔演算法](src/algorithms/graph/kruskal) - 寻找加权无向图的最小生成树 (MST) - * `A` [戴克斯特拉算法](src/algorithms/graph/dijkstra) - 找到图中所有顶点的最短路径 - * `A` [贝尔曼-福特算法](src/algorithms/graph/bellman-ford) - 找到图中所有顶点的最短路径 - * `A` [弗洛伊德算法](src/algorithms/graph/floyd-warshall) - 找到所有顶点对 之间的最短路径 - * `A` [判圈算法](src/algorithms/graph/detect-cycle) - 对于有向图和无向图 (基于 DFS 和不相交集的版本) - * `A` [普林演算法](src/algorithms/graph/prim) - 寻找加权无向图的最小生成树 (MST) - * `A` [拓扑排序](src/algorithms/graph/topological-sorting) - DFS 方法 - * `A` [关节点](src/algorithms/graph/articulation-points) - Tarjan 算法 (基于 DFS) - * `A` [桥](src/algorithms/graph/bridges) - 基于 DFS 的算法 - * `A` [欧拉回径与一笔画问题](src/algorithms/graph/eulerian-path) - Fleury 的算法 - 一次访问每个边 - * `A` [哈密顿图](src/algorithms/graph/hamiltonian-cycle) - 恰好访问每个顶点一次 - * `A` [强连通分量](src/algorithms/graph/strongly-connected-components) - Kosaraju 算法 - * `A` [旅行推销员问题](src/algorithms/graph/travelling-salesman) - 尽可能以最短的路线访问每个城市并返回原始城市 -* **加密** - * `B` [多项式 hash](src/algorithms/cryptography/polynomial-hash) - 基于多项式的 rolling hash 函数 -* **机器学习** - * `B` [NanoNeuron](https://github.com/trekhleb/nano-neuron) -7个简单的JS函数,说明机器如何实际学习(向前/向后传播) -* **未分类** - * `B` [汉诺塔](src/algorithms/uncategorized/hanoi-tower) - * `B` [旋转矩阵](src/algorithms/uncategorized/square-matrix-rotation) - 原地算法 - * `B` [跳跃游戏](src/algorithms/uncategorized/jump-game) - 回溯,、动态编程 (自上而下+自下而上) 和贪婪的例子 - * `B` [独特(唯一) 路径](src/algorithms/uncategorized/unique-paths) - 回溯、动态编程和基于 Pascal 三角形的例子 - * `B` [雨水收集](src/algorithms/uncategorized/rain-terraces) - 诱捕雨水问题 (动态编程和暴力版本) - * `B` [递归楼梯](src/algorithms/uncategorized/recursive-staircase) - 计算有共有多少种方法可以到达顶层 (4 种解题方案) - * `A` [八皇后问题](src/algorithms/uncategorized/n-queens) - * `A` [骑士巡逻](src/algorithms/uncategorized/knight-tour) - -### 算法范式 - -算法范式是一种通用方法,基于一类算法的设计。这是比算法更高的抽象,就像算法是比计算机程序更高的抽象。 - -* **BF 算法** - `查找/搜索` 所有可能性并选择最佳解决方案 - * `B` [线性搜索](src/algorithms/search/linear-search) - * `B` [雨水收集](src/algorithms/uncategorized/rain-terraces) - 诱导雨水问题 - * `B` [递归楼梯](src/algorithms/uncategorized/recursive-staircase) - 计算有共有多少种方法可以到达顶层 (4 种解题方案) - * `A` [最大子数列](src/algorithms/sets/maximum-subarray) - * `A` [旅行推销员问题](src/algorithms/graph/travelling-salesman) - 尽可能以最短的路线访问每个城市并返回原始城市 - * `A` [离散傅里叶变换](src/algorithms/math/fourier-transform) - 把时间信号解析成构成它的频率 -* **贪心法** - 在当前选择最佳选项,不考虑以后情况 - * `B` [跳跃游戏](src/algorithms/uncategorized/jump-game) - * `A` [背包问题](src/algorithms/sets/knapsack-problem) - * `A` [戴克斯特拉算法](src/algorithms/graph/dijkstra) - 找到所有图顶点的最短路径 - * `A` [普里姆算法](src/algorithms/graph/prim) - 寻找加权无向图的最小生成树 (MST) - * `A` [克鲁斯卡尔算法](src/algorithms/graph/kruskal) - 寻找加权无向图的最小生成树 (MST) -* **分治法** - 将问题分成较小的部分,然后解决这些部分 - * `B` [二分查找](src/algorithms/search/binary-search) - * `B` [汉诺塔](src/algorithms/uncategorized/hanoi-tower) - * `B` [杨辉三角形](src/algorithms/math/pascal-triangle) - * `B` [欧几里得算法](src/algorithms/math/euclidean-algorithm) - 计算最大公约数 (GCD) - * `B` [归并排序](src/algorithms/sorting/merge-sort) - * `B` [快速排序](src/algorithms/sorting/quick-sort) - * `B` [树深度优先搜索](src/algorithms/tree/depth-first-search) (DFS) - * `B` [图深度优先搜索](src/algorithms/graph/depth-first-search) (DFS) - * `B` [跳跃游戏](src/algorithms/uncategorized/jump-game) - * `B` [快速算次方](src/algorithms/math/fast-powering) - * `A` [排列](src/algorithms/sets/permutations) (有/无重复) - * `A` [组合](src/algorithms/sets/combinations) (有/无重复) -* **动态规划(Dynamic programming)** - 使用以前找到的子解决方案构建解决方案 - * `B` [斐波那契数](src/algorithms/math/fibonacci) - * `B` [跳跃游戏](src/algorithms/uncategorized/jump-game) - * `B` [独特路径](src/algorithms/uncategorized/unique-paths) - * `B` [雨水收集](src/algorithms/uncategorized/rain-terraces) - 疏导雨水问题 - * `B` [递归楼梯](src/algorithms/uncategorized/recursive-staircase) - 计算有共有多少种方法可以到达顶层 (4 种解题方案) - * `A` [莱温斯坦距离](src/algorithms/string/levenshtein-distance) - 两个序列之间的最小编辑距离 - * `A` [最长公共子序列](src/algorithms/sets/longest-common-subsequence) (LCS) - * `A` [最长公共子串](src/algorithms/string/longest-common-substring) - * `A` [最长递增子序列](src/algorithms/sets/longest-increasing-subsequence) - * `A` [最短公共子序列](src/algorithms/sets/shortest-common-supersequence) - * `A` [0-1背包问题](src/algorithms/sets/knapsack-problem) - * `A` [整数拆分](src/algorithms/math/integer-partition) - * `A` [最大子数列](src/algorithms/sets/maximum-subarray) - * `A` [贝尔曼-福特算法](src/algorithms/graph/bellman-ford) - 找到所有图顶点的最短路径 - * `A` [弗洛伊德算法](src/algorithms/graph/floyd-warshall) - 找到所有顶点对之间的最短路径 - * `A` [正则表达式匹配](src/algorithms/string/regular-expression-matching) -* **回溯法** - 类似于 `BF 算法` 试图产生所有可能的解决方案,但每次生成解决方案测试如果它满足所有条件,那么只有继续生成后续解决方案。否则回溯并继续寻找不同路径的解决方案。 - * `B` [跳跃游戏](src/algorithms/uncategorized/jump-game) - * `B` [独特路径](src/algorithms/uncategorized/unique-paths) - * `A` [幂集](src/algorithms/sets/power-set) - 该集合的所有子集 - * `A` [哈密顿图](src/algorithms/graph/hamiltonian-cycle) - 恰好访问每个顶点一次 - * `A` [八皇后问题](src/algorithms/uncategorized/n-queens) - * `A` [骑士巡逻](src/algorithms/uncategorized/knight-tour) - * `A` [组合求和](src/algorithms/sets/combination-sum) - 从规定的总和中找出所有的组合 -* **Branch & Bound** - 记住在回溯搜索的每个阶段找到的成本最低的解决方案,并使用到目前为止找到的成本最小值作为下限。以便丢弃成本大于最小值的解决方案。通常,使用 BFS 遍历以及状态空间树的 DFS 遍历。 - -## 如何使用本仓库 - -**安装依赖** -``` -npm install -``` - -**运行 ESLint** - -检查代码质量 - -``` -npm run lint -``` - -**执行测试** - -``` -npm test -``` - -**按照名称执行测试** -``` -npm test -- 'LinkedList' -``` - -**Playground** - -你可以在 `./src/playground/playground.js` 文件中操作数据结构与算法,并在 `./src/playground/__test__/playground.test.js` 中编写测试。 - -然后,只需运行以下命令来测试你的 Playground 是否无误: - -``` -npm test -- 'playground' -``` - -## 有用的信息 - -### 引用 - -[▶ YouTube](https://www.youtube.com/playlist?list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) - -### 大O符号 - -大O符号中指定的算法的增长顺序。 - -![Big O graphs](./assets/big-o-graph.png) - -源: [Big O Cheat Sheet](http://bigocheatsheet.com/). - -以下是一些最常用的 大O标记法 列表以及它们与不同大小输入数据的性能比较。 - -| 大O标记法 | 计算10个元素 | 计算100个元素 | 计算1000个元素 | -| -------------- | ---------------------------- | ----------------------------- | ------------------------------- | -| **O(1)** | 1 | 1 | 1 | -| **O(log N)** | 3 | 6 | 9 | -| **O(N)** | 10 | 100 | 1000 | -| **O(N log N)** | 30 | 600 | 9000 | -| **O(N^2)** | 100 | 10000 | 1000000 | -| **O(2^N)** | 1024 | 1.26e+29 | 1.07e+301 | -| **O(N!)** | 3628800 | 9.3e+157 | 4.02e+2567 | - -### 数据结构操作的复杂性 - -| 数据结构 | 连接 | 查找 | 插入 | 删除 | 备注 | -| -------------- | :----: | :----: | :----: | :----: | ---- | -| **数组** | 1 | n | n | n | | -| **栈** | n | n | 1 | 1 | | -| **队列** | n | n | 1 | 1 | | -| **链表** | n | n | 1 | 1 | | -| **哈希表** | - | n | n | n | 在完全哈希函数情况下,复杂度是 O(1) | -| **二分查找树** | n | n | n | n | 在平衡树情况下,复杂度是 O(log(n)) | -| **B 树** | log(n) | log(n) | log(n) | log(n) | | -| **红黑树** | log(n) | log(n) | log(n) | log(n) | | -| **AVL 树** | log(n) | log(n) | log(n) | log(n) | | -| **布隆过滤器** | - | 1 | 1 | - | 存在一定概率的判断错误(误判成存在) | - -### 数组排序算法的复杂性 - -| 名称 | 最优 | 平均 | 最坏 | 内存 | 稳定 | 备注 | -| --------------------- | :-------: | :-------: | :-----------: | :-------: | :-------: | --------------------- | -| **冒泡排序** | n | n^2 | n^2 | 1 | Yes | | -| **插入排序** | n | n^2 | n^2 | 1 | Yes | | -| **选择排序** | n^2 | n^2 | n^2 | 1 | No | | -| **堆排序** | n log(n) | n log(n) | n log(n) | 1 | No | | -| **归并排序** | n log(n) | n log(n) | n log(n) | n | Yes | | -| **快速排序** | n log(n) | n log(n) | n^2 | log(n) | No | 在 in-place 版本下,内存复杂度通常是 O(log(n)) | -| **希尔排序** | n log(n) | 取决于差距序列 | n (log(n))^2 | 1 | No | | -| **计数排序** | n + r | n + r | n + r | n + r | Yes | r - 数组里最大的数 | -| **基数排序** | n * k | n * k | n * k | n + k | Yes | k - 最长 key 的升序 | - -> ℹ️ A few more [projects](https://trekhleb.dev/projects/) and [articles](https://trekhleb.dev/blog/) about JavaScript and algorithms on [trekhleb.dev](https://trekhleb.dev) diff --git a/README.zh-TW.md b/README.zh-TW.md deleted file mode 100644 index aa48b40bd8..0000000000 --- a/README.zh-TW.md +++ /dev/null @@ -1,229 +0,0 @@ -# JavaScript 演算法與資料結構 - -[![CI](https://github.com/trekhleb/javascript-algorithms/workflows/CI/badge.svg)](https://github.com/trekhleb/javascript-algorithms/actions?query=workflow%3ACI+branch%3Amaster) -[![codecov](https://codecov.io/gh/trekhleb/javascript-algorithms/branch/master/graph/badge.svg)](https://codecov.io/gh/trekhleb/javascript-algorithms) - -這個知識庫包含許多 JavaScript 的資料結構與演算法的基礎範例。 -每個演算法和資料結構都有其個別的文件,內有相關的解釋以及更多相關的文章或Youtube影片連結。 - -_Read this in other languages:_ -[_English_](https://github.com/trekhleb/javascript-algorithms/), -[_简体中文_](README.zh-CN.md), -[_한국어_](README.ko-KR.md), -[_日本語_](README.ja-JP.md), -[_Polski_](README.pl-PL.md), -[_Français_](README.fr-FR.md), -[_Español_](README.es-ES.md), -[_Português_](README.pt-BR.md), -[_Русский_](README.ru-RU.md), -[_Türk_](README.tr-TR.md), -[_Italiana_](README.it-IT.md), -[_Bahasa Indonesia_](README.id-ID.md), -[_Українська_](README.uk-UA.md), -[_Arabic_](README.ar-AR.md), -[_Tiếng Việt_](README.vi-VN.md), -[_Deutsch_](README.de-DE.md), -[_Uzbek_](README.uz-UZ.md) -[_עברית_](README.he-IL.md) - -## 資料結構 - -資料結構是一個電腦用來組織和排序資料的特定方式,透過這樣的方式資料可以有效率地被讀取以及修改。更精確地說,一個資料結構是一個資料值的集合、彼此間的關係,函數或者運作可以應用於資料上。 - -* [鏈結串列](src/data-structures/linked-list) -* [貯列](src/data-structures/queue) -* [堆疊](src/data-structures/stack) -* [雜湊表](src/data-structures/hash-table) -* [堆](src/data-structures/heap) -* [優先貯列](src/data-structures/priority-queue) -* [字典樹](src/data-structures/trie) -* [樹](src/data-structures/tree) - * [二元搜尋樹](src/data-structures/tree/binary-search-tree) - * [AVL樹](src/data-structures/tree/avl-tree) - * [紅黑樹](src/data-structures/tree/red-black-tree) -* [圖](src/data-structures/graph) (有向跟無向皆包含) -* [互斥集](src/data-structures/disjoint-set) - -## 演算法 - -演算法是一個如何解決一類問題的非模糊規格。演算法是一個具有精確地定義了一系列運作的規則的集合 - -### 演算法議題分類 - -* **數學類** - * [階層](src/algorithms/math/factorial) - * [費伯納西數列](src/algorithms/math/fibonacci) - * [Primality Test](src/algorithms/math/primality-test) (排除法) - * [歐幾里得算法](src/algorithms/math/euclidean-algorithm) - 計算最大公因數 (GCD) - * [最小公倍數](src/algorithms/math/least-common-multiple) (LCM) - * [整數拆分](src/algorithms/math/integer-partition) -* **集合** - * [笛卡爾積](src/algorithms/sets/cartesian-product) - 多個集合的乘積 - * [冪集合](src/algorithms/sets/power-set) - 所有集合的子集合 - * [排列](src/algorithms/sets/permutations) (有/無重複) - * [组合](src/algorithms/sets/combinations) (有/無重複) - * [洗牌算法](src/algorithms/sets/fisher-yates) - 隨機置換一有限序列 - * [最長共同子序列](src/algorithms/sets/longest-common-subsequence) (LCS) - * [最長遞增子序列](src/algorithms/sets/longest-increasing-subsequence) - * [Shortest Common Supersequence](src/algorithms/sets/shortest-common-supersequence) (SCS) - * [背包問題](src/algorithms/sets/knapsack-problem) - "0/1" and "Unbound" ones - * [最大子序列問題](src/algorithms/sets/maximum-subarray) - 暴力法以及動態編程的(Kadane's)版本 -* **字串** - * [萊文斯坦距離](src/algorithms/string/levenshtein-distance) - 兩序列間的最小編輯距離 - * [漢明距離](src/algorithms/string/hamming-distance) - number of positions at which the symbols are different - * [KMP 演算法](src/algorithms/string/knuth-morris-pratt) - 子字串搜尋 - * [Rabin Karp 演算法](src/algorithms/string/rabin-karp) - 子字串搜尋 - * [最長共通子序列](src/algorithms/string/longest-common-substring) -* **搜尋** - * [二元搜尋](src/algorithms/search/binary-search) -* **排序** - * [氣泡排序](src/algorithms/sorting/bubble-sort) - * [選擇排序](src/algorithms/sorting/selection-sort) - * [插入排序](src/algorithms/sorting/insertion-sort) - * [堆排序](src/algorithms/sorting/heap-sort) - * [合併排序](src/algorithms/sorting/merge-sort) - * [快速排序](src/algorithms/sorting/quick-sort) - * [希爾排序](src/algorithms/sorting/shell-sort) -* **樹** - * [深度優先搜尋](src/algorithms/tree/depth-first-search) (DFS) - * [廣度優先搜尋](src/algorithms/tree/breadth-first-search) (BFS) -* **圖** - * [深度優先搜尋](src/algorithms/graph/depth-first-search) (DFS) - * [廣度優先搜尋](src/algorithms/graph/breadth-first-search) (BFS) - * [Dijkstra 演算法](src/algorithms/graph/dijkstra) - 找到所有圖頂點的最短路徑 - * [Bellman-Ford 演算法](src/algorithms/graph/bellman-ford) - 找到所有圖頂點的最短路徑 - * [Detect Cycle](src/algorithms/graph/detect-cycle) - for both directed and undirected graphs (DFS and Disjoint Set based versions) - * [Prim’s 演算法](src/algorithms/graph/prim) - finding Minimum Spanning Tree (MST) for weighted undirected graph - * [Kruskal’s 演算法](src/algorithms/graph/kruskal) - finding Minimum Spanning Tree (MST) for weighted undirected graph - * [拓撲排序](src/algorithms/graph/topological-sorting) - DFS method - * [關節點](src/algorithms/graph/articulation-points) - Tarjan's algorithm (DFS based) - * [橋](src/algorithms/graph/bridges) - DFS based algorithm - * [尤拉路徑及尤拉環](src/algorithms/graph/eulerian-path) - Fleury's algorithm - Visit every edge exactly once - * [漢彌爾頓環](src/algorithms/graph/hamiltonian-cycle) - Visit every vertex exactly once - * [強連通組件](src/algorithms/graph/strongly-connected-components) - Kosaraju's algorithm - * [旅行推銷員問題](src/algorithms/graph/travelling-salesman) - shortest possible route that visits each city and returns to the origin city - * [Floyd-Warshall algorithm](src/algorithms/graph/floyd-warshall) - 一次循环可以找出所有頂點之间的最短路徑 -* **未分類** - * [河內塔](src/algorithms/uncategorized/hanoi-tower) - * [N-皇后問題](src/algorithms/uncategorized/n-queens) - * [騎士走棋盤](src/algorithms/uncategorized/knight-tour) - -### 演算法範型 - -演算法的範型是一個泛用方法或設計一類底層演算法的方式。它是一個比演算法的概念更高階的抽象化,就像是演算法是比電腦程式更高階的抽象化。 - -* **暴力法** - 尋遍所有的可能解然後選取最好的解 - * [最大子序列](src/algorithms/sets/maximum-subarray) - * [旅行推銷員問題](src/algorithms/graph/travelling-salesman) - shortest possible route that visits each city and returns to the origin city -* **貪婪法** - choose the best option at the current time, without any consideration for the future - * [未定背包問題](src/algorithms/sets/knapsack-problem) - * [Dijkstra 演算法](src/algorithms/graph/dijkstra) - 找到所有圖頂點的最短路徑 - * [Prim’s 演算法](src/algorithms/graph/prim) - finding Minimum Spanning Tree (MST) for weighted undirected graph - * [Kruskal’s 演算法](src/algorithms/graph/kruskal) - finding Minimum Spanning Tree (MST) for weighted undirected graph -* **分治法** - divide the problem into smaller parts and then solve those parts - * [二元搜尋](src/algorithms/search/binary-search) - * [河內塔](src/algorithms/uncategorized/hanoi-tower) - * [歐幾里得演算法](src/algorithms/math/euclidean-algorithm) - calculate the Greatest Common Divisor (GCD) - * [排列](src/algorithms/sets/permutations) (有/無重複) - * [组合](src/algorithms/sets/combinations) (有/無重複) - * [合併排序](src/algorithms/sorting/merge-sort) - * [快速排序](src/algorithms/sorting/quick-sort) - * [樹深度優先搜尋](src/algorithms/tree/depth-first-search) (DFS) - * [圖深度優先搜尋](src/algorithms/graph/depth-first-search) (DFS) -* **動態編程** - build up to a solution using previously found sub-solutions - * [費伯納西數列](src/algorithms/math/fibonacci) - * [萊溫斯坦距離](src/algorithms/string/levenshtein-distance) - minimum edit distance between two sequences - * [最長共同子序列](src/algorithms/sets/longest-common-subsequence) (LCS) - * [最長共同子字串](src/algorithms/string/longest-common-substring) - * [最長遞增子序列](src/algorithms/sets/longest-increasing-subsequence) - * [最短共同子序列](src/algorithms/sets/shortest-common-supersequence) - * [0/1背包問題](src/algorithms/sets/knapsack-problem) - * [整數拆分](src/algorithms/math/integer-partition) - * [最大子序列](src/algorithms/sets/maximum-subarray) - * [Bellman-Ford 演算法](src/algorithms/graph/bellman-ford) - finding shortest path to all graph vertices -* **回溯法** - 用類似暴力法來嘗試產生所有可能解,但每次只在能滿足所有測試條件,且只有繼續產生子序列方案來產生的解決方案。否則回溯並尋找不同路徑的解決方案。 - * [漢彌爾頓迴路](src/algorithms/graph/hamiltonian-cycle) - Visit every vertex exactly once - * [N-皇后問題](src/algorithms/uncategorized/n-queens) - * [騎士走棋盤](src/algorithms/uncategorized/knight-tour) -* **Branch & Bound** - -## 如何使用本知識庫 - -**安裝所有必須套件** - -``` -npm install -``` - -**執行所有測試** -``` -npm test -``` - -**以名稱執行該測試** -``` -npm test -- 'LinkedList' -``` -**練習場** - -你可以透過在`./src/playground/playground.js`裡面的檔案練習資料結構以及演算法,並且撰寫在`./src/playground/__test__/playground.test.js`裡面的測試程式。 - -接著直接執行下列的指令來測試你練習的 code 是否如預期運作: - -``` -npm test -- 'playground' -``` - -## 有用的資訊 - -### 參考 - -[▶ Data Structures and Algorithms on YouTube](https://www.youtube.com/playlist?list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) - -### 大 O 標記 - -特別用大 O 標記演算法增長度的排序。 - -![Big O 表](./assets/big-o-graph.png) - -資料來源: [Big O Cheat Sheet](http://bigocheatsheet.com/). - -下列列出幾個常用的 Big O 標記以及其不同大小資料量輸入後的運算效能比較。 - -| Big O 標記 | 10個資料量需花費的時間 | 100個資料量需花費的時間 | 1000個資料量需花費的時間 | -| -------------- | ---------------------------- | ----------------------------- | ------------------------------- | -| **O(1)** | 1 | 1 | 1 | -| **O(log N)** | 3 | 6 | 9 | -| **O(N)** | 10 | 100 | 1000 | -| **O(N log N)** | 30 | 600 | 9000 | -| **O(N^2)** | 100 | 10000 | 1000000 | -| **O(2^N)** | 1024 | 1.26e+29 | 1.07e+301 | -| **O(N!)** | 3628800 | 9.3e+157 | 4.02e+2567 | - -### 資料結構運作複雜度 - -| 資料結構 | 存取 | 搜尋 | 插入 | 刪除 | -| ----------------------- | :-------: | :-------: | :-------: | :-------: | -| **陣列** | 1 | n | n | n | -| **堆疊** | n | n | 1 | 1 | -| **貯列** | n | n | 1 | 1 | -| **鏈結串列** | n | n | 1 | 1 | -| **雜湊表** | - | n | n | n | -| **二元搜尋樹** | n | n | n | n | -| **B-Tree** | log(n) | log(n) | log(n) | log(n) | -| **紅黑樹** | log(n) | log(n) | log(n) | log(n) | -| **AVL Tree** | log(n) | log(n) | log(n) | log(n) | - -### 陣列排序演算法複雜度 - -| 名稱 | 最佳 | 平均 | 最差 | 記憶體 | 穩定 | -| ---------------------- | :-------: | :-------: | :-----------: | :-------: | :-------: | -| **氣泡排序** | n | n^2 | n^2 | 1 | Yes | -| **插入排序** | n | n^2 | n^2 | 1 | Yes | -| **選擇排序** | n^2 | n^2 | n^2 | 1 | No | -| **Heap 排序** | n log(n) | n log(n) | n log(n) | 1 | No | -| **合併排序** | n log(n) | n log(n) | n log(n) | n | Yes | -| **快速排序** | n log(n) | n log(n) | n^2 | log(n) | No | -| **希爾排序** | n log(n) | 由gap sequence決定 | n (log(n))^2 | 1 | No | - -> ℹ️ A few more [projects](https://trekhleb.dev/projects/) and [articles](https://trekhleb.dev/blog/) about JavaScript and algorithms on [trekhleb.dev](https://trekhleb.dev) diff --git a/assets/big-o-graph.png b/assets/big-o-graph.png deleted file mode 100644 index 77a39f0816f9f12c23692ba551d4bbb41acb8728..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 61894 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

1fIBG?L6)_=%6EW!g8VY$2eLCdMXVTrdewmP4 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.Mj~0g1(y(ZZ&@ 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/node_modules/'], - - // If the file path matches any of the patterns, coverage information will be skipped. - coveragePathIgnorePatterns: ['/node_modules/'], - - // The pattern Jest uses to detect test files. - testRegex: '(/__tests__/.*|(\\.|/)(test|spec))\\.jsx?$', - - // This option sets the URL for the jsdom environment. - // It is reflected in properties such as location.href. - // @see: https://github.com/facebook/jest/issues/6769 - testEnvironmentOptions: { - url: 'http://localhost/', - }, - - // @see: https://jestjs.io/docs/en/configuration#coveragethreshold-object - coverageThreshold: { - global: { - statements: 100, - branches: 95, - functions: 100, - lines: 100, - }, - }, -}; diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index b61d279d87..0000000000 --- a/package-lock.json +++ /dev/null @@ -1,15788 +0,0 @@ -{ - "name": "javascript-algorithms-and-data-structures", - "version": "0.0.4", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "javascript-algorithms-and-data-structures", - "version": "0.0.4", - "license": "MIT", - "devDependencies": { - "@babel/cli": "7.20.7", - "@babel/preset-env": "7.20.2", - "@types/jest": "29.4.0", - "eslint": "8.33.0", - "eslint-config-airbnb": "19.0.4", - "eslint-plugin-import": "2.27.5", - "eslint-plugin-jest": "27.2.1", - "eslint-plugin-jsx-a11y": "6.7.1", - "husky": "8.0.3", - "jest": "29.4.1", - "pngjs": "^7.0.0" - }, - "engines": { - "node": ">=16.15.0", - "npm": ">=8.5.5" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/cli": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.20.7.tgz", - "integrity": "sha512-WylgcELHB66WwQqItxNILsMlaTd8/SO6SgTTjMp4uCI7P4QyH1r3nqgFmO3BfM4AtfniHgFMH3EpYFj/zynBkQ==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.8", - "commander": "^4.0.1", - "convert-source-map": "^1.1.0", - "fs-readdir-recursive": "^1.1.0", - "glob": "^7.2.0", - "make-dir": "^2.1.0", - "slash": "^2.0.0" - }, - "bin": { - "babel": "bin/babel.js", - "babel-external-helpers": "bin/babel-external-helpers.js" - }, - "engines": { - "node": ">=6.9.0" - }, - "optionalDependencies": { - "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents.3", - "chokidar": "^3.4.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz", - "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.4.tgz", - "integrity": "sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.4.tgz", - "integrity": "sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.21.4", - "@babel/helper-compilation-targets": "^7.21.4", - "@babel/helper-module-transforms": "^7.21.2", - "@babel/helpers": "^7.21.0", - "@babel/parser": "^7.21.4", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.4", - "@babel/types": "^7.21.4", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/generator": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.4.tgz", - "integrity": "sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.21.4", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", - "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", - "dev": true, - "dependencies": { - "@babel/helper-explode-assignable-expression": "^7.18.6", - "@babel/types": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.4.tgz", - "integrity": "sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.21.4", - "@babel/helper-validator-option": "^7.21.0", - "browserslist": "^4.21.3", - "lru-cache": "^5.1.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.4.tgz", - "integrity": "sha512-46QrX2CQlaFRF4TkwfTt6nJD7IHq8539cCL7SDpqWSDeJKY1xylKKY5F/33mJhLZ3mFvKv2gGrVS6NkyF6qs+Q==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-member-expression-to-functions": "^7.21.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.20.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/helper-split-export-declaration": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.21.4.tgz", - "integrity": "sha512-M00OuhU+0GyZ5iBBN9czjugzWrEq2vDpf/zCYHxxf93ul/Q5rv+a5h+/+0WnI1AebHNVtl5bFV0qsJoH23DbfA==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "regexpu-core": "^5.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", - "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0-0" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-explode-assignable-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", - "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", - "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", - "dev": true, - "dependencies": { - "@babel/template": "^7.20.7", - "@babel/types": "^7.21.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.0.tgz", - "integrity": "sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==", - "dev": true, - "dependencies": { - "@babel/types": "^7.21.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz", - "integrity": "sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.21.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.21.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz", - "integrity": "sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.2", - "@babel/types": "^7.21.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", - "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", - "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-wrap-function": "^7.18.9", - "@babel/types": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz", - "integrity": "sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.20.7", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.7", - "@babel/types": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", - "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", - "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.20.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", - "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz", - "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==", - "dev": true, - "dependencies": { - "@babel/helper-function-name": "^7.19.0", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz", - "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==", - "dev": true, - "dependencies": { - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.0", - "@babel/types": "^7.21.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.4.tgz", - "integrity": "sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", - "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz", - "integrity": "sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-proposal-optional-chaining": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", - "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz", - "integrity": "sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.21.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", - "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", - "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-json-strings": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", - "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz", - "integrity": "sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", - "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", - "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", - "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", - "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", - "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0.tgz", - "integrity": "sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.21.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", - "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.21.4.tgz", - "integrity": "sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.21.4.tgz", - "integrity": "sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz", - "integrity": "sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz", - "integrity": "sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", - "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.21.0.tgz", - "integrity": "sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.21.0.tgz", - "integrity": "sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-replace-supers": "^7.20.7", - "@babel/helper-split-export-declaration": "^7.18.6", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz", - "integrity": "sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/template": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.21.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.21.3.tgz", - "integrity": "sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", - "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", - "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", - "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", - "dev": true, - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.0.tgz", - "integrity": "sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", - "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", - "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", - "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz", - "integrity": "sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.21.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.2.tgz", - "integrity": "sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.21.2", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-simple-access": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz", - "integrity": "sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==", - "dev": true, - "dependencies": { - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-identifier": "^7.19.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", - "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz", - "integrity": "sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.20.5", - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", - "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", - "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.21.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.21.3.tgz", - "integrity": "sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", - "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz", - "integrity": "sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "regenerator-transform": "^0.15.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", - "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", - "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz", - "integrity": "sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", - "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", - "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", - "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", - "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", - "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz", - "integrity": "sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.20.1", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-async-generator-functions": "^7.20.1", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-class-static-block": "^7.18.6", - "@babel/plugin-proposal-dynamic-import": "^7.18.6", - "@babel/plugin-proposal-export-namespace-from": "^7.18.9", - "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", - "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.20.2", - "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.18.6", - "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.20.0", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.18.6", - "@babel/plugin-transform-async-to-generator": "^7.18.6", - "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.20.2", - "@babel/plugin-transform-classes": "^7.20.2", - "@babel/plugin-transform-computed-properties": "^7.18.9", - "@babel/plugin-transform-destructuring": "^7.20.2", - "@babel/plugin-transform-dotall-regex": "^7.18.6", - "@babel/plugin-transform-duplicate-keys": "^7.18.9", - "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.18.8", - "@babel/plugin-transform-function-name": "^7.18.9", - "@babel/plugin-transform-literals": "^7.18.9", - "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.19.6", - "@babel/plugin-transform-modules-commonjs": "^7.19.6", - "@babel/plugin-transform-modules-systemjs": "^7.19.6", - "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", - "@babel/plugin-transform-new-target": "^7.18.6", - "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.20.1", - "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.18.6", - "@babel/plugin-transform-reserved-words": "^7.18.6", - "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.19.0", - "@babel/plugin-transform-sticky-regex": "^7.18.6", - "@babel/plugin-transform-template-literals": "^7.18.9", - "@babel/plugin-transform-typeof-symbol": "^7.18.9", - "@babel/plugin-transform-unicode-escapes": "^7.18.10", - "@babel/plugin-transform-unicode-regex": "^7.18.6", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.20.2", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "core-js-compat": "^3.25.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", - "dev": true - }, - "node_modules/@babel/runtime": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", - "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", - "dev": true, - "dependencies": { - "regenerator-runtime": "^0.13.11" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", - "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.4.tgz", - "integrity": "sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.21.4", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.21.4", - "@babel/types": "^7.21.4", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.4.tgz", - "integrity": "sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA==", - "dev": true, - "dependencies": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", - "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.4.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", - "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.5.0.tgz", - "integrity": "sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==", - "dev": true, - "dependencies": { - "@jest/types": "^29.5.0", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.5.0", - "jest-util": "^29.5.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/console/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/console/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/console/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/console/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/console/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/core": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.5.0.tgz", - "integrity": "sha512-28UzQc7ulUrOQw1IsN/kv1QES3q2kkbl/wGslyhAclqZ/8cMdB5M68BffkIdSJgKBUt50d3hbwJ92XESlE7LiQ==", - "dev": true, - "dependencies": { - "@jest/console": "^29.5.0", - "@jest/reporters": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.5.0", - "jest-config": "^29.5.0", - "jest-haste-map": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.5.0", - "jest-resolve-dependencies": "^29.5.0", - "jest-runner": "^29.5.0", - "jest-runtime": "^29.5.0", - "jest-snapshot": "^29.5.0", - "jest-util": "^29.5.0", - "jest-validate": "^29.5.0", - "jest-watcher": "^29.5.0", - "micromatch": "^4.0.4", - "pretty-format": "^29.5.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/core/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/core/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/core/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/core/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/core/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/core/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/core/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/environment": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.5.0.tgz", - "integrity": "sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ==", - "dev": true, - "dependencies": { - "@jest/fake-timers": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "jest-mock": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.5.0.tgz", - "integrity": "sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g==", - "dev": true, - "dependencies": { - "expect": "^29.5.0", - "jest-snapshot": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect-utils": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.5.0.tgz", - "integrity": "sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==", - "dev": true, - "dependencies": { - "jest-get-type": "^29.4.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/fake-timers": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.5.0.tgz", - "integrity": "sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg==", - "dev": true, - "dependencies": { - "@jest/types": "^29.5.0", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.5.0", - "jest-mock": "^29.5.0", - "jest-util": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/globals": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.5.0.tgz", - "integrity": "sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.5.0", - "@jest/expect": "^29.5.0", - "@jest/types": "^29.5.0", - "jest-mock": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/reporters": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.5.0.tgz", - "integrity": "sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA==", - "dev": true, - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", - "@jridgewell/trace-mapping": "^0.3.15", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.5.0", - "jest-util": "^29.5.0", - "jest-worker": "^29.5.0", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "v8-to-istanbul": "^9.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/reporters/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/reporters/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/reporters/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/reporters/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/reporters/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/reporters/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/reporters/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/schemas": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz", - "integrity": "sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==", - "dev": true, - "dependencies": { - "@sinclair/typebox": "^0.25.16" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/source-map": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.4.3.tgz", - "integrity": "sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.15", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-result": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.5.0.tgz", - "integrity": "sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ==", - "dev": true, - "dependencies": { - "@jest/console": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.5.0.tgz", - "integrity": "sha512-yPafQEcKjkSfDXyvtgiV4pevSeyuA6MQr6ZIdVkWJly9vkqjnFfcfhRQqpD5whjoU8EORki752xQmjaqoFjzMQ==", - "dev": true, - "dependencies": { - "@jest/test-result": "^29.5.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.5.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-sequencer/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/transform": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.5.0.tgz", - "integrity": "sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.5.0", - "@jridgewell/trace-mapping": "^0.3.15", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.5.0", - "jest-regex-util": "^29.4.3", - "jest-util": "^29.5.0", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/transform/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/transform/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/transform/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/transform/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/transform/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - }, - "node_modules/@jest/transform/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/transform/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/transform/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/types": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz", - "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.4.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/types/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/types/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/types/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/types/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/types/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/types/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "node_modules/@nicolo-ribaudo/chokidar-2": { - "version": "2.1.8-no-fsevents.3", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz", - "integrity": "sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==", - "dev": true, - "optional": true - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@sinclair/typebox": { - "version": "0.25.24", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz", - "integrity": "sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==", - "dev": true - }, - "node_modules/@sinonjs/commons": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", - "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", - "dev": true, - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.0.2.tgz", - "integrity": "sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^2.0.0" - } - }, - "node_modules/@types/babel__core": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.0.tgz", - "integrity": "sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.3.tgz", - "integrity": "sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==", - "dev": true, - "dependencies": { - "@babel/types": "^7.3.0" - } - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", - "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/jest": { - "version": "29.4.0", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.4.0.tgz", - "integrity": "sha512-VaywcGQ9tPorCX/Jkkni7RWGFfI11whqzs8dvxF41P17Z+z872thvEvlIbznjPJ02kl1HMX3LmLOonsj2n7HeQ==", - "dev": true, - "dependencies": { - "expect": "^29.0.0", - "pretty-format": "^29.0.0" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true - }, - "node_modules/@types/node": { - "version": "18.15.11", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.11.tgz", - "integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==", - "dev": true - }, - "node_modules/@types/prettier": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz", - "integrity": "sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==", - "dev": true - }, - "node_modules/@types/semver": { - "version": "7.3.13", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", - "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", - "dev": true - }, - "node_modules/@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true - }, - "node_modules/@types/yargs": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", - "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.57.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.57.1.tgz", - "integrity": "sha512-N/RrBwEUKMIYxSKl0oDK5sFVHd6VI7p9K5MyUlVYAY6dyNb/wHUqndkTd3XhpGlXgnQsBkRZuu4f9kAHghvgPw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.57.1", - "@typescript-eslint/visitor-keys": "5.57.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "5.57.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.57.1.tgz", - "integrity": "sha512-bSs4LOgyV3bJ08F5RDqO2KXqg3WAdwHCu06zOqcQ6vqbTJizyBhuh1o1ImC69X4bV2g1OJxbH71PJqiO7Y1RuA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.57.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.57.1.tgz", - "integrity": "sha512-A2MZqD8gNT0qHKbk2wRspg7cHbCDCk2tcqt6ScCFLr5Ru8cn+TCfM786DjPhqwseiS+PrYwcXht5ztpEQ6TFTw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.57.1", - "@typescript-eslint/visitor-keys": "5.57.1", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/@typescript-eslint/utils": { - "version": "5.57.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.57.1.tgz", - "integrity": "sha512-kN6vzzf9NkEtawECqze6v99LtmDiUJCVpvieTFA1uL7/jDghiJGubGZ5csicYHU1Xoqb3oH/R5cN5df6W41Nfg==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.57.1", - "@typescript-eslint/types": "5.57.1", - "@typescript-eslint/typescript-estree": "5.57.1", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.57.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.57.1.tgz", - "integrity": "sha512-RjQrAniDU0CEk5r7iphkm731zKlFiUjvcBS2yHAg8WWqFMCaCrD0rKEVOMUyMMcbGPZ0bPp56srkGWrgfZqLRA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.57.1", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/aria-query": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", - "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", - "dev": true, - "dependencies": { - "deep-equal": "^2.0.5" - } - }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-includes": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", - "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", - "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", - "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", - "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", - "dev": true, - "peer": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.1.3" - } - }, - "node_modules/ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", - "dev": true - }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/axe-core": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.6.3.tgz", - "integrity": "sha512-/BQzOX780JhsxDnPpH4ZiyrJAzcd8AfzFPkv+89veFSr1rcMjuq2JDCwypKaPeB6ljHp9KjXhPpjgCvQlWYuqg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/axobject-query": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz", - "integrity": "sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==", - "dev": true, - "dependencies": { - "deep-equal": "^2.0.5" - } - }, - "node_modules/babel-jest": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.5.0.tgz", - "integrity": "sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==", - "dev": true, - "dependencies": { - "@jest/transform": "^29.5.0", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.5.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.0" - } - }, - "node_modules/babel-jest/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/babel-jest/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/babel-jest/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/babel-jest/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/babel-jest/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-jest/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-jest/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz", - "integrity": "sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==", - "dev": true, - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", - "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.3.3", - "semver": "^6.1.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", - "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.3", - "core-js-compat": "^3.25.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", - "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-jest": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz", - "integrity": "sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==", - "dev": true, - "dependencies": { - "babel-plugin-jest-hoist": "^29.5.0", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "optional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.21.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", - "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001449", - "electron-to-chromium": "^1.4.284", - "node-releases": "^2.0.8", - "update-browserslist-db": "^1.0.10" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001476", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001476.tgz", - "integrity": "sha512-JmpktFppVSvyUN4gsLS0bShY2L9ZUslHLE72vgemBkS43JD2fOvKTKs+GtRwuxrtRGnwJFW0ye7kWRRlLJS9vQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "optional": true, - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, - "node_modules/cjs-module-lexer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", - "dev": true - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true, - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", - "dev": true - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/confusing-browser-globals": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", - "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", - "dev": true - }, - "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/core-js-compat": { - "version": "3.30.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.30.0.tgz", - "integrity": "sha512-P5A2h/9mRYZFIAP+5Ab8ns6083IyVpSclU74UNvbGVQ8VM7n3n3/g2yF3AkKQ9NXz2O+ioxLbEWKnDtgsFamhg==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.5" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", - "dev": true - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true - }, - "node_modules/deep-equal": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.0.tgz", - "integrity": "sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "es-get-iterator": "^1.1.2", - "get-intrinsic": "^1.1.3", - "is-arguments": "^1.1.1", - "is-array-buffer": "^3.0.1", - "is-date-object": "^1.0.5", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "isarray": "^2.0.5", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "side-channel": "^1.0.4", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.9" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", - "dev": true, - "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/diff-sequences": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", - "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.4.356", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.356.tgz", - "integrity": "sha512-nEftV1dRX3omlxAj42FwqRZT0i4xd2dIg39sog/CnCJeCcL1TRd2Uh0i9Oebgv8Ou0vzTPw++xc+Z20jzS2B6A==", - "dev": true - }, - "node_modules/emittery": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-abstract": { - "version": "1.21.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz", - "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==", - "dev": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.2.0", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.7", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.9" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-get-iterator": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", - "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "is-arguments": "^1.1.1", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.7", - "isarray": "^2.0.5", - "stop-iteration-iterator": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/eslint": { - "version": "8.33.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.33.0.tgz", - "integrity": "sha512-WjOpFQgKK8VrCnAtl8We0SUOy/oVZ5NHykyMiagV1M9r8IFpIJX7DduK6n1mpfhlG7T1NLWm2SuD8QB7KFySaA==", - "dev": true, - "dependencies": { - "@eslint/eslintrc": "^1.4.1", - "@humanwhocodes/config-array": "^0.11.8", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.4.0", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-sdsl": "^4.1.4", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-airbnb": { - "version": "19.0.4", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-19.0.4.tgz", - "integrity": "sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew==", - "dev": true, - "dependencies": { - "eslint-config-airbnb-base": "^15.0.0", - "object.assign": "^4.1.2", - "object.entries": "^1.1.5" - }, - "engines": { - "node": "^10.12.0 || ^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^7.32.0 || ^8.2.0", - "eslint-plugin-import": "^2.25.3", - "eslint-plugin-jsx-a11y": "^6.5.1", - "eslint-plugin-react": "^7.28.0", - "eslint-plugin-react-hooks": "^4.3.0" - } - }, - "node_modules/eslint-config-airbnb-base": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz", - "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==", - "dev": true, - "dependencies": { - "confusing-browser-globals": "^1.0.10", - "object.assign": "^4.1.2", - "object.entries": "^1.1.5", - "semver": "^6.3.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "peerDependencies": { - "eslint": "^7.32.0 || ^8.2.0", - "eslint-plugin-import": "^2.25.2" - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", - "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", - "dev": true, - "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.11.0", - "resolve": "^1.22.1" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-module-utils": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", - "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==", - "dev": true, - "dependencies": { - "debug": "^3.2.7" - }, - "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import": { - "version": "2.27.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz", - "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "array.prototype.flatmap": "^1.3.1", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.7", - "eslint-module-utils": "^2.7.4", - "has": "^1.0.3", - "is-core-module": "^2.11.0", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.values": "^1.1.6", - "resolve": "^1.22.1", - "semver": "^6.3.0", - "tsconfig-paths": "^3.14.1" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-jest": { - "version": "27.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.2.1.tgz", - "integrity": "sha512-l067Uxx7ZT8cO9NJuf+eJHvt6bqJyz2Z29wykyEdz/OtmcELQl2MQGQLX8J94O1cSJWAwUSEvCjwjA7KEK3Hmg==", - "dev": true, - "dependencies": { - "@typescript-eslint/utils": "^5.10.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^5.0.0", - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "@typescript-eslint/eslint-plugin": { - "optional": true - }, - "jest": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz", - "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.20.7", - "aria-query": "^5.1.3", - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.6.2", - "axobject-query": "^3.1.1", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "has": "^1.0.3", - "jsx-ast-utils": "^3.3.3", - "language-tags": "=1.0.5", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=4.0" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" - } - }, - "node_modules/eslint-plugin-react": { - "version": "7.32.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz", - "integrity": "sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==", - "dev": true, - "peer": true, - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "array.prototype.tosorted": "^1.1.1", - "doctrine": "^2.1.0", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "object.hasown": "^1.1.2", - "object.values": "^1.1.6", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.4", - "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.8" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" - } - }, - "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" - } - }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "peer": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", - "dev": true, - "peer": true, - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz", - "integrity": "sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/eslint/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/eslint/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/eslint/node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/espree": { - "version": "9.5.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.1.tgz", - "integrity": "sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg==", - "dev": true, - "dependencies": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expect": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.5.0.tgz", - "integrity": "sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==", - "dev": true, - "dependencies": { - "@jest/expect-utils": "^29.5.0", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-util": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "dev": true, - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true - }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/fs-readdir-recursive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", - "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", - "dev": true - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", - "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "node_modules/grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/husky": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz", - "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==", - "dev": true, - "bin": { - "husky": "lib/bin.js" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/typicode" - } - }, - "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/internal-slot": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "optional": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakmap": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakset": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", - "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/istanbul-lib-report/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest": { - "version": "29.4.1", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.4.1.tgz", - "integrity": "sha512-cknimw7gAXPDOmj0QqztlxVtBVCw2lYY9CeIE5N6kD+kET1H4H79HSNISJmijb1HF+qk+G+ploJgiDi5k/fRlg==", - "dev": true, - "dependencies": { - "@jest/core": "^29.4.1", - "@jest/types": "^29.4.1", - "import-local": "^3.0.2", - "jest-cli": "^29.4.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-changed-files": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.5.0.tgz", - "integrity": "sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==", - "dev": true, - "dependencies": { - "execa": "^5.0.0", - "p-limit": "^3.1.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-circus": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.5.0.tgz", - "integrity": "sha512-gq/ongqeQKAplVxqJmbeUOJJKkW3dDNPY8PjhJ5G0lBRvu0e3EWGxGy5cI4LAGA7gV2UHCtWBI4EMXK8c9nQKA==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.5.0", - "@jest/expect": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.5.0", - "jest-matcher-utils": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-runtime": "^29.5.0", - "jest-snapshot": "^29.5.0", - "jest-util": "^29.5.0", - "p-limit": "^3.1.0", - "pretty-format": "^29.5.0", - "pure-rand": "^6.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-circus/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-circus/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-circus/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-circus/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-circus/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-circus/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-circus/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-cli": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.5.0.tgz", - "integrity": "sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==", - "dev": true, - "dependencies": { - "@jest/core": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/types": "^29.5.0", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^29.5.0", - "jest-util": "^29.5.0", - "jest-validate": "^29.5.0", - "prompts": "^2.0.1", - "yargs": "^17.3.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-cli/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-cli/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-cli/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-cli/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-cli/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-cli/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-config": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.5.0.tgz", - "integrity": "sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.5.0", - "@jest/types": "^29.5.0", - "babel-jest": "^29.5.0", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^29.5.0", - "jest-environment-node": "^29.5.0", - "jest-get-type": "^29.4.3", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.5.0", - "jest-runner": "^29.5.0", - "jest-util": "^29.5.0", - "jest-validate": "^29.5.0", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^29.5.0", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@types/node": "*", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-config/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-config/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-config/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-config/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-config/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-config/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-config/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-diff": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.5.0.tgz", - "integrity": "sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.4.3", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-diff/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-diff/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-diff/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-diff/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-diff/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-diff/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-docblock": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz", - "integrity": "sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==", - "dev": true, - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-each": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.5.0.tgz", - "integrity": "sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA==", - "dev": true, - "dependencies": { - "@jest/types": "^29.5.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.4.3", - "jest-util": "^29.5.0", - "pretty-format": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-each/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-each/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-each/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-each/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-each/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-each/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-environment-node": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.5.0.tgz", - "integrity": "sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.5.0", - "@jest/fake-timers": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "jest-mock": "^29.5.0", - "jest-util": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-get-type": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", - "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-haste-map": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.5.0.tgz", - "integrity": "sha512-IspOPnnBro8YfVYSw6yDRKh/TiCdRngjxeacCps1cQ9cgVN6+10JUcuJ1EabrgYLOATsIAigxA0rLR9x/YlrSA==", - "dev": true, - "dependencies": { - "@jest/types": "^29.5.0", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.4.3", - "jest-util": "^29.5.0", - "jest-worker": "^29.5.0", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/jest-leak-detector": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.5.0.tgz", - "integrity": "sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow==", - "dev": true, - "dependencies": { - "jest-get-type": "^29.4.3", - "pretty-format": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-matcher-utils": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz", - "integrity": "sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.5.0", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-matcher-utils/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-matcher-utils/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-matcher-utils/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-matcher-utils/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-matcher-utils/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-matcher-utils/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-message-util": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.5.0.tgz", - "integrity": "sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.5.0", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.5.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-message-util/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-message-util/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-message-util/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-message-util/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-message-util/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-message-util/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-message-util/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-mock": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.5.0.tgz", - "integrity": "sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw==", - "dev": true, - "dependencies": { - "@jest/types": "^29.5.0", - "@types/node": "*", - "jest-util": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.4.3.tgz", - "integrity": "sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.5.0.tgz", - "integrity": "sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.5.0", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.5.0", - "jest-validate": "^29.5.0", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.5.0.tgz", - "integrity": "sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg==", - "dev": true, - "dependencies": { - "jest-regex-util": "^29.4.3", - "jest-snapshot": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-resolve/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-resolve/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-resolve/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-resolve/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-resolve/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-resolve/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runner": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.5.0.tgz", - "integrity": "sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ==", - "dev": true, - "dependencies": { - "@jest/console": "^29.5.0", - "@jest/environment": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.4.3", - "jest-environment-node": "^29.5.0", - "jest-haste-map": "^29.5.0", - "jest-leak-detector": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-resolve": "^29.5.0", - "jest-runtime": "^29.5.0", - "jest-util": "^29.5.0", - "jest-watcher": "^29.5.0", - "jest-worker": "^29.5.0", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runner/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-runner/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-runner/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-runner/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-runner/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runner/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.5.0.tgz", - "integrity": "sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.5.0", - "@jest/fake-timers": "^29.5.0", - "@jest/globals": "^29.5.0", - "@jest/source-map": "^29.4.3", - "@jest/test-result": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-mock": "^29.5.0", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.5.0", - "jest-snapshot": "^29.5.0", - "jest-util": "^29.5.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runtime/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-runtime/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-runtime/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-runtime/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-runtime/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-snapshot": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.5.0.tgz", - "integrity": "sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/babel__traverse": "^7.0.6", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.5.0", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.5.0", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-util": "^29.5.0", - "natural-compare": "^1.4.0", - "pretty-format": "^29.5.0", - "semver": "^7.3.5" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-snapshot/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-snapshot/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-snapshot/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-snapshot/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-snapshot/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-snapshot/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/jest-util": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.5.0.tgz", - "integrity": "sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==", - "dev": true, - "dependencies": { - "@jest/types": "^29.5.0", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-util/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-util/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-util/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-util/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-util/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-util/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-validate": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.5.0.tgz", - "integrity": "sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ==", - "dev": true, - "dependencies": { - "@jest/types": "^29.5.0", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.4.3", - "leven": "^3.1.0", - "pretty-format": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-validate/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-validate/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-validate/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-validate/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-validate/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watcher": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.5.0.tgz", - "integrity": "sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA==", - "dev": true, - "dependencies": { - "@jest/test-result": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.5.0", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-watcher/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-watcher/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-watcher/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-watcher/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-watcher/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watcher/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-worker": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.5.0.tgz", - "integrity": "sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==", - "dev": true, - "dependencies": { - "@types/node": "*", - "jest-util": "^29.5.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/js-sdsl": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.0.tgz", - "integrity": "sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/js-sdsl" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsx-ast-utils": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", - "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.5", - "object.assign": "^4.1.3" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/language-subtag-registry": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", - "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", - "dev": true - }, - "node_modules/language-tags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", - "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", - "dev": true, - "dependencies": { - "language-subtag-registry": "~0.3.2" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "peer": true, - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "dependencies": { - "tmpl": "1.0.5" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true - }, - "node_modules/node-releases": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", - "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", - "dev": true - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.entries": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", - "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", - "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.hasown": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", - "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", - "dev": true, - "peer": true, - "dependencies": { - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.values": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", - "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pngjs": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-7.0.0.tgz", - "integrity": "sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==", - "dev": true, - "engines": { - "node": ">=14.19.0" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/pretty-format": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz", - "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.4.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, - "peer": true, - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/prop-types/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true, - "peer": true - }, - "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pure-rand": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.1.tgz", - "integrity": "sha512-t+x1zEHDjBwkDGY5v5ApnZ/utcd4XYDiJsaQQoptTXgUXX95sDg1elCdJghzicm7n2mbCBJ3uYWr6M22SO19rg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ] - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "optional": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", - "dev": true, - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true - }, - "node_modules/regenerator-transform": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", - "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/regexpu-core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", - "dev": true, - "dependencies": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "dev": true, - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", - "dev": true, - "dependencies": { - "is-core-module": "^2.11.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-cwd/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve.exports": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", - "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "node_modules/slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "node_modules/stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/stop-iteration-iterator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", - "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", - "dev": true, - "dependencies": { - "internal-slot": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/string.prototype.matchall": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", - "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", - "dev": true, - "peer": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.3", - "side-channel": "^1.0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trim": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", - "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/tsconfig-paths": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", - "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", - "dev": true, - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/tsconfig-paths/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typescript": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", - "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", - "dev": true, - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=12.20" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "browserslist-lint": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/v8-to-istanbul": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", - "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "dependencies": { - "makeerror": "1.0.12" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-collection": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", - "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", - "dev": true, - "dependencies": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "node_modules/yargs": { - "version": "17.7.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", - "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", - "dev": true, - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - }, - "dependencies": { - "@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@babel/cli": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.20.7.tgz", - "integrity": "sha512-WylgcELHB66WwQqItxNILsMlaTd8/SO6SgTTjMp4uCI7P4QyH1r3nqgFmO3BfM4AtfniHgFMH3EpYFj/zynBkQ==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.8", - "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents.3", - "chokidar": "^3.4.0", - "commander": "^4.0.1", - "convert-source-map": "^1.1.0", - "fs-readdir-recursive": "^1.1.0", - "glob": "^7.2.0", - "make-dir": "^2.1.0", - "slash": "^2.0.0" - } - }, - "@babel/code-frame": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz", - "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.18.6" - } - }, - "@babel/compat-data": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.4.tgz", - "integrity": "sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g==", - "dev": true - }, - "@babel/core": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.4.tgz", - "integrity": "sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA==", - "dev": true, - "requires": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.21.4", - "@babel/helper-compilation-targets": "^7.21.4", - "@babel/helper-module-transforms": "^7.21.2", - "@babel/helpers": "^7.21.0", - "@babel/parser": "^7.21.4", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.4", - "@babel/types": "^7.21.4", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - } - }, - "@babel/generator": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.4.tgz", - "integrity": "sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA==", - "dev": true, - "requires": { - "@babel/types": "^7.21.4", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", - "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", - "dev": true, - "requires": { - "@babel/helper-explode-assignable-expression": "^7.18.6", - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.4.tgz", - "integrity": "sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.21.4", - "@babel/helper-validator-option": "^7.21.0", - "browserslist": "^4.21.3", - "lru-cache": "^5.1.1", - "semver": "^6.3.0" - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.4.tgz", - "integrity": "sha512-46QrX2CQlaFRF4TkwfTt6nJD7IHq8539cCL7SDpqWSDeJKY1xylKKY5F/33mJhLZ3mFvKv2gGrVS6NkyF6qs+Q==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-member-expression-to-functions": "^7.21.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.20.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/helper-split-export-declaration": "^7.18.6" - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.21.4.tgz", - "integrity": "sha512-M00OuhU+0GyZ5iBBN9czjugzWrEq2vDpf/zCYHxxf93ul/Q5rv+a5h+/+0WnI1AebHNVtl5bFV0qsJoH23DbfA==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "regexpu-core": "^5.3.1" - } - }, - "@babel/helper-define-polyfill-provider": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", - "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", - "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - } - }, - "@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", - "dev": true - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", - "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-function-name": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", - "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", - "dev": true, - "requires": { - "@babel/template": "^7.20.7", - "@babel/types": "^7.21.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.0.tgz", - "integrity": "sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==", - "dev": true, - "requires": { - "@babel/types": "^7.21.0" - } - }, - "@babel/helper-module-imports": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz", - "integrity": "sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==", - "dev": true, - "requires": { - "@babel/types": "^7.21.4" - } - }, - "@babel/helper-module-transforms": { - "version": "7.21.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz", - "integrity": "sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.2", - "@babel/types": "^7.21.2" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", - "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", - "dev": true - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", - "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-wrap-function": "^7.18.9", - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-replace-supers": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz", - "integrity": "sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.20.7", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.7", - "@babel/types": "^7.20.7" - } - }, - "@babel/helper-simple-access": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", - "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", - "dev": true, - "requires": { - "@babel/types": "^7.20.2" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", - "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", - "dev": true, - "requires": { - "@babel/types": "^7.20.0" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", - "dev": true - }, - "@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", - "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", - "dev": true - }, - "@babel/helper-wrap-function": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz", - "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.19.0", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5" - } - }, - "@babel/helpers": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz", - "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==", - "dev": true, - "requires": { - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.0", - "@babel/types": "^7.21.0" - } - }, - "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.4.tgz", - "integrity": "sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==", - "dev": true - }, - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", - "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz", - "integrity": "sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-proposal-optional-chaining": "^7.20.7" - } - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", - "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-proposal-class-static-block": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz", - "integrity": "sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.21.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - } - }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", - "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - } - }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", - "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", - "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3" - } - }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz", - "integrity": "sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", - "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", - "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.20.7" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", - "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", - "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "@babel/plugin-proposal-private-methods": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", - "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0.tgz", - "integrity": "sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.21.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-syntax-import-assertions": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", - "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.21.4.tgz", - "integrity": "sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.21.4.tgz", - "integrity": "sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz", - "integrity": "sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz", - "integrity": "sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", - "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.21.0.tgz", - "integrity": "sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.21.0.tgz", - "integrity": "sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-replace-supers": "^7.20.7", - "@babel/helper-split-export-declaration": "^7.18.6", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz", - "integrity": "sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/template": "^7.20.7" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.21.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.21.3.tgz", - "integrity": "sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", - "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", - "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", - "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", - "dev": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.0.tgz", - "integrity": "sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", - "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", - "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", - "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", - "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz", - "integrity": "sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.21.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.2.tgz", - "integrity": "sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.21.2", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-simple-access": "^7.20.2" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz", - "integrity": "sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-identifier": "^7.19.1" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", - "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz", - "integrity": "sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.20.5", - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", - "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", - "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.21.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.21.3.tgz", - "integrity": "sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", - "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz", - "integrity": "sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "regenerator-transform": "^0.15.1" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", - "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", - "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz", - "integrity": "sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", - "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", - "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", - "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", - "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", - "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/preset-env": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz", - "integrity": "sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.20.1", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-async-generator-functions": "^7.20.1", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-class-static-block": "^7.18.6", - "@babel/plugin-proposal-dynamic-import": "^7.18.6", - "@babel/plugin-proposal-export-namespace-from": "^7.18.9", - "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", - "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.20.2", - "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.18.6", - "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.20.0", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.18.6", - "@babel/plugin-transform-async-to-generator": "^7.18.6", - "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.20.2", - "@babel/plugin-transform-classes": "^7.20.2", - "@babel/plugin-transform-computed-properties": "^7.18.9", - "@babel/plugin-transform-destructuring": "^7.20.2", - "@babel/plugin-transform-dotall-regex": "^7.18.6", - "@babel/plugin-transform-duplicate-keys": "^7.18.9", - "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.18.8", - "@babel/plugin-transform-function-name": "^7.18.9", - "@babel/plugin-transform-literals": "^7.18.9", - "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.19.6", - "@babel/plugin-transform-modules-commonjs": "^7.19.6", - "@babel/plugin-transform-modules-systemjs": "^7.19.6", - "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", - "@babel/plugin-transform-new-target": "^7.18.6", - "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.20.1", - "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.18.6", - "@babel/plugin-transform-reserved-words": "^7.18.6", - "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.19.0", - "@babel/plugin-transform-sticky-regex": "^7.18.6", - "@babel/plugin-transform-template-literals": "^7.18.9", - "@babel/plugin-transform-typeof-symbol": "^7.18.9", - "@babel/plugin-transform-unicode-escapes": "^7.18.10", - "@babel/plugin-transform-unicode-regex": "^7.18.6", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.20.2", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "core-js-compat": "^3.25.1", - "semver": "^6.3.0" - } - }, - "@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - } - }, - "@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", - "dev": true - }, - "@babel/runtime": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", - "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.11" - } - }, - "@babel/template": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", - "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7" - } - }, - "@babel/traverse": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.4.tgz", - "integrity": "sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.21.4", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.21.4", - "@babel/types": "^7.21.4", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.4.tgz", - "integrity": "sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA==", - "dev": true, - "requires": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", - "to-fast-properties": "^2.0.0" - } - }, - "@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^3.3.0" - } - }, - "@eslint/eslintrc": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", - "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.4.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - } - } - }, - "@humanwhocodes/config-array": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", - "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - } - }, - "@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "dependencies": { - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - } - } - }, - "@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true - }, - "@jest/console": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.5.0.tgz", - "integrity": "sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==", - "dev": true, - "requires": { - "@jest/types": "^29.5.0", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.5.0", - "jest-util": "^29.5.0", - "slash": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/core": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.5.0.tgz", - "integrity": "sha512-28UzQc7ulUrOQw1IsN/kv1QES3q2kkbl/wGslyhAclqZ/8cMdB5M68BffkIdSJgKBUt50d3hbwJ92XESlE7LiQ==", - "dev": true, - "requires": { - "@jest/console": "^29.5.0", - "@jest/reporters": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.5.0", - "jest-config": "^29.5.0", - "jest-haste-map": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.5.0", - "jest-resolve-dependencies": "^29.5.0", - "jest-runner": "^29.5.0", - "jest-runtime": "^29.5.0", - "jest-snapshot": "^29.5.0", - "jest-util": "^29.5.0", - "jest-validate": "^29.5.0", - "jest-watcher": "^29.5.0", - "micromatch": "^4.0.4", - "pretty-format": "^29.5.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/environment": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.5.0.tgz", - "integrity": "sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ==", - "dev": true, - "requires": { - "@jest/fake-timers": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "jest-mock": "^29.5.0" - } - }, - "@jest/expect": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.5.0.tgz", - "integrity": "sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g==", - "dev": true, - "requires": { - "expect": "^29.5.0", - "jest-snapshot": "^29.5.0" - } - }, - "@jest/expect-utils": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.5.0.tgz", - "integrity": "sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==", - "dev": true, - "requires": { - "jest-get-type": "^29.4.3" - } - }, - "@jest/fake-timers": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.5.0.tgz", - "integrity": "sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg==", - "dev": true, - "requires": { - "@jest/types": "^29.5.0", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.5.0", - "jest-mock": "^29.5.0", - "jest-util": "^29.5.0" - } - }, - "@jest/globals": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.5.0.tgz", - "integrity": "sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ==", - "dev": true, - "requires": { - "@jest/environment": "^29.5.0", - "@jest/expect": "^29.5.0", - "@jest/types": "^29.5.0", - "jest-mock": "^29.5.0" - } - }, - "@jest/reporters": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.5.0.tgz", - "integrity": "sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA==", - "dev": true, - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", - "@jridgewell/trace-mapping": "^0.3.15", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.5.0", - "jest-util": "^29.5.0", - "jest-worker": "^29.5.0", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "v8-to-istanbul": "^9.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/schemas": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz", - "integrity": "sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==", - "dev": true, - "requires": { - "@sinclair/typebox": "^0.25.16" - } - }, - "@jest/source-map": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.4.3.tgz", - "integrity": "sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.15", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - } - }, - "@jest/test-result": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.5.0.tgz", - "integrity": "sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ==", - "dev": true, - "requires": { - "@jest/console": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } - }, - "@jest/test-sequencer": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.5.0.tgz", - "integrity": "sha512-yPafQEcKjkSfDXyvtgiV4pevSeyuA6MQr6ZIdVkWJly9vkqjnFfcfhRQqpD5whjoU8EORki752xQmjaqoFjzMQ==", - "dev": true, - "requires": { - "@jest/test-result": "^29.5.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.5.0", - "slash": "^3.0.0" - }, - "dependencies": { - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - } - } - }, - "@jest/transform": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.5.0.tgz", - "integrity": "sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==", - "dev": true, - "requires": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.5.0", - "@jridgewell/trace-mapping": "^0.3.15", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.5.0", - "jest-regex-util": "^29.4.3", - "jest-util": "^29.5.0", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/types": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz", - "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==", - "dev": true, - "requires": { - "@jest/schemas": "^29.4.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - }, - "dependencies": { - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - } - } - }, - "@nicolo-ribaudo/chokidar-2": { - "version": "2.1.8-no-fsevents.3", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz", - "integrity": "sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==", - "dev": true, - "optional": true - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@sinclair/typebox": { - "version": "0.25.24", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz", - "integrity": "sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==", - "dev": true - }, - "@sinonjs/commons": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", - "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/fake-timers": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.0.2.tgz", - "integrity": "sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==", - "dev": true, - "requires": { - "@sinonjs/commons": "^2.0.0" - } - }, - "@types/babel__core": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.0.tgz", - "integrity": "sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==", - "dev": true, - "requires": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.3.tgz", - "integrity": "sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==", - "dev": true, - "requires": { - "@babel/types": "^7.3.0" - } - }, - "@types/graceful-fs": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", - "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/jest": { - "version": "29.4.0", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.4.0.tgz", - "integrity": "sha512-VaywcGQ9tPorCX/Jkkni7RWGFfI11whqzs8dvxF41P17Z+z872thvEvlIbznjPJ02kl1HMX3LmLOonsj2n7HeQ==", - "dev": true, - "requires": { - "expect": "^29.0.0", - "pretty-format": "^29.0.0" - } - }, - "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true - }, - "@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true - }, - "@types/node": { - "version": "18.15.11", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.11.tgz", - "integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==", - "dev": true - }, - "@types/prettier": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz", - "integrity": "sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==", - "dev": true - }, - "@types/semver": { - "version": "7.3.13", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", - "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", - "dev": true - }, - "@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true - }, - "@types/yargs": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", - "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true - }, - "@typescript-eslint/scope-manager": { - "version": "5.57.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.57.1.tgz", - "integrity": "sha512-N/RrBwEUKMIYxSKl0oDK5sFVHd6VI7p9K5MyUlVYAY6dyNb/wHUqndkTd3XhpGlXgnQsBkRZuu4f9kAHghvgPw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.57.1", - "@typescript-eslint/visitor-keys": "5.57.1" - } - }, - "@typescript-eslint/types": { - "version": "5.57.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.57.1.tgz", - "integrity": "sha512-bSs4LOgyV3bJ08F5RDqO2KXqg3WAdwHCu06zOqcQ6vqbTJizyBhuh1o1ImC69X4bV2g1OJxbH71PJqiO7Y1RuA==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "5.57.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.57.1.tgz", - "integrity": "sha512-A2MZqD8gNT0qHKbk2wRspg7cHbCDCk2tcqt6ScCFLr5Ru8cn+TCfM786DjPhqwseiS+PrYwcXht5ztpEQ6TFTw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.57.1", - "@typescript-eslint/visitor-keys": "5.57.1", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "@typescript-eslint/utils": { - "version": "5.57.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.57.1.tgz", - "integrity": "sha512-kN6vzzf9NkEtawECqze6v99LtmDiUJCVpvieTFA1uL7/jDghiJGubGZ5csicYHU1Xoqb3oH/R5cN5df6W41Nfg==", - "dev": true, - "requires": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.57.1", - "@typescript-eslint/types": "5.57.1", - "@typescript-eslint/typescript-estree": "5.57.1", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" - }, - "dependencies": { - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.57.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.57.1.tgz", - "integrity": "sha512-RjQrAniDU0CEk5r7iphkm731zKlFiUjvcBS2yHAg8WWqFMCaCrD0rKEVOMUyMMcbGPZ0bPp56srkGWrgfZqLRA==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.57.1", - "eslint-visitor-keys": "^3.3.0" - } - }, - "acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", - "dev": true - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "requires": {} - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "aria-query": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", - "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", - "dev": true, - "requires": { - "deep-equal": "^2.0.5" - } - }, - "array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" - } - }, - "array-includes": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", - "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "is-string": "^1.0.7" - } - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "array.prototype.flat": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", - "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" - } - }, - "array.prototype.flatmap": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", - "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" - } - }, - "array.prototype.tosorted": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", - "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.1.3" - } - }, - "ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", - "dev": true - }, - "available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true - }, - "axe-core": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.6.3.tgz", - "integrity": "sha512-/BQzOX780JhsxDnPpH4ZiyrJAzcd8AfzFPkv+89veFSr1rcMjuq2JDCwypKaPeB6ljHp9KjXhPpjgCvQlWYuqg==", - "dev": true - }, - "axobject-query": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz", - "integrity": "sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==", - "dev": true, - "requires": { - "deep-equal": "^2.0.5" - } - }, - "babel-jest": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.5.0.tgz", - "integrity": "sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==", - "dev": true, - "requires": { - "@jest/transform": "^29.5.0", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.5.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - } - }, - "babel-plugin-jest-hoist": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz", - "integrity": "sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==", - "dev": true, - "requires": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - } - }, - "babel-plugin-polyfill-corejs2": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", - "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.3.3", - "semver": "^6.1.1" - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", - "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.3", - "core-js-compat": "^3.25.1" - } - }, - "babel-plugin-polyfill-regenerator": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", - "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.3" - } - }, - "babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "requires": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - } - }, - "babel-preset-jest": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz", - "integrity": "sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==", - "dev": true, - "requires": { - "babel-plugin-jest-hoist": "^29.5.0", - "babel-preset-current-node-syntax": "^1.0.0" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "browserslist": { - "version": "4.21.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", - "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001449", - "electron-to-chromium": "^1.4.284", - "node-releases": "^2.0.8", - "update-browserslist-db": "^1.0.10" - } - }, - "bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "requires": { - "node-int64": "^0.4.0" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30001476", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001476.tgz", - "integrity": "sha512-JmpktFppVSvyUN4gsLS0bShY2L9ZUslHLE72vgemBkS43JD2fOvKTKs+GtRwuxrtRGnwJFW0ye7kWRRlLJS9vQ==", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "optional": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", - "dev": true - }, - "cjs-module-lexer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", - "dev": true - }, - "cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true - }, - "collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", - "dev": true - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "confusing-browser-globals": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", - "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", - "dev": true - }, - "convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "core-js-compat": { - "version": "3.30.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.30.0.tgz", - "integrity": "sha512-P5A2h/9mRYZFIAP+5Ab8ns6083IyVpSclU74UNvbGVQ8VM7n3n3/g2yF3AkKQ9NXz2O+ioxLbEWKnDtgsFamhg==", - "dev": true, - "requires": { - "browserslist": "^4.21.5" - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", - "dev": true - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true - }, - "deep-equal": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.0.tgz", - "integrity": "sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-get-iterator": "^1.1.2", - "get-intrinsic": "^1.1.3", - "is-arguments": "^1.1.1", - "is-array-buffer": "^3.0.1", - "is-date-object": "^1.0.5", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "isarray": "^2.0.5", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "side-channel": "^1.0.4", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.9" - } - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true - }, - "define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", - "dev": true, - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true - }, - "diff-sequences": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", - "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "electron-to-chromium": { - "version": "1.4.356", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.356.tgz", - "integrity": "sha512-nEftV1dRX3omlxAj42FwqRZT0i4xd2dIg39sog/CnCJeCcL1TRd2Uh0i9Oebgv8Ou0vzTPw++xc+Z20jzS2B6A==", - "dev": true - }, - "emittery": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", - "dev": true - }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.21.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz", - "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==", - "dev": true, - "requires": { - "array-buffer-byte-length": "^1.0.0", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.2.0", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.7", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.9" - } - }, - "es-get-iterator": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", - "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "is-arguments": "^1.1.1", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.7", - "isarray": "^2.0.5", - "stop-iteration-iterator": "^1.0.0" - } - }, - "es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" - } - }, - "es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "eslint": { - "version": "8.33.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.33.0.tgz", - "integrity": "sha512-WjOpFQgKK8VrCnAtl8We0SUOy/oVZ5NHykyMiagV1M9r8IFpIJX7DduK6n1mpfhlG7T1NLWm2SuD8QB7KFySaA==", - "dev": true, - "requires": { - "@eslint/eslintrc": "^1.4.1", - "@humanwhocodes/config-array": "^0.11.8", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.4.0", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-sdsl": "^4.1.4", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - } - } - }, - "eslint-config-airbnb": { - "version": "19.0.4", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-19.0.4.tgz", - "integrity": "sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew==", - "dev": true, - "requires": { - "eslint-config-airbnb-base": "^15.0.0", - "object.assign": "^4.1.2", - "object.entries": "^1.1.5" - } - }, - "eslint-config-airbnb-base": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz", - "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==", - "dev": true, - "requires": { - "confusing-browser-globals": "^1.0.10", - "object.assign": "^4.1.2", - "object.entries": "^1.1.5", - "semver": "^6.3.0" - } - }, - "eslint-import-resolver-node": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", - "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", - "dev": true, - "requires": { - "debug": "^3.2.7", - "is-core-module": "^2.11.0", - "resolve": "^1.22.1" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "eslint-module-utils": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", - "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==", - "dev": true, - "requires": { - "debug": "^3.2.7" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "eslint-plugin-import": { - "version": "2.27.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz", - "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==", - "dev": true, - "requires": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "array.prototype.flatmap": "^1.3.1", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.7", - "eslint-module-utils": "^2.7.4", - "has": "^1.0.3", - "is-core-module": "^2.11.0", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.values": "^1.1.6", - "resolve": "^1.22.1", - "semver": "^6.3.0", - "tsconfig-paths": "^3.14.1" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - } - } - }, - "eslint-plugin-jest": { - "version": "27.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.2.1.tgz", - "integrity": "sha512-l067Uxx7ZT8cO9NJuf+eJHvt6bqJyz2Z29wykyEdz/OtmcELQl2MQGQLX8J94O1cSJWAwUSEvCjwjA7KEK3Hmg==", - "dev": true, - "requires": { - "@typescript-eslint/utils": "^5.10.0" - } - }, - "eslint-plugin-jsx-a11y": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz", - "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.20.7", - "aria-query": "^5.1.3", - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.6.2", - "axobject-query": "^3.1.1", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "has": "^1.0.3", - "jsx-ast-utils": "^3.3.3", - "language-tags": "=1.0.5", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "semver": "^6.3.0" - } - }, - "eslint-plugin-react": { - "version": "7.32.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz", - "integrity": "sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==", - "dev": true, - "peer": true, - "requires": { - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "array.prototype.tosorted": "^1.1.1", - "doctrine": "^2.1.0", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "object.hasown": "^1.1.2", - "object.values": "^1.1.6", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.4", - "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.8" - }, - "dependencies": { - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "peer": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "resolve": { - "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", - "dev": true, - "peer": true, - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - } - } - }, - "eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", - "dev": true, - "peer": true, - "requires": {} - }, - "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - } - } - }, - "eslint-visitor-keys": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz", - "integrity": "sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==", - "dev": true - }, - "espree": { - "version": "9.5.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.1.tgz", - "integrity": "sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg==", - "dev": true, - "requires": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.0" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true - }, - "expect": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.5.0.tgz", - "integrity": "sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==", - "dev": true, - "requires": { - "@jest/expect-utils": "^29.5.0", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-util": "^29.5.0" - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "dev": true, - "requires": { - "bser": "2.1.1" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true - }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "requires": { - "is-callable": "^1.1.3" - } - }, - "fs-readdir-recursive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", - "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - } - }, - "functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-intrinsic": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", - "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "dev": true, - "requires": { - "define-properties": "^1.1.3" - } - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "dependencies": { - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - } - } - }, - "gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.3" - } - }, - "graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "dev": true - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true - }, - "husky": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz", - "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==", - "dev": true - }, - "ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "internal-slot": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", - "dev": true, - "requires": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "requires": { - "has-bigints": "^1.0.1" - } - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "optional": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true - }, - "is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", - "dev": true - }, - "is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true - }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", - "dev": true - }, - "is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true - }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", - "dev": true, - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - } - }, - "is-weakmap": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", - "dev": true - }, - "is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-weakset": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", - "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "dev": true, - "requires": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - } - }, - "istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - } - }, - "istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "jest": { - "version": "29.4.1", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.4.1.tgz", - "integrity": "sha512-cknimw7gAXPDOmj0QqztlxVtBVCw2lYY9CeIE5N6kD+kET1H4H79HSNISJmijb1HF+qk+G+ploJgiDi5k/fRlg==", - "dev": true, - "requires": { - "@jest/core": "^29.4.1", - "@jest/types": "^29.4.1", - "import-local": "^3.0.2", - "jest-cli": "^29.4.1" - } - }, - "jest-changed-files": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.5.0.tgz", - "integrity": "sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==", - "dev": true, - "requires": { - "execa": "^5.0.0", - "p-limit": "^3.1.0" - } - }, - "jest-circus": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.5.0.tgz", - "integrity": "sha512-gq/ongqeQKAplVxqJmbeUOJJKkW3dDNPY8PjhJ5G0lBRvu0e3EWGxGy5cI4LAGA7gV2UHCtWBI4EMXK8c9nQKA==", - "dev": true, - "requires": { - "@jest/environment": "^29.5.0", - "@jest/expect": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.5.0", - "jest-matcher-utils": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-runtime": "^29.5.0", - "jest-snapshot": "^29.5.0", - "jest-util": "^29.5.0", - "p-limit": "^3.1.0", - "pretty-format": "^29.5.0", - "pure-rand": "^6.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-cli": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.5.0.tgz", - "integrity": "sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==", - "dev": true, - "requires": { - "@jest/core": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/types": "^29.5.0", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^29.5.0", - "jest-util": "^29.5.0", - "jest-validate": "^29.5.0", - "prompts": "^2.0.1", - "yargs": "^17.3.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-config": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.5.0.tgz", - "integrity": "sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==", - "dev": true, - "requires": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.5.0", - "@jest/types": "^29.5.0", - "babel-jest": "^29.5.0", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^29.5.0", - "jest-environment-node": "^29.5.0", - "jest-get-type": "^29.4.3", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.5.0", - "jest-runner": "^29.5.0", - "jest-util": "^29.5.0", - "jest-validate": "^29.5.0", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^29.5.0", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-diff": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.5.0.tgz", - "integrity": "sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^29.4.3", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.5.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-docblock": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz", - "integrity": "sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==", - "dev": true, - "requires": { - "detect-newline": "^3.0.0" - } - }, - "jest-each": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.5.0.tgz", - "integrity": "sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA==", - "dev": true, - "requires": { - "@jest/types": "^29.5.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.4.3", - "jest-util": "^29.5.0", - "pretty-format": "^29.5.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-environment-node": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.5.0.tgz", - "integrity": "sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw==", - "dev": true, - "requires": { - "@jest/environment": "^29.5.0", - "@jest/fake-timers": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "jest-mock": "^29.5.0", - "jest-util": "^29.5.0" - } - }, - "jest-get-type": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", - "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", - "dev": true - }, - "jest-haste-map": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.5.0.tgz", - "integrity": "sha512-IspOPnnBro8YfVYSw6yDRKh/TiCdRngjxeacCps1cQ9cgVN6+10JUcuJ1EabrgYLOATsIAigxA0rLR9x/YlrSA==", - "dev": true, - "requires": { - "@jest/types": "^29.5.0", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.3.2", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.4.3", - "jest-util": "^29.5.0", - "jest-worker": "^29.5.0", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - } - }, - "jest-leak-detector": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.5.0.tgz", - "integrity": "sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow==", - "dev": true, - "requires": { - "jest-get-type": "^29.4.3", - "pretty-format": "^29.5.0" - } - }, - "jest-matcher-utils": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz", - "integrity": "sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^29.5.0", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.5.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-message-util": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.5.0.tgz", - "integrity": "sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.5.0", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.5.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-mock": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.5.0.tgz", - "integrity": "sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw==", - "dev": true, - "requires": { - "@jest/types": "^29.5.0", - "@types/node": "*", - "jest-util": "^29.5.0" - } - }, - "jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true, - "requires": {} - }, - "jest-regex-util": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.4.3.tgz", - "integrity": "sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==", - "dev": true - }, - "jest-resolve": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.5.0.tgz", - "integrity": "sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.5.0", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.5.0", - "jest-validate": "^29.5.0", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-resolve-dependencies": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.5.0.tgz", - "integrity": "sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg==", - "dev": true, - "requires": { - "jest-regex-util": "^29.4.3", - "jest-snapshot": "^29.5.0" - } - }, - "jest-runner": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.5.0.tgz", - "integrity": "sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ==", - "dev": true, - "requires": { - "@jest/console": "^29.5.0", - "@jest/environment": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.4.3", - "jest-environment-node": "^29.5.0", - "jest-haste-map": "^29.5.0", - "jest-leak-detector": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-resolve": "^29.5.0", - "jest-runtime": "^29.5.0", - "jest-util": "^29.5.0", - "jest-watcher": "^29.5.0", - "jest-worker": "^29.5.0", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-runtime": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.5.0.tgz", - "integrity": "sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw==", - "dev": true, - "requires": { - "@jest/environment": "^29.5.0", - "@jest/fake-timers": "^29.5.0", - "@jest/globals": "^29.5.0", - "@jest/source-map": "^29.4.3", - "@jest/test-result": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-mock": "^29.5.0", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.5.0", - "jest-snapshot": "^29.5.0", - "jest-util": "^29.5.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-snapshot": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.5.0.tgz", - "integrity": "sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==", - "dev": true, - "requires": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/babel__traverse": "^7.0.6", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.5.0", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.5.0", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-util": "^29.5.0", - "natural-compare": "^1.4.0", - "pretty-format": "^29.5.0", - "semver": "^7.3.5" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "jest-util": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.5.0.tgz", - "integrity": "sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==", - "dev": true, - "requires": { - "@jest/types": "^29.5.0", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-validate": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.5.0.tgz", - "integrity": "sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ==", - "dev": true, - "requires": { - "@jest/types": "^29.5.0", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.4.3", - "leven": "^3.1.0", - "pretty-format": "^29.5.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-watcher": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.5.0.tgz", - "integrity": "sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA==", - "dev": true, - "requires": { - "@jest/test-result": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.5.0", - "string-length": "^4.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-worker": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.5.0.tgz", - "integrity": "sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==", - "dev": true, - "requires": { - "@types/node": "*", - "jest-util": "^29.5.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "js-sdsl": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.0.tgz", - "integrity": "sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg==", - "dev": true - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true - }, - "jsx-ast-utils": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", - "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", - "dev": true, - "requires": { - "array-includes": "^3.1.5", - "object.assign": "^4.1.3" - } - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true - }, - "language-subtag-registry": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", - "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", - "dev": true - }, - "language-tags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", - "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", - "dev": true, - "requires": { - "language-subtag-registry": "~0.3.2" - } - }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "peer": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "requires": { - "tmpl": "1.0.5" - } - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true - }, - "node-releases": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", - "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", - "dev": true - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "peer": true - }, - "object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", - "dev": true - }, - "object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - } - }, - "object.entries": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", - "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "object.fromentries": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", - "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "object.hasown": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", - "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", - "dev": true, - "peer": true, - "requires": { - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "object.values": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", - "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, - "pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - } - } - }, - "pngjs": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-7.0.0.tgz", - "integrity": "sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==", - "dev": true - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true - }, - "pretty-format": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz", - "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==", - "dev": true, - "requires": { - "@jest/schemas": "^29.4.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - } - } - }, - "prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - } - }, - "prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, - "peer": true, - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - }, - "dependencies": { - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true, - "peer": true - } - } - }, - "punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "dev": true - }, - "pure-rand": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.1.tgz", - "integrity": "sha512-t+x1zEHDjBwkDGY5v5ApnZ/utcd4XYDiJsaQQoptTXgUXX95sDg1elCdJghzicm7n2mbCBJ3uYWr6M22SO19rg==", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "optional": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true - }, - "regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", - "dev": true, - "requires": { - "regenerate": "^1.4.2" - } - }, - "regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true - }, - "regenerator-transform": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", - "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.8.4" - } - }, - "regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - } - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, - "regexpu-core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", - "dev": true, - "requires": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - } - }, - "regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "dev": true, - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true - } - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true - }, - "resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", - "dev": true, - "requires": { - "is-core-module": "^2.11.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "requires": { - "resolve-from": "^5.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - } - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "resolve.exports": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", - "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, - "requires": { - "escape-string-regexp": "^2.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true - } - } - }, - "stop-iteration-iterator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", - "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", - "dev": true, - "requires": { - "internal-slot": "^1.0.4" - } - }, - "string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "requires": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - } - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "dependencies": { - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - } - } - }, - "string.prototype.matchall": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", - "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.3", - "side-channel": "^1.0.4" - } - }, - "string.prototype.trim": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", - "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true - }, - "test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "tsconfig-paths": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", - "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", - "dev": true, - "requires": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true - } - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true - }, - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true - }, - "typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" - } - }, - "typescript": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", - "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", - "dev": true, - "peer": true - }, - "unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - } - }, - "unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true - }, - "unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, - "requires": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "dev": true - }, - "unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "dev": true - }, - "update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", - "dev": true, - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - } - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "v8-to-istanbul": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", - "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" - } - }, - "walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "requires": { - "makeerror": "1.0.12" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - } - }, - "which-collection": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", - "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", - "dev": true, - "requires": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" - } - }, - "which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", - "dev": true, - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" - } - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - } - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "yargs": { - "version": "17.7.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", - "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", - "dev": true, - "requires": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - } - }, - "yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true - } - } -} diff --git a/package.json b/package.json deleted file mode 100644 index 95d6d28942..0000000000 --- a/package.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "name": "javascript-algorithms-and-data-structures", - "version": "0.0.4", - "description": "Algorithms and data-structures implemented on JavaScript", - "repository": { - "type": "git", - "url": "git+https://github.com/trekhleb/javascript-algorithms.git" - }, - "keywords": [ - "computer-science", - "cs", - "algorithms", - "data-structures", - "javascript", - "algorithm", - "javascript-algorithms", - "sorting-algorithms", - "graph", - "tree", - "interview", - "interview-preparation" - ], - "author": "Oleksii Trekhleb (https://trekhleb.dev)", - "license": "MIT", - "bugs": { - "url": "https://github.com/trekhleb/javascript-algorithms/issues" - }, - "homepage": "https://github.com/trekhleb/javascript-algorithms#readme", - "main": "index.js", - "scripts": { - "lint": "eslint ./src/**", - "test": "jest", - "coverage": "npm run test -- --coverage", - "ci": "npm run lint && npm run coverage", - "prepare": "husky install" - }, - "devDependencies": { - "@babel/cli": "7.20.7", - "@babel/preset-env": "7.20.2", - "@types/jest": "29.4.0", - "eslint": "8.33.0", - "eslint-config-airbnb": "19.0.4", - "eslint-plugin-import": "2.27.5", - "eslint-plugin-jest": "27.2.1", - "eslint-plugin-jsx-a11y": "6.7.1", - "husky": "8.0.3", - "jest": "29.4.1", - "pngjs": "^7.0.0" - }, - "engines": { - "node": ">=16.15.0", - "npm": ">=8.5.5" - } -} diff --git a/src/algorithms/cryptography/caesar-cipher/README.md b/src/algorithms/cryptography/caesar-cipher/README.md deleted file mode 100644 index d648a62ee9..0000000000 --- a/src/algorithms/cryptography/caesar-cipher/README.md +++ /dev/null @@ -1,33 +0,0 @@ -# Caesar Cipher Algorithm - -_Read this in other languages:_ -[_Русский_](README.ru-RU.md) - -In cryptography, a **Caesar cipher**, also known as **Caesar's cipher**, the **shift cipher**, **Caesar's code** or **Caesar shift**, is one of the simplest and most widely known encryption techniques. It is a type of substitution cipher in which each letter in the plaintext is replaced by a letter some fixed number of positions down the alphabet. For example, with a left shift of `3`, `D` would be replaced by `A`, `E` would become `B`, and so on. The method is named after Julius Caesar, who used it in his private correspondence. - -![Caesar Cipher Algorithm](https://upload.wikimedia.org/wikipedia/commons/4/4a/Caesar_cipher_left_shift_of_3.svg) - -## Example - -The transformation can be represented by aligning two alphabets; the cipher alphabet is the plain alphabet rotated left or right by some number of positions. For instance, here is a Caesar cipher using a left rotation of three places, equivalent to a right shift of 23 (the shift parameter is used as the key): - -```text -Plain: ABCDEFGHIJKLMNOPQRSTUVWXYZ -Cipher: XYZABCDEFGHIJKLMNOPQRSTUVW -``` - -When encrypting, a person looks up each letter of the message in the "plain" line and writes down the corresponding letter in the "cipher" line. - -```text -Plaintext: THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG -Ciphertext: QEB NRFZH YOLTK CLU GRJMP LSBO QEB IXWV ALD -``` - -## Complexity - -- Time: `O(|n|)` -- Space: `O(|n|)` - -## References - -- [Caesar cipher on Wikipedia](https://en.wikipedia.org/wiki/Caesar_cipher) diff --git a/src/algorithms/cryptography/caesar-cipher/README.ru-RU.md b/src/algorithms/cryptography/caesar-cipher/README.ru-RU.md deleted file mode 100644 index dee4d14cd3..0000000000 --- a/src/algorithms/cryptography/caesar-cipher/README.ru-RU.md +++ /dev/null @@ -1,29 +0,0 @@ -# Алгоритм шифра Цезаря - -В криптографии **шифр Цезаря**, также известный как **шифр сдвига**, **код Цезаря** или **сдвиг Цезаря**, является одним из самых простых и широко известных методов шифрования. Это вид шифра подстановки, в котором каждый символ в открытом тексте заменяется символом, находящимся на некотором постоянном числе позиций левее или правее него в алфавите. Например, в шифре со сдвигом вправо на `3`, `D` была бы заменена на `A`, `E` станет `B`, и так далее. Метод назван в честь Юлия Цезаря, который использовал его в своей личной переписке. - -![Алгоритм шифра Цезаря](https://upload.wikimedia.org/wikipedia/commons/4/4a/Caesar_cipher_left_shift_of_3.svg) - -## Пример -Это преобразование можно представить как выравнивание двух алфавитов; алфавит шифра - это обычный алфавит, повёрнутый влево или вправо на некоторое количество позиций. Например, здесь приведен шифр Цезаря, использующий поворот влево на три позиции, что эквивалентно сдвигу вправо на 23 (параметр сдвига используется в качестве ключа): - -```text -Обычный: ABCDEFGHIJKLMNOPQRSTUVWXYZ -Шифрованный: XYZABCDEFGHIJKLMNOPQRSTUVW -``` - -При шифровании человек просматривает каждую букву сообщения в "открытой" строке и записывает соответствующую букву в "шифрованной" строке. - -```text -Обычный текст: THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG -Шифрованный текст: QEB NRFZH YOLTK CLU GRJMP LSBO QEB IXWV ALD -``` - -## Сложность - -- Время: `O(|n|)` -- Пространство: `O(|n|)` - -## Ссылки - -- [Шифр Цезаря на Wikipedia](https://ru.wikipedia.org/wiki/Шифр_Цезаря) diff --git a/src/algorithms/cryptography/caesar-cipher/__test__/caesarCipher.test.js b/src/algorithms/cryptography/caesar-cipher/__test__/caesarCipher.test.js deleted file mode 100644 index 90521cedf8..0000000000 --- a/src/algorithms/cryptography/caesar-cipher/__test__/caesarCipher.test.js +++ /dev/null @@ -1,40 +0,0 @@ -import { caesarCipherEncrypt, caesarCipherDecrypt } from '../caesarCipher'; - -describe('caesarCipher', () => { - it('should not change a string with zero shift', () => { - expect(caesarCipherEncrypt('abcd', 0)).toBe('abcd'); - expect(caesarCipherDecrypt('abcd', 0)).toBe('abcd'); - }); - - it('should cipher a string with different shifts', () => { - expect(caesarCipherEncrypt('abcde', 3)).toBe('defgh'); - expect(caesarCipherDecrypt('defgh', 3)).toBe('abcde'); - - expect(caesarCipherEncrypt('abcde', 1)).toBe('bcdef'); - expect(caesarCipherDecrypt('bcdef', 1)).toBe('abcde'); - - expect(caesarCipherEncrypt('xyz', 1)).toBe('yza'); - expect(caesarCipherDecrypt('yza', 1)).toBe('xyz'); - }); - - it('should be case insensitive', () => { - expect(caesarCipherEncrypt('ABCDE', 3)).toBe('defgh'); - }); - - it('should correctly handle an empty strings', () => { - expect(caesarCipherEncrypt('', 3)).toBe(''); - }); - - it('should not cipher unknown chars', () => { - expect(caesarCipherEncrypt('ab2cde', 3)).toBe('de2fgh'); - expect(caesarCipherDecrypt('de2fgh', 3)).toBe('ab2cde'); - }); - - it('should encrypt and decrypt full phrases', () => { - expect(caesarCipherEncrypt('THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG', 23)) - .toBe('qeb nrfzh yoltk clu grjmp lsbo qeb ixwv ald'); - - expect(caesarCipherDecrypt('qeb nrfzh yoltk clu grjmp lsbo qeb ixwv ald', 23)) - .toBe('the quick brown fox jumps over the lazy dog'); - }); -}); diff --git a/src/algorithms/cryptography/caesar-cipher/caesarCipher.js b/src/algorithms/cryptography/caesar-cipher/caesarCipher.js deleted file mode 100644 index ba92299062..0000000000 --- a/src/algorithms/cryptography/caesar-cipher/caesarCipher.js +++ /dev/null @@ -1,58 +0,0 @@ -// Create alphabet array: ['a', 'b', 'c', ..., 'z']. -const englishAlphabet = 'abcdefghijklmnopqrstuvwxyz'.split(''); - -/** - * Generates a cipher map out of the alphabet. - * Example with a shift 3: {'a': 'd', 'b': 'e', 'c': 'f', ...} - * - * @param {string[]} alphabet - i.e. ['a', 'b', 'c', ... , 'z'] - * @param {number} shift - i.e. 3 - * @return {Object} - i.e. {'a': 'd', 'b': 'e', 'c': 'f', ..., 'z': 'c'} - */ -const getCipherMap = (alphabet, shift) => { - return alphabet - .reduce((charsMap, currentChar, charIndex) => { - const charsMapClone = { ...charsMap }; - // Making the shift to be cyclic (i.e. with a shift of 1 - 'z' would be mapped to 'a'). - let encryptedCharIndex = (charIndex + shift) % alphabet.length; - // Support negative shifts for creating a map for decryption - // (i.e. with shift -1 - 'a' would be mapped to 'z'). - if (encryptedCharIndex < 0) { - encryptedCharIndex += alphabet.length; - } - charsMapClone[currentChar] = alphabet[encryptedCharIndex]; - return charsMapClone; - }, {}); -}; - -/** - * @param {string} str - * @param {number} shift - * @param {string[]} alphabet - * @return {string} - */ -export const caesarCipherEncrypt = (str, shift, alphabet = englishAlphabet) => { - // Create a cipher map: - const cipherMap = getCipherMap(alphabet, shift); - return str - .toLowerCase() - .split('') - .map((char) => cipherMap[char] || char) - .join(''); -}; - -/** - * @param {string} str - * @param {number} shift - * @param {string[]} alphabet - * @return {string} - */ -export const caesarCipherDecrypt = (str, shift, alphabet = englishAlphabet) => { - // Create a cipher map: - const cipherMap = getCipherMap(alphabet, -shift); - return str - .toLowerCase() - .split('') - .map((char) => cipherMap[char] || char) - .join(''); -}; diff --git a/src/algorithms/cryptography/hill-cipher/README.md b/src/algorithms/cryptography/hill-cipher/README.md deleted file mode 100644 index bf496e2be9..0000000000 --- a/src/algorithms/cryptography/hill-cipher/README.md +++ /dev/null @@ -1,96 +0,0 @@ -# Hill Cipher - -The **Hill cipher** is a [polygraphic substitution](https://en.wikipedia.org/wiki/Polygraphic_substitution) cipher based on linear algebra. - -Each letter is represented by a number [modulo](https://en.wikipedia.org/wiki/Modular_arithmetic) `26`. Though this is not an essential feature of the cipher, this simple scheme is often used: - -| **Letter** | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | -| ------ | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| **Number** | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | - -## Encryption - -To encrypt a message, each block of `n` letters (considered as an `n`-component vector) is multiplied by an invertible `n × n` matrix, against modulus `26`. - -The matrix used for encryption is the _cipher key_, and it should be chosen randomly from the set of invertible `n × n` matrices (modulo `26`). The cipher can, of course, be adapted to an alphabet with any number of letters; all arithmetic just needs to be done modulo the number of letters instead of modulo `26`. - -Consider the message `ACT`, and the key below (or `GYB/NQK/URP` in letters): - -``` -| 6 24 1 | -| 13 16 10 | -| 20 17 15 | -``` - -Since `A` is`0`, `C` is `2` and `T` is `19`, the message is the vector: - -``` -| 0 | -| 2 | -| 19 | -``` - -Thus, the enciphered vector is given by: - -``` -| 6 24 1 | | 0 | | 67 | | 15 | -| 13 16 10 | | 2 | = | 222 | ≡ | 14 | (mod 26) -| 20 17 15 | | 19 | | 319 | | 7 | -``` - -which corresponds to a ciphertext of `POH`. - -Now, suppose that our message is instead `CAT` (notice how we're using the same letters as in `ACT` here), or: - -``` -| 2 | -| 0 | -| 19 | -``` - -This time, the enciphered vector is given by: - -``` -| 6 24 1 | | 2 | | 31 | | 5 | -| 13 16 10 | | 0 | = | 216 | ≡ | 8 | (mod 26) -| 20 17 15 | | 19 | | 325 | | 13 | -``` - -which corresponds to a ciphertext of `FIN`. Every letter has changed. - -## Decryption - -To decrypt the message, each block is multiplied by the inverse of the matrix used for encryption. We turn the ciphertext back into a vector, then simply multiply by the inverse matrix of the key matrix (`IFK/VIV/VMI` in letters). (See [matrix inversion](https://en.wikipedia.org/wiki/Matrix_inversion) for methods to calculate the inverse matrix.) We find that, modulo 26, the inverse of the matrix used in the previous example is: - -``` - -1 -| 6 24 1 | | 8 5 10 | -| 13 16 10 | (mod 26) ≡ | 21 8 21 | -| 20 17 15 | | 21 12 8 | -``` - -Taking the previous example ciphertext of `POH`, we get: - -``` -| 8 5 10 | | 15 | | 260 | | 0 | -| 21 8 21 | | 14 | = | 574 | ≡ | 2 | (mod 26) -| 21 12 8 | | 7 | | 539 | | 19 | -``` - -which gets us back to `ACT`, as expected. - -## Defining the encrypting matrix - -Two complications exist in picking the encrypting matrix: - -1. Not all matrices have an inverse. The matrix will have an inverse if and only if its [determinant](https://en.wikipedia.org/wiki/Determinant) is not zero. -2. The determinant of the encrypting matrix must not have any common factors with the modular base. - -Thus, if we work modulo `26` as above, the determinant must be nonzero, and must not be divisible by `2` or `13`. If the determinant is `0`, or has common factors with the modular base, then the matrix cannot be used in the Hill cipher, and another matrix must be chosen (otherwise it will not be possible to decrypt). Fortunately, matrices which satisfy the conditions to be used in the Hill cipher are fairly common. - -## References - -- [Hill cipher on Wikipedia](https://en.wikipedia.org/wiki/Hill_cipher) -- [Matrix inversion on MathIsFun](https://www.mathsisfun.com/algebra/matrix-inverse.html) -- [GeeksForGeeks](https://www.geeksforgeeks.org/hill-cipher/) - diff --git a/src/algorithms/cryptography/hill-cipher/_test_/hillCipher.test.js b/src/algorithms/cryptography/hill-cipher/_test_/hillCipher.test.js deleted file mode 100644 index f540ae9ff1..0000000000 --- a/src/algorithms/cryptography/hill-cipher/_test_/hillCipher.test.js +++ /dev/null @@ -1,46 +0,0 @@ -import { hillCipherEncrypt, hillCipherDecrypt } from '../hillCipher'; - -describe('hillCipher', () => { - it('should throw an exception when trying to decipher', () => { - expect(hillCipherDecrypt).toThrowError('This method is not implemented yet'); - }); - - it('should throw an error when message or keyString contains none letter character', () => { - const invalidCharacterInMessage = () => { - hillCipherEncrypt('hell3', 'helloworld'); - }; - const invalidCharacterInKeyString = () => { - hillCipherEncrypt('hello', 'hel12world'); - }; - expect(invalidCharacterInMessage).toThrowError( - 'The message and key string can only contain letters', - ); - expect(invalidCharacterInKeyString).toThrowError( - 'The message and key string can only contain letters', - ); - }); - - it('should throw an error when the length of the keyString has a square root which is not integer', () => { - const invalidLengthOfKeyString = () => { - hillCipherEncrypt('ab', 'ab'); - }; - expect(invalidLengthOfKeyString).toThrowError( - 'Invalid key string length. The square root of the key string must be an integer', - ); - }); - - it('should throw an error when the length of the keyString does not equal to the power of length of the message', () => { - const invalidLengthOfKeyString = () => { - hillCipherEncrypt('ab', 'aaabbbccc'); - }; - expect(invalidLengthOfKeyString).toThrowError( - 'Invalid key string length. The key length must be a square of message length', - ); - }); - - it('should encrypt passed message using Hill Cipher', () => { - expect(hillCipherEncrypt('ACT', 'GYBNQKURP')).toBe('POH'); - expect(hillCipherEncrypt('CAT', 'GYBNQKURP')).toBe('FIN'); - expect(hillCipherEncrypt('GFG', 'HILLMAGIC')).toBe('SWK'); - }); -}); diff --git a/src/algorithms/cryptography/hill-cipher/hillCipher.js b/src/algorithms/cryptography/hill-cipher/hillCipher.js deleted file mode 100644 index 1fe3033860..0000000000 --- a/src/algorithms/cryptography/hill-cipher/hillCipher.js +++ /dev/null @@ -1,87 +0,0 @@ -import * as mtrx from '../../math/matrix/Matrix'; - -// The code of an 'A' character (equals to 65). -const alphabetCodeShift = 'A'.codePointAt(0); -const englishAlphabetSize = 26; - -/** - * Generates key matrix from given keyString. - * - * @param {string} keyString - a string to build a key matrix (must be of matrixSize^2 length). - * @return {number[][]} keyMatrix - */ -const generateKeyMatrix = (keyString) => { - const matrixSize = Math.sqrt(keyString.length); - if (!Number.isInteger(matrixSize)) { - throw new Error( - 'Invalid key string length. The square root of the key string must be an integer', - ); - } - let keyStringIndex = 0; - return mtrx.generate( - [matrixSize, matrixSize], - // Callback to get a value of each matrix cell. - // The order the matrix is being filled in is from left to right, from top to bottom. - () => { - // A → 0, B → 1, ..., a → 32, b → 33, ... - const charCodeShifted = (keyString.codePointAt(keyStringIndex)) % alphabetCodeShift; - keyStringIndex += 1; - return charCodeShifted; - }, - ); -}; - -/** - * Generates a message vector from a given message. - * - * @param {string} message - the message to encrypt. - * @return {number[][]} messageVector - */ -const generateMessageVector = (message) => { - return mtrx.generate( - [message.length, 1], - // Callback to get a value of each matrix cell. - // The order the matrix is being filled in is from left to right, from top to bottom. - (cellIndices) => { - const rowIndex = cellIndices[0]; - return message.codePointAt(rowIndex) % alphabetCodeShift; - }, - ); -}; - -/** - * Encrypts the given message using Hill Cipher. - * - * @param {string} message plaintext - * @param {string} keyString - * @return {string} cipherString - */ -export function hillCipherEncrypt(message, keyString) { - // The keyString and message can only contain letters. - const onlyLettersRegExp = /^[a-zA-Z]+$/; - if (!onlyLettersRegExp.test(message) || !onlyLettersRegExp.test(keyString)) { - throw new Error('The message and key string can only contain letters'); - } - - const keyMatrix = generateKeyMatrix(keyString); - const messageVector = generateMessageVector(message); - - // keyString.length must equal to square of message.length - if (keyMatrix.length !== message.length) { - throw new Error('Invalid key string length. The key length must be a square of message length'); - } - - const cipherVector = mtrx.dot(keyMatrix, messageVector); - let cipherString = ''; - for (let row = 0; row < cipherVector.length; row += 1) { - const item = cipherVector[row]; - cipherString += String.fromCharCode((item % englishAlphabetSize) + alphabetCodeShift); - } - - return cipherString; -} - -// @TODO: Implement this method. -export const hillCipherDecrypt = () => { - throw new Error('This method is not implemented yet'); -}; diff --git a/src/algorithms/cryptography/polynomial-hash/PolynomialHash.js b/src/algorithms/cryptography/polynomial-hash/PolynomialHash.js deleted file mode 100644 index d6f774efd8..0000000000 --- a/src/algorithms/cryptography/polynomial-hash/PolynomialHash.js +++ /dev/null @@ -1,89 +0,0 @@ -const DEFAULT_BASE = 37; -const DEFAULT_MODULUS = 101; - -export default class PolynomialHash { - /** - * @param {number} [base] - Base number that is used to create the polynomial. - * @param {number} [modulus] - Modulus number that keeps the hash from overflowing. - */ - constructor({ base = DEFAULT_BASE, modulus = DEFAULT_MODULUS } = {}) { - this.base = base; - this.modulus = modulus; - } - - /** - * Function that creates hash representation of the word. - * - * Time complexity: O(word.length). - * - * @param {string} word - String that needs to be hashed. - * @return {number} - */ - hash(word) { - const charCodes = Array.from(word).map((char) => this.charToNumber(char)); - - let hash = 0; - for (let charIndex = 0; charIndex < charCodes.length; charIndex += 1) { - hash *= this.base; - hash += charCodes[charIndex]; - hash %= this.modulus; - } - - return hash; - } - - /** - * Function that creates hash representation of the word - * based on previous word (shifted by one character left) hash value. - * - * Recalculates the hash representation of a word so that it isn't - * necessary to traverse the whole word again. - * - * Time complexity: O(1). - * - * @param {number} prevHash - * @param {string} prevWord - * @param {string} newWord - * @return {number} - */ - roll(prevHash, prevWord, newWord) { - let hash = prevHash; - - const prevValue = this.charToNumber(prevWord[0]); - const newValue = this.charToNumber(newWord[newWord.length - 1]); - - let prevValueMultiplier = 1; - for (let i = 1; i < prevWord.length; i += 1) { - prevValueMultiplier *= this.base; - prevValueMultiplier %= this.modulus; - } - - hash += this.modulus; - hash -= (prevValue * prevValueMultiplier) % this.modulus; - - hash *= this.base; - hash += newValue; - hash %= this.modulus; - - return hash; - } - - /** - * Converts char to number. - * - * @param {string} char - * @return {number} - */ - charToNumber(char) { - let charCode = char.codePointAt(0); - - // Check if character has surrogate pair. - const surrogate = char.codePointAt(1); - if (surrogate !== undefined) { - const surrogateShift = 2 ** 16; - charCode += surrogate * surrogateShift; - } - - return charCode; - } -} diff --git a/src/algorithms/cryptography/polynomial-hash/README.md b/src/algorithms/cryptography/polynomial-hash/README.md deleted file mode 100644 index 7355d6649b..0000000000 --- a/src/algorithms/cryptography/polynomial-hash/README.md +++ /dev/null @@ -1,116 +0,0 @@ -# Polynomial Rolling Hash - -## Hash Function - -**Hash functions** are used to map large data sets of elements of an arbitrary -length (*the keys*) to smaller data sets of elements of a fixed length -(*the fingerprints*). - -The basic application of hashing is efficient testing of equality of keys by -comparing their fingerprints. - -A *collision* happens when two different keys have the same fingerprint. The way -in which collisions are handled is crucial in most applications of hashing. -Hashing is particularly useful in construction of efficient practical algorithms. - -## Rolling Hash - -A **rolling hash** (also known as recursive hashing or rolling checksum) is a hash -function where the input is hashed in a window that moves through the input. - -A few hash functions allow a rolling hash to be computed very quickly — the new -hash value is rapidly calculated given only the following data: - -- old hash value, -- the old value removed from the window, -- and the new value added to the window. - -## Polynomial String Hashing - -An ideal hash function for strings should obviously depend both on the *multiset* of -the symbols present in the key and on the *order* of the symbols. The most common -family of such hash functions treats the symbols of a string as coefficients of -a *polynomial* with an integer variable `p` and computes its value modulo an -integer constant `M`: - -The *Rabin–Karp string search algorithm* is often explained using a very simple -rolling hash function that only uses multiplications and -additions - **polynomial rolling hash**: - -> H(s0, s1, ..., sk) = s0 * pk-1 + s1 * pk-2 + ... + sk * p0 - -where `p` is a constant, and *(s1, ... , sk)* are the input -characters. - -For example we can convert short strings to key numbers by multiplying digit codes by -powers of a constant. The three letter word `ace` could turn into a number -by calculating: - -> key = 1 * 262 + 3 * 261 + 5 * 260 - -In order to avoid manipulating huge `H` values, all math is done modulo `M`. - -> H(s0, s1, ..., sk) = (s0 * pk-1 + s1 * pk-2 + ... + sk * p0) mod M - -A careful choice of the parameters `M`, `p` is important to obtain “good” -properties of the hash function, i.e., low collision rate. - -This approach has the desirable attribute of involving all the characters in the -input string. The calculated key value can then be hashed into an array index in -the usual way: - -```javascript -function hash(key, arraySize) { - const base = 13; - - let hash = 0; - for (let charIndex = 0; charIndex < key.length; charIndex += 1) { - const charCode = key.charCodeAt(charIndex); - hash += charCode * (base ** (key.length - charIndex - 1)); - } - - return hash % arraySize; -} -``` - -The `hash()` method is not as efficient as it might be. Other than the -character conversion, there are two multiplications and an addition inside -the loop. We can eliminate one multiplication by using **Horner's method*: - -> a4 * x4 + a3 * x3 + a2 * x2 + a1 * x1 + a0 = (((a4 * x + a3) * x + a2) * x + a1) * x + a0 - -In other words: - -> Hi = (P * Hi-1 + Si) mod M - -The `hash()` cannot handle long strings because the hashVal exceeds the size of -int. Notice that the key always ends up being less than the array size. -In Horner's method we can apply the modulo (%) operator at each step in the -calculation. This gives the same result as applying the modulo operator once at -the end, but avoids the overflow. - -```javascript -function hash(key, arraySize) { - const base = 13; - - let hash = 0; - for (let charIndex = 0; charIndex < key.length; charIndex += 1) { - const charCode = key.charCodeAt(charIndex); - hash = (hash * base + charCode) % arraySize; - } - - return hash; -} -``` - -Polynomial hashing has a rolling property: the fingerprints can be updated -efficiently when symbols are added or removed at the ends of the string -(provided that an array of powers of p modulo M of sufficient length is stored). -The popular Rabin–Karp pattern matching algorithm is based on this property - -## References - -- [Where to Use Polynomial String Hashing](https://www.mii.lt/olympiads_in_informatics/pdf/INFOL119.pdf) -- [Hashing on uTexas](https://www.cs.utexas.edu/~mitra/csSpring2017/cs313/lectures/hash.html) -- [Hash Function on Wikipedia](https://en.wikipedia.org/wiki/Hash_function) -- [Rolling Hash on Wikipedia](https://en.wikipedia.org/wiki/Rolling_hash) diff --git a/src/algorithms/cryptography/polynomial-hash/SimplePolynomialHash.js b/src/algorithms/cryptography/polynomial-hash/SimplePolynomialHash.js deleted file mode 100644 index 8e1d5123f4..0000000000 --- a/src/algorithms/cryptography/polynomial-hash/SimplePolynomialHash.js +++ /dev/null @@ -1,63 +0,0 @@ -const DEFAULT_BASE = 17; - -export default class SimplePolynomialHash { - /** - * @param {number} [base] - Base number that is used to create the polynomial. - */ - constructor(base = DEFAULT_BASE) { - this.base = base; - } - - /** - * Function that creates hash representation of the word. - * - * Time complexity: O(word.length). - * - * @assumption: This version of the function doesn't use modulo operator. - * Thus it may produce number overflows by generating numbers that are - * bigger than Number.MAX_SAFE_INTEGER. This function is mentioned here - * for simplicity and LEARNING reasons. - * - * @param {string} word - String that needs to be hashed. - * @return {number} - */ - hash(word) { - let hash = 0; - for (let charIndex = 0; charIndex < word.length; charIndex += 1) { - hash += word.charCodeAt(charIndex) * (this.base ** charIndex); - } - - return hash; - } - - /** - * Function that creates hash representation of the word - * based on previous word (shifted by one character left) hash value. - * - * Recalculates the hash representation of a word so that it isn't - * necessary to traverse the whole word again. - * - * Time complexity: O(1). - * - * @assumption: This function doesn't use modulo operator and thus is not safe since - * it may deal with numbers that are bigger than Number.MAX_SAFE_INTEGER. This - * function is mentioned here for simplicity and LEARNING reasons. - * - * @param {number} prevHash - * @param {string} prevWord - * @param {string} newWord - * @return {number} - */ - roll(prevHash, prevWord, newWord) { - let hash = prevHash; - - const prevValue = prevWord.charCodeAt(0); - const newValue = newWord.charCodeAt(newWord.length - 1); - - hash -= prevValue; - hash /= this.base; - hash += newValue * (this.base ** (newWord.length - 1)); - - return hash; - } -} diff --git a/src/algorithms/cryptography/polynomial-hash/__test__/PolynomialHash.test.js b/src/algorithms/cryptography/polynomial-hash/__test__/PolynomialHash.test.js deleted file mode 100644 index 0d487848dc..0000000000 --- a/src/algorithms/cryptography/polynomial-hash/__test__/PolynomialHash.test.js +++ /dev/null @@ -1,59 +0,0 @@ -import PolynomialHash from '../PolynomialHash'; - -describe('PolynomialHash', () => { - it('should calculate new hash based on previous one', () => { - const bases = [3, 79, 101, 3251, 13229, 122743, 3583213]; - const mods = [79, 101]; - const frameSizes = [5, 20]; - - // @TODO: Provide Unicode support. - const text = 'Lorem Ipsum is simply dummy text of the printing and ' - + 'typesetting industry. Lorem Ipsum has been the industry\'s standard ' - + 'galley of type and \u{ffff} scrambled it to make a type specimen book. It ' - + 'electronic 耀 typesetting, remaining essentially unchanged. It was ' - // + 'popularised in the \u{20005} \u{20000}1960s with the release of Letraset sheets ' - + 'publishing software like Aldus PageMaker 耀 including versions of Lorem.'; - - // Check hashing for different prime base. - bases.forEach((base) => { - mods.forEach((modulus) => { - const polynomialHash = new PolynomialHash({ base, modulus }); - - // Check hashing for different word lengths. - frameSizes.forEach((frameSize) => { - let previousWord = text.substr(0, frameSize); - let previousHash = polynomialHash.hash(previousWord); - - // Shift frame through the whole text. - for (let frameShift = 1; frameShift < (text.length - frameSize); frameShift += 1) { - const currentWord = text.substr(frameShift, frameSize); - const currentHash = polynomialHash.hash(currentWord); - const currentRollingHash = polynomialHash.roll(previousHash, previousWord, currentWord); - - // Check that rolling hash is the same as directly calculated hash. - expect(currentRollingHash).toBe(currentHash); - - previousWord = currentWord; - previousHash = currentHash; - } - }); - }); - }); - }); - - it('should generate numeric hashed less than 100', () => { - const polynomialHash = new PolynomialHash({ modulus: 100 }); - - expect(polynomialHash.hash('Some long text that is used as a key')).toBe(41); - expect(polynomialHash.hash('Test')).toBe(92); - expect(polynomialHash.hash('a')).toBe(97); - expect(polynomialHash.hash('b')).toBe(98); - expect(polynomialHash.hash('c')).toBe(99); - expect(polynomialHash.hash('d')).toBe(0); - expect(polynomialHash.hash('e')).toBe(1); - expect(polynomialHash.hash('ab')).toBe(87); - - // @TODO: Provide Unicode support. - expect(polynomialHash.hash('\u{20000}')).toBe(92); - }); -}); diff --git a/src/algorithms/cryptography/polynomial-hash/__test__/SimplePolynomialHash.test.js b/src/algorithms/cryptography/polynomial-hash/__test__/SimplePolynomialHash.test.js deleted file mode 100644 index 28c551966d..0000000000 --- a/src/algorithms/cryptography/polynomial-hash/__test__/SimplePolynomialHash.test.js +++ /dev/null @@ -1,52 +0,0 @@ -import SimplePolynomialHash from '../SimplePolynomialHash'; - -describe('PolynomialHash', () => { - it('should calculate new hash based on previous one', () => { - const bases = [3, 5]; - const frameSizes = [5, 10]; - - const text = 'Lorem Ipsum is simply dummy text of the printing and ' - + 'typesetting industry. Lorem Ipsum has been the industry\'s standard ' - + 'galley of type and \u{ffff} scrambled it to make a type specimen book. It ' - + 'electronic 耀 typesetting, remaining essentially unchanged. It was ' - + 'popularised in the 1960s with the release of Letraset sheets ' - + 'publishing software like Aldus 耀 PageMaker including versions of Lorem.'; - - // Check hashing for different prime base. - bases.forEach((base) => { - const polynomialHash = new SimplePolynomialHash(base); - - // Check hashing for different word lengths. - frameSizes.forEach((frameSize) => { - let previousWord = text.substr(0, frameSize); - let previousHash = polynomialHash.hash(previousWord); - - // Shift frame through the whole text. - for (let frameShift = 1; frameShift < (text.length - frameSize); frameShift += 1) { - const currentWord = text.substr(frameShift, frameSize); - const currentHash = polynomialHash.hash(currentWord); - const currentRollingHash = polynomialHash.roll(previousHash, previousWord, currentWord); - - // Check that rolling hash is the same as directly calculated hash. - expect(currentRollingHash).toBe(currentHash); - - previousWord = currentWord; - previousHash = currentHash; - } - }); - }); - }); - - it('should generate numeric hashed', () => { - const polynomialHash = new SimplePolynomialHash(); - - expect(polynomialHash.hash('Test')).toBe(604944); - expect(polynomialHash.hash('a')).toBe(97); - expect(polynomialHash.hash('b')).toBe(98); - expect(polynomialHash.hash('c')).toBe(99); - expect(polynomialHash.hash('d')).toBe(100); - expect(polynomialHash.hash('e')).toBe(101); - expect(polynomialHash.hash('ab')).toBe(1763); - expect(polynomialHash.hash('abc')).toBe(30374); - }); -}); diff --git a/src/algorithms/cryptography/rail-fence-cipher/README.md b/src/algorithms/cryptography/rail-fence-cipher/README.md deleted file mode 100644 index d01395f554..0000000000 --- a/src/algorithms/cryptography/rail-fence-cipher/README.md +++ /dev/null @@ -1,28 +0,0 @@ -# Rail Fence Cipher - -The **rail fence cipher** (also called a **zigzag cipher**) is a [transposition cipher](https://en.wikipedia.org/wiki/Transposition_cipher) in which the message is split across a set of rails on a fence for encoding. The fence is populated with the message's characters, starting at the top left and adding a character on each position, traversing them diagonally to the bottom. Upon reaching the last rail, the direction should then turn diagonal and upwards up to the very first rail in a zig-zag motion. Rinse and repeat until the message is fully disposed across the fence. The encoded message is the result of concatenating the text in each rail, from top to bottom. - -From [wikipedia](https://en.wikipedia.org/wiki/Rail_fence_cipher), this is what the message `WE ARE DISCOVERED. FLEE AT ONCE` looks like on a `3`-rail fence: - -``` -W . . . E . . . C . . . R . . . L . . . T . . . E -. E . R . D . S . O . E . E . F . E . A . O . C . -. . A . . . I . . . V . . . D . . . E . . . N . . -------------------------------------------------- - WECRLTEERDSOEEFEAOCAIVDEN -``` - -The message can then be decoded by re-creating the encoded fence, with the same traversal pattern, except characters should only be added on one rail at a time. To illustrate that, a dash can be added on the rails that are not supposed to be populated yet. This is what the fence would look like after populating the first rail, the dashes represent positions that were visited but not populated. - -``` -W . . . E . . . C . . . R . . . L . . . T . . . E -. - . - . - . - . - . - . - . - . - . - . - . - . -. . - . . . - . . . - . . . - . . . - . . . - . . -``` - -It's time to start populating the next rail once the number of visited fence positions is equal to the number of characters in the message. - -## References - -- [Rail Fence Cipher on Wikipedia](https://en.wikipedia.org/wiki/Rail_fence_cipher) -- [Rail Fence Cipher Calculator](https://crypto.interactive-maths.com/rail-fence-cipher.html) diff --git a/src/algorithms/cryptography/rail-fence-cipher/__test__/railFenceCipher.test.js b/src/algorithms/cryptography/rail-fence-cipher/__test__/railFenceCipher.test.js deleted file mode 100644 index db0c49eb6b..0000000000 --- a/src/algorithms/cryptography/rail-fence-cipher/__test__/railFenceCipher.test.js +++ /dev/null @@ -1,43 +0,0 @@ -import { encodeRailFenceCipher, decodeRailFenceCipher } from '../railFenceCipher'; - -describe('railFenceCipher', () => { - it('encodes a string correctly for base=3', () => { - expect(encodeRailFenceCipher('', 3)).toBe(''); - expect(encodeRailFenceCipher('12345', 3)).toBe( - '15243', - ); - expect(encodeRailFenceCipher('WEAREDISCOVEREDFLEEATONCE', 3)).toBe( - 'WECRLTEERDSOEEFEAOCAIVDEN', - ); - expect(encodeRailFenceCipher('Hello, World!', 3)).toBe( - 'Hoo!el,Wrdl l', - ); - }); - - it('decodes a string correctly for base=3', () => { - expect(decodeRailFenceCipher('', 3)).toBe(''); - expect(decodeRailFenceCipher('WECRLTEERDSOEEFEAOCAIVDEN', 3)).toBe( - 'WEAREDISCOVEREDFLEEATONCE', - ); - expect(decodeRailFenceCipher('Hoo!el,Wrdl l', 3)).toBe( - 'Hello, World!', - ); - expect(decodeRailFenceCipher('15243', 3)).toBe( - '12345', - ); - }); - - it('encodes a string correctly for base=4', () => { - expect(encodeRailFenceCipher('', 4)).toBe(''); - expect(encodeRailFenceCipher('THEYAREATTACKINGFROMTHENORTH', 4)).toBe( - 'TEKOOHRACIRMNREATANFTETYTGHH', - ); - }); - - it('decodes a string correctly for base=4', () => { - expect(decodeRailFenceCipher('', 4)).toBe(''); - expect(decodeRailFenceCipher('TEKOOHRACIRMNREATANFTETYTGHH', 4)).toBe( - 'THEYAREATTACKINGFROMTHENORTH', - ); - }); -}); diff --git a/src/algorithms/cryptography/rail-fence-cipher/railFenceCipher.js b/src/algorithms/cryptography/rail-fence-cipher/railFenceCipher.js deleted file mode 100644 index 7b58037e22..0000000000 --- a/src/algorithms/cryptography/rail-fence-cipher/railFenceCipher.js +++ /dev/null @@ -1,242 +0,0 @@ -/** - * @typedef {string[]} Rail - * @typedef {Rail[]} Fence - * @typedef {number} Direction - */ - -/** - * @constant DIRECTIONS - * @type {object} - * @property {Direction} UP - * @property {Direction} DOWN - */ -const DIRECTIONS = { UP: -1, DOWN: 1 }; - -/** - * Builds a fence with a specific number of rows. - * - * @param {number} rowsNum - * @returns {Fence} - */ -const buildFence = (rowsNum) => Array(rowsNum) - .fill(null) - .map(() => []); - -/** - * Get next direction to move (based on the current one) while traversing the fence. - * - * @param {object} params - * @param {number} params.railCount - Number of rows in the fence - * @param {number} params.currentRail - Current row that we're visiting - * @param {Direction} params.direction - Current direction - * @returns {Direction} - The next direction to take - */ -const getNextDirection = ({ railCount, currentRail, direction }) => { - switch (currentRail) { - case 0: - // Go down if we're on top of the fence. - return DIRECTIONS.DOWN; - case railCount - 1: - // Go up if we're at the bottom of the fence. - return DIRECTIONS.UP; - default: - // Continue with the same direction if we're in the middle of the fence. - return direction; - } -}; - -/** - * @param {number} targetRailIndex - * @param {string} letter - * @returns {Function} - */ -const addCharToRail = (targetRailIndex, letter) => { - /** - * Given a rail, adds a char to it if it matches a targetIndex. - * - * @param {Rail} rail - * @param {number} currentRail - * @returns {Rail} - */ - function onEachRail(rail, currentRail) { - return currentRail === targetRailIndex - ? [...rail, letter] - : rail; - } - return onEachRail; -}; - -/** - * Hangs the characters on the fence. - * - * @param {object} params - * @param {Fence} params.fence - * @param {number} params.currentRail - * @param {Direction} params.direction - * @param {string[]} params.chars - * @returns {Fence} - */ -const fillEncodeFence = ({ - fence, - currentRail, - direction, - chars, -}) => { - if (chars.length === 0) { - // All chars have been placed on a fence. - return fence; - } - - const railCount = fence.length; - - // Getting the next character to place on a fence. - const [letter, ...nextChars] = chars; - const nextDirection = getNextDirection({ - railCount, - currentRail, - direction, - }); - - return fillEncodeFence({ - fence: fence.map(addCharToRail(currentRail, letter)), - currentRail: currentRail + nextDirection, - direction: nextDirection, - chars: nextChars, - }); -}; - -/** - * @param {object} params - * @param {number} params.strLen - * @param {string[]} params.chars - * @param {Fence} params.fence - * @param {number} params.targetRail - * @param {Direction} params.direction - * @param {number[]} params.coords - * @returns {Fence} - */ -const fillDecodeFence = (params) => { - const { - strLen, chars, fence, targetRail, direction, coords, - } = params; - - const railCount = fence.length; - - if (chars.length === 0) { - return fence; - } - - const [currentRail, currentColumn] = coords; - const shouldGoNextRail = currentColumn === strLen - 1; - const nextDirection = shouldGoNextRail - ? DIRECTIONS.DOWN - : getNextDirection( - { railCount, currentRail, direction }, - ); - const nextRail = shouldGoNextRail ? targetRail + 1 : targetRail; - const nextCoords = [ - shouldGoNextRail ? 0 : currentRail + nextDirection, - shouldGoNextRail ? 0 : currentColumn + 1, - ]; - - const shouldAddChar = currentRail === targetRail; - const [currentChar, ...remainderChars] = chars; - const nextString = shouldAddChar ? remainderChars : chars; - const nextFence = shouldAddChar ? fence.map(addCharToRail(currentRail, currentChar)) : fence; - - return fillDecodeFence({ - strLen, - chars: nextString, - fence: nextFence, - targetRail: nextRail, - direction: nextDirection, - coords: nextCoords, - }); -}; - -/** - * @param {object} params - * @param {number} params.strLen - * @param {Fence} params.fence - * @param {number} params.currentRail - * @param {Direction} params.direction - * @param {number[]} params.code - * @returns {string} - */ -const decodeFence = (params) => { - const { - strLen, - fence, - currentRail, - direction, - code, - } = params; - - if (code.length === strLen) { - return code.join(''); - } - - const railCount = fence.length; - - const [currentChar, ...nextRail] = fence[currentRail]; - const nextDirection = getNextDirection( - { railCount, currentRail, direction }, - ); - - return decodeFence({ - railCount, - strLen, - currentRail: currentRail + nextDirection, - direction: nextDirection, - code: [...code, currentChar], - fence: fence.map((rail, idx) => (idx === currentRail ? nextRail : rail)), - }); -}; - -/** - * Encodes the message using Rail Fence Cipher. - * - * @param {string} string - The string to be encoded - * @param {number} railCount - The number of rails in a fence - * @returns {string} - Encoded string - */ -export const encodeRailFenceCipher = (string, railCount) => { - const fence = buildFence(railCount); - - const filledFence = fillEncodeFence({ - fence, - currentRail: 0, - direction: DIRECTIONS.DOWN, - chars: string.split(''), - }); - - return filledFence.flat().join(''); -}; - -/** - * Decodes the message using Rail Fence Cipher. - * - * @param {string} string - Encoded string - * @param {number} railCount - The number of rows in a fence - * @returns {string} - Decoded string. - */ -export const decodeRailFenceCipher = (string, railCount) => { - const strLen = string.length; - const emptyFence = buildFence(railCount); - const filledFence = fillDecodeFence({ - strLen, - chars: string.split(''), - fence: emptyFence, - targetRail: 0, - direction: DIRECTIONS.DOWN, - coords: [0, 0], - }); - - return decodeFence({ - strLen, - fence: filledFence, - currentRail: 0, - direction: DIRECTIONS.DOWN, - code: [], - }); -}; diff --git a/src/algorithms/graph/articulation-points/README.md b/src/algorithms/graph/articulation-points/README.md deleted file mode 100644 index aa6bede7a4..0000000000 --- a/src/algorithms/graph/articulation-points/README.md +++ /dev/null @@ -1,22 +0,0 @@ -# Articulation Points (or Cut Vertices) - -A vertex in an undirected connected graph is an articulation point -(or cut vertex) if removing it (and edges through it) disconnects -the graph. Articulation points represent vulnerabilities in a -connected network – single points whose failure would split the -network into 2 or more disconnected components. They are useful for -designing reliable networks. - -For a disconnected undirected graph, an articulation point is a -vertex removing which increases number of connected components. - -![Articulation Points](https://www.geeksforgeeks.org/wp-content/uploads/ArticulationPoints.png) - -![Articulation Points](https://www.geeksforgeeks.org/wp-content/uploads/ArticulationPoints1.png) - -![Articulation Points](https://www.geeksforgeeks.org/wp-content/uploads/ArticulationPoints21.png) - -## References - -- [GeeksForGeeks](https://www.geeksforgeeks.org/articulation-points-or-cut-vertices-in-a-graph/) -- [YouTube](https://www.youtube.com/watch?v=2kREIkF9UAs&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) diff --git a/src/algorithms/graph/articulation-points/__test__/articulationPoints.test.js b/src/algorithms/graph/articulation-points/__test__/articulationPoints.test.js deleted file mode 100644 index b021305c5c..0000000000 --- a/src/algorithms/graph/articulation-points/__test__/articulationPoints.test.js +++ /dev/null @@ -1,232 +0,0 @@ -import GraphVertex from '../../../../data-structures/graph/GraphVertex'; -import GraphEdge from '../../../../data-structures/graph/GraphEdge'; -import Graph from '../../../../data-structures/graph/Graph'; -import articulationPoints from '../articulationPoints'; - -describe('articulationPoints', () => { - it('should find articulation points in simple graph', () => { - const vertexA = new GraphVertex('A'); - const vertexB = new GraphVertex('B'); - const vertexC = new GraphVertex('C'); - const vertexD = new GraphVertex('D'); - - const edgeAB = new GraphEdge(vertexA, vertexB); - const edgeBC = new GraphEdge(vertexB, vertexC); - const edgeCD = new GraphEdge(vertexC, vertexD); - - const graph = new Graph(); - - graph - .addEdge(edgeAB) - .addEdge(edgeBC) - .addEdge(edgeCD); - - const articulationPointsSet = Object.values(articulationPoints(graph)); - - expect(articulationPointsSet.length).toBe(2); - expect(articulationPointsSet[0].getKey()).toBe(vertexC.getKey()); - expect(articulationPointsSet[1].getKey()).toBe(vertexB.getKey()); - }); - - it('should find articulation points in simple graph with back edge', () => { - const vertexA = new GraphVertex('A'); - const vertexB = new GraphVertex('B'); - const vertexC = new GraphVertex('C'); - const vertexD = new GraphVertex('D'); - - const edgeAB = new GraphEdge(vertexA, vertexB); - const edgeBC = new GraphEdge(vertexB, vertexC); - const edgeCD = new GraphEdge(vertexC, vertexD); - const edgeAC = new GraphEdge(vertexA, vertexC); - - const graph = new Graph(); - - graph - .addEdge(edgeAB) - .addEdge(edgeAC) - .addEdge(edgeBC) - .addEdge(edgeCD); - - const articulationPointsSet = Object.values(articulationPoints(graph)); - - expect(articulationPointsSet.length).toBe(1); - expect(articulationPointsSet[0].getKey()).toBe(vertexC.getKey()); - }); - - it('should find articulation points in simple graph with back edge #2', () => { - const vertexA = new GraphVertex('A'); - const vertexB = new GraphVertex('B'); - const vertexC = new GraphVertex('C'); - const vertexD = new GraphVertex('D'); - const vertexE = new GraphVertex('E'); - - const edgeAB = new GraphEdge(vertexA, vertexB); - const edgeBC = new GraphEdge(vertexB, vertexC); - const edgeCD = new GraphEdge(vertexC, vertexD); - const edgeAE = new GraphEdge(vertexA, vertexE); - const edgeCE = new GraphEdge(vertexC, vertexE); - - const graph = new Graph(); - - graph - .addEdge(edgeAB) - .addEdge(edgeAE) - .addEdge(edgeCE) - .addEdge(edgeBC) - .addEdge(edgeCD); - - const articulationPointsSet = Object.values(articulationPoints(graph)); - - expect(articulationPointsSet.length).toBe(1); - expect(articulationPointsSet[0].getKey()).toBe(vertexC.getKey()); - }); - - it('should find articulation points in graph', () => { - const vertexA = new GraphVertex('A'); - const vertexB = new GraphVertex('B'); - const vertexC = new GraphVertex('C'); - const vertexD = new GraphVertex('D'); - const vertexE = new GraphVertex('E'); - const vertexF = new GraphVertex('F'); - const vertexG = new GraphVertex('G'); - const vertexH = new GraphVertex('H'); - - const edgeAB = new GraphEdge(vertexA, vertexB); - const edgeBC = new GraphEdge(vertexB, vertexC); - const edgeAC = new GraphEdge(vertexA, vertexC); - const edgeCD = new GraphEdge(vertexC, vertexD); - const edgeDE = new GraphEdge(vertexD, vertexE); - const edgeEG = new GraphEdge(vertexE, vertexG); - const edgeEF = new GraphEdge(vertexE, vertexF); - const edgeGF = new GraphEdge(vertexG, vertexF); - const edgeFH = new GraphEdge(vertexF, vertexH); - - const graph = new Graph(); - - graph - .addEdge(edgeAB) - .addEdge(edgeBC) - .addEdge(edgeAC) - .addEdge(edgeCD) - .addEdge(edgeDE) - .addEdge(edgeEG) - .addEdge(edgeEF) - .addEdge(edgeGF) - .addEdge(edgeFH); - - const articulationPointsSet = Object.values(articulationPoints(graph)); - - expect(articulationPointsSet.length).toBe(4); - expect(articulationPointsSet[0].getKey()).toBe(vertexF.getKey()); - expect(articulationPointsSet[1].getKey()).toBe(vertexE.getKey()); - expect(articulationPointsSet[2].getKey()).toBe(vertexD.getKey()); - expect(articulationPointsSet[3].getKey()).toBe(vertexC.getKey()); - }); - - it('should find articulation points in graph starting with articulation root vertex', () => { - const vertexA = new GraphVertex('A'); - const vertexB = new GraphVertex('B'); - const vertexC = new GraphVertex('C'); - const vertexD = new GraphVertex('D'); - const vertexE = new GraphVertex('E'); - const vertexF = new GraphVertex('F'); - const vertexG = new GraphVertex('G'); - const vertexH = new GraphVertex('H'); - - const edgeAB = new GraphEdge(vertexA, vertexB); - const edgeBC = new GraphEdge(vertexB, vertexC); - const edgeAC = new GraphEdge(vertexA, vertexC); - const edgeCD = new GraphEdge(vertexC, vertexD); - const edgeDE = new GraphEdge(vertexD, vertexE); - const edgeEG = new GraphEdge(vertexE, vertexG); - const edgeEF = new GraphEdge(vertexE, vertexF); - const edgeGF = new GraphEdge(vertexG, vertexF); - const edgeFH = new GraphEdge(vertexF, vertexH); - - const graph = new Graph(); - - graph - .addEdge(edgeDE) - .addEdge(edgeAB) - .addEdge(edgeBC) - .addEdge(edgeAC) - .addEdge(edgeCD) - .addEdge(edgeEG) - .addEdge(edgeEF) - .addEdge(edgeGF) - .addEdge(edgeFH); - - const articulationPointsSet = Object.values(articulationPoints(graph)); - - expect(articulationPointsSet.length).toBe(4); - expect(articulationPointsSet[0].getKey()).toBe(vertexF.getKey()); - expect(articulationPointsSet[1].getKey()).toBe(vertexE.getKey()); - expect(articulationPointsSet[2].getKey()).toBe(vertexC.getKey()); - expect(articulationPointsSet[3].getKey()).toBe(vertexD.getKey()); - }); - - it('should find articulation points in yet another graph #1', () => { - const vertexA = new GraphVertex('A'); - const vertexB = new GraphVertex('B'); - const vertexC = new GraphVertex('C'); - const vertexD = new GraphVertex('D'); - const vertexE = new GraphVertex('E'); - - const edgeAB = new GraphEdge(vertexA, vertexB); - const edgeAC = new GraphEdge(vertexA, vertexC); - const edgeBC = new GraphEdge(vertexB, vertexC); - const edgeCD = new GraphEdge(vertexC, vertexD); - const edgeDE = new GraphEdge(vertexD, vertexE); - - const graph = new Graph(); - - graph - .addEdge(edgeAB) - .addEdge(edgeAC) - .addEdge(edgeBC) - .addEdge(edgeCD) - .addEdge(edgeDE); - - const articulationPointsSet = Object.values(articulationPoints(graph)); - - expect(articulationPointsSet.length).toBe(2); - expect(articulationPointsSet[0].getKey()).toBe(vertexD.getKey()); - expect(articulationPointsSet[1].getKey()).toBe(vertexC.getKey()); - }); - - it('should find articulation points in yet another graph #2', () => { - const vertexA = new GraphVertex('A'); - const vertexB = new GraphVertex('B'); - const vertexC = new GraphVertex('C'); - const vertexD = new GraphVertex('D'); - const vertexE = new GraphVertex('E'); - const vertexF = new GraphVertex('F'); - const vertexG = new GraphVertex('G'); - - const edgeAB = new GraphEdge(vertexA, vertexB); - const edgeAC = new GraphEdge(vertexA, vertexC); - const edgeBC = new GraphEdge(vertexB, vertexC); - const edgeCD = new GraphEdge(vertexC, vertexD); - const edgeCE = new GraphEdge(vertexC, vertexE); - const edgeCF = new GraphEdge(vertexC, vertexF); - const edgeEG = new GraphEdge(vertexE, vertexG); - const edgeFG = new GraphEdge(vertexF, vertexG); - - const graph = new Graph(); - - graph - .addEdge(edgeAB) - .addEdge(edgeAC) - .addEdge(edgeBC) - .addEdge(edgeCD) - .addEdge(edgeCE) - .addEdge(edgeCF) - .addEdge(edgeEG) - .addEdge(edgeFG); - - const articulationPointsSet = Object.values(articulationPoints(graph)); - - expect(articulationPointsSet.length).toBe(1); - expect(articulationPointsSet[0].getKey()).toBe(vertexC.getKey()); - }); -}); diff --git a/src/algorithms/graph/articulation-points/articulationPoints.js b/src/algorithms/graph/articulation-points/articulationPoints.js deleted file mode 100644 index 0cc1db6e89..0000000000 --- a/src/algorithms/graph/articulation-points/articulationPoints.js +++ /dev/null @@ -1,113 +0,0 @@ -import depthFirstSearch from '../depth-first-search/depthFirstSearch'; - -/** - * Helper class for visited vertex metadata. - */ -class VisitMetadata { - constructor({ discoveryTime, lowDiscoveryTime }) { - this.discoveryTime = discoveryTime; - this.lowDiscoveryTime = lowDiscoveryTime; - // We need this in order to check graph root node, whether it has two - // disconnected children or not. - this.independentChildrenCount = 0; - } -} - -/** - * Tarjan's algorithm for finding articulation points in graph. - * - * @param {Graph} graph - * @return {Object} - */ -export default function articulationPoints(graph) { - // Set of vertices we've already visited during DFS. - const visitedSet = {}; - - // Set of articulation points. - const articulationPointsSet = {}; - - // Time needed to discover to the current vertex. - let discoveryTime = 0; - - // Peek the start vertex for DFS traversal. - const startVertex = graph.getAllVertices()[0]; - - const dfsCallbacks = { - /** - * @param {GraphVertex} currentVertex - * @param {GraphVertex} previousVertex - */ - enterVertex: ({ currentVertex, previousVertex }) => { - // Tick discovery time. - discoveryTime += 1; - - // Put current vertex to visited set. - visitedSet[currentVertex.getKey()] = new VisitMetadata({ - discoveryTime, - lowDiscoveryTime: discoveryTime, - }); - - if (previousVertex) { - // Update children counter for previous vertex. - visitedSet[previousVertex.getKey()].independentChildrenCount += 1; - } - }, - /** - * @param {GraphVertex} currentVertex - * @param {GraphVertex} previousVertex - */ - leaveVertex: ({ currentVertex, previousVertex }) => { - if (previousVertex === null) { - // Don't do anything for the root vertex if it is already current (not previous one) - return; - } - - // Update the low time with the smallest time of adjacent vertices. - // Get minimum low discovery time from all neighbors. - /** @param {GraphVertex} neighbor */ - visitedSet[currentVertex.getKey()].lowDiscoveryTime = currentVertex.getNeighbors() - .filter((earlyNeighbor) => earlyNeighbor.getKey() !== previousVertex.getKey()) - /** - * @param {number} lowestDiscoveryTime - * @param {GraphVertex} neighbor - */ - .reduce( - (lowestDiscoveryTime, neighbor) => { - const neighborLowTime = visitedSet[neighbor.getKey()].lowDiscoveryTime; - return neighborLowTime < lowestDiscoveryTime ? neighborLowTime : lowestDiscoveryTime; - }, - visitedSet[currentVertex.getKey()].lowDiscoveryTime, - ); - - // Detect whether previous vertex is articulation point or not. - // To do so we need to check two [OR] conditions: - // 1. Is it a root vertex with at least two independent children. - // 2. If its visited time is <= low time of adjacent vertex. - if (previousVertex === startVertex) { - // Check that root vertex has at least two independent children. - if (visitedSet[previousVertex.getKey()].independentChildrenCount >= 2) { - articulationPointsSet[previousVertex.getKey()] = previousVertex; - } - } else { - // Get current vertex low discovery time. - const currentLowDiscoveryTime = visitedSet[currentVertex.getKey()].lowDiscoveryTime; - - // Compare current vertex low discovery time with parent discovery time. Check if there - // are any short path (back edge) exists. If we can't get to current vertex other then - // via parent then the parent vertex is articulation point for current one. - const parentDiscoveryTime = visitedSet[previousVertex.getKey()].discoveryTime; - if (parentDiscoveryTime <= currentLowDiscoveryTime) { - articulationPointsSet[previousVertex.getKey()] = previousVertex; - } - } - }, - allowTraversal: ({ nextVertex }) => { - return !visitedSet[nextVertex.getKey()]; - }, - }; - - // Do Depth First Search traversal over submitted graph. - depthFirstSearch(graph, startVertex, dfsCallbacks); - - return articulationPointsSet; -} diff --git a/src/algorithms/graph/bellman-ford/README.md b/src/algorithms/graph/bellman-ford/README.md deleted file mode 100644 index 9c0922659e..0000000000 --- a/src/algorithms/graph/bellman-ford/README.md +++ /dev/null @@ -1,21 +0,0 @@ -# Bellman–Ford Algorithm - -The Bellman–Ford algorithm is an algorithm that computes shortest -paths from a single source vertex to all of the other vertices -in a weighted digraph. It is slower than Dijkstra's algorithm -for the same problem, but more versatile, as it is capable of -handling graphs in which some of the edge weights are negative -numbers. - -![Bellman-Ford](https://upload.wikimedia.org/wikipedia/commons/2/2e/Shortest_path_Dijkstra_vs_BellmanFord.gif) - -## Complexity - -Worst-case performance `O(|V||E|)` -Best-case performance `O(|E|)` -Worst-case space complexity `O(|V|)` - -## References - -- [Wikipedia](https://en.wikipedia.org/wiki/Bellman%E2%80%93Ford_algorithm) -- [On YouTube by Michael Sambol](https://www.youtube.com/watch?v=obWXjtg0L64&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) diff --git a/src/algorithms/graph/bellman-ford/__test__/bellmanFord.test.js b/src/algorithms/graph/bellman-ford/__test__/bellmanFord.test.js deleted file mode 100644 index ffa30eba21..0000000000 --- a/src/algorithms/graph/bellman-ford/__test__/bellmanFord.test.js +++ /dev/null @@ -1,117 +0,0 @@ -import GraphVertex from '../../../../data-structures/graph/GraphVertex'; -import GraphEdge from '../../../../data-structures/graph/GraphEdge'; -import Graph from '../../../../data-structures/graph/Graph'; -import bellmanFord from '../bellmanFord'; - -describe('bellmanFord', () => { - it('should find minimum paths to all vertices for undirected graph', () => { - const vertexA = new GraphVertex('A'); - const vertexB = new GraphVertex('B'); - const vertexC = new GraphVertex('C'); - const vertexD = new GraphVertex('D'); - const vertexE = new GraphVertex('E'); - const vertexF = new GraphVertex('F'); - const vertexG = new GraphVertex('G'); - const vertexH = new GraphVertex('H'); - - const edgeAB = new GraphEdge(vertexA, vertexB, 4); - const edgeAE = new GraphEdge(vertexA, vertexE, 7); - const edgeAC = new GraphEdge(vertexA, vertexC, 3); - const edgeBC = new GraphEdge(vertexB, vertexC, 6); - const edgeBD = new GraphEdge(vertexB, vertexD, 5); - const edgeEC = new GraphEdge(vertexE, vertexC, 8); - const edgeED = new GraphEdge(vertexE, vertexD, 2); - const edgeDC = new GraphEdge(vertexD, vertexC, 11); - const edgeDG = new GraphEdge(vertexD, vertexG, 10); - const edgeDF = new GraphEdge(vertexD, vertexF, 2); - const edgeFG = new GraphEdge(vertexF, vertexG, 3); - const edgeEG = new GraphEdge(vertexE, vertexG, 5); - - const graph = new Graph(); - graph - .addVertex(vertexH) - .addEdge(edgeAB) - .addEdge(edgeAE) - .addEdge(edgeAC) - .addEdge(edgeBC) - .addEdge(edgeBD) - .addEdge(edgeEC) - .addEdge(edgeED) - .addEdge(edgeDC) - .addEdge(edgeDG) - .addEdge(edgeDF) - .addEdge(edgeFG) - .addEdge(edgeEG); - - const { distances, previousVertices } = bellmanFord(graph, vertexA); - - expect(distances).toEqual({ - H: Infinity, - A: 0, - B: 4, - E: 7, - C: 3, - D: 9, - G: 12, - F: 11, - }); - - expect(previousVertices.F.getKey()).toBe('D'); - expect(previousVertices.D.getKey()).toBe('B'); - expect(previousVertices.B.getKey()).toBe('A'); - expect(previousVertices.G.getKey()).toBe('E'); - expect(previousVertices.C.getKey()).toBe('A'); - expect(previousVertices.A).toBeNull(); - expect(previousVertices.H).toBeNull(); - }); - - it('should find minimum paths to all vertices for directed graph with negative edge weights', () => { - const vertexS = new GraphVertex('S'); - const vertexE = new GraphVertex('E'); - const vertexA = new GraphVertex('A'); - const vertexD = new GraphVertex('D'); - const vertexB = new GraphVertex('B'); - const vertexC = new GraphVertex('C'); - const vertexH = new GraphVertex('H'); - - const edgeSE = new GraphEdge(vertexS, vertexE, 8); - const edgeSA = new GraphEdge(vertexS, vertexA, 10); - const edgeED = new GraphEdge(vertexE, vertexD, 1); - const edgeDA = new GraphEdge(vertexD, vertexA, -4); - const edgeDC = new GraphEdge(vertexD, vertexC, -1); - const edgeAC = new GraphEdge(vertexA, vertexC, 2); - const edgeCB = new GraphEdge(vertexC, vertexB, -2); - const edgeBA = new GraphEdge(vertexB, vertexA, 1); - - const graph = new Graph(true); - graph - .addVertex(vertexH) - .addEdge(edgeSE) - .addEdge(edgeSA) - .addEdge(edgeED) - .addEdge(edgeDA) - .addEdge(edgeDC) - .addEdge(edgeAC) - .addEdge(edgeCB) - .addEdge(edgeBA); - - const { distances, previousVertices } = bellmanFord(graph, vertexS); - - expect(distances).toEqual({ - H: Infinity, - S: 0, - A: 5, - B: 5, - C: 7, - D: 9, - E: 8, - }); - - expect(previousVertices.H).toBeNull(); - expect(previousVertices.S).toBeNull(); - expect(previousVertices.B.getKey()).toBe('C'); - expect(previousVertices.C.getKey()).toBe('A'); - expect(previousVertices.A.getKey()).toBe('D'); - expect(previousVertices.D.getKey()).toBe('E'); - }); -}); diff --git a/src/algorithms/graph/bellman-ford/bellmanFord.js b/src/algorithms/graph/bellman-ford/bellmanFord.js deleted file mode 100644 index 70e811d992..0000000000 --- a/src/algorithms/graph/bellman-ford/bellmanFord.js +++ /dev/null @@ -1,45 +0,0 @@ -/** - * @param {Graph} graph - * @param {GraphVertex} startVertex - * @return {{distances, previousVertices}} - */ -export default function bellmanFord(graph, startVertex) { - const distances = {}; - const previousVertices = {}; - - // Init all distances with infinity assuming that currently we can't reach - // any of the vertices except start one. - distances[startVertex.getKey()] = 0; - graph.getAllVertices().forEach((vertex) => { - previousVertices[vertex.getKey()] = null; - if (vertex.getKey() !== startVertex.getKey()) { - distances[vertex.getKey()] = Infinity; - } - }); - - // We need (|V| - 1) iterations. - for (let iteration = 0; iteration < (graph.getAllVertices().length - 1); iteration += 1) { - // During each iteration go through all vertices. - Object.keys(distances).forEach((vertexKey) => { - const vertex = graph.getVertexByKey(vertexKey); - - // Go through all vertex edges. - graph.getNeighbors(vertex).forEach((neighbor) => { - const edge = graph.findEdge(vertex, neighbor); - // Find out if the distance to the neighbor is shorter in this iteration - // then in previous one. - const distanceToVertex = distances[vertex.getKey()]; - const distanceToNeighbor = distanceToVertex + edge.weight; - if (distanceToNeighbor < distances[neighbor.getKey()]) { - distances[neighbor.getKey()] = distanceToNeighbor; - previousVertices[neighbor.getKey()] = vertex; - } - }); - }); - } - - return { - distances, - previousVertices, - }; -} diff --git a/src/algorithms/graph/breadth-first-search/README.md b/src/algorithms/graph/breadth-first-search/README.md deleted file mode 100644 index 06073abd8b..0000000000 --- a/src/algorithms/graph/breadth-first-search/README.md +++ /dev/null @@ -1,16 +0,0 @@ -# Breadth-First Search (BFS) - -Breadth-first search (BFS) is an algorithm for traversing, -searching tree, or graph data structures. It starts at -the tree root (or some arbitrary node of a graph, sometimes -referred to as a 'search key') and explores the neighbor -nodes first, before moving to the next level neighbors. - -![Algorithm Visualization](https://upload.wikimedia.org/wikipedia/commons/5/5d/Breadth-First-Search-Algorithm.gif) - -## References - -- [Wikipedia](https://en.wikipedia.org/wiki/Breadth-first_search) -- [Tree Traversals (Inorder, Preorder and Postorder)](https://www.geeksforgeeks.org/tree-traversals-inorder-preorder-and-postorder/) -- [BFS vs DFS](https://www.geeksforgeeks.org/bfs-vs-dfs-binary-tree/) -- [BFS Visualization](https://www.cs.usfca.edu/~galles/visualization/BFS.html) diff --git a/src/algorithms/graph/breadth-first-search/__test__/breadthFirstSearch.test.js b/src/algorithms/graph/breadth-first-search/__test__/breadthFirstSearch.test.js deleted file mode 100644 index c9bff22fb0..0000000000 --- a/src/algorithms/graph/breadth-first-search/__test__/breadthFirstSearch.test.js +++ /dev/null @@ -1,174 +0,0 @@ -import Graph from '../../../../data-structures/graph/Graph'; -import GraphVertex from '../../../../data-structures/graph/GraphVertex'; -import GraphEdge from '../../../../data-structures/graph/GraphEdge'; -import breadthFirstSearch from '../breadthFirstSearch'; - -describe('breadthFirstSearch', () => { - it('should perform BFS operation on graph', () => { - const graph = new Graph(true); - - const vertexA = new GraphVertex('A'); - const vertexB = new GraphVertex('B'); - const vertexC = new GraphVertex('C'); - const vertexD = new GraphVertex('D'); - const vertexE = new GraphVertex('E'); - const vertexF = new GraphVertex('F'); - const vertexG = new GraphVertex('G'); - const vertexH = new GraphVertex('H'); - - const edgeAB = new GraphEdge(vertexA, vertexB); - const edgeBC = new GraphEdge(vertexB, vertexC); - const edgeCG = new GraphEdge(vertexC, vertexG); - const edgeAD = new GraphEdge(vertexA, vertexD); - const edgeAE = new GraphEdge(vertexA, vertexE); - const edgeEF = new GraphEdge(vertexE, vertexF); - const edgeFD = new GraphEdge(vertexF, vertexD); - const edgeDH = new GraphEdge(vertexD, vertexH); - const edgeGH = new GraphEdge(vertexG, vertexH); - - graph - .addEdge(edgeAB) - .addEdge(edgeBC) - .addEdge(edgeCG) - .addEdge(edgeAD) - .addEdge(edgeAE) - .addEdge(edgeEF) - .addEdge(edgeFD) - .addEdge(edgeDH) - .addEdge(edgeGH); - - expect(graph.toString()).toBe('A,B,C,G,D,E,F,H'); - - const enterVertexCallback = jest.fn(); - const leaveVertexCallback = jest.fn(); - - // Traverse graphs without callbacks first. - breadthFirstSearch(graph, vertexA); - - // Traverse graph with enterVertex and leaveVertex callbacks. - breadthFirstSearch(graph, vertexA, { - enterVertex: enterVertexCallback, - leaveVertex: leaveVertexCallback, - }); - - expect(enterVertexCallback).toHaveBeenCalledTimes(8); - expect(leaveVertexCallback).toHaveBeenCalledTimes(8); - - const enterVertexParamsMap = [ - { currentVertex: vertexA, previousVertex: null }, - { currentVertex: vertexB, previousVertex: vertexA }, - { currentVertex: vertexD, previousVertex: vertexB }, - { currentVertex: vertexE, previousVertex: vertexD }, - { currentVertex: vertexC, previousVertex: vertexE }, - { currentVertex: vertexH, previousVertex: vertexC }, - { currentVertex: vertexF, previousVertex: vertexH }, - { currentVertex: vertexG, previousVertex: vertexF }, - ]; - - for (let callIndex = 0; callIndex < graph.getAllVertices().length; callIndex += 1) { - const params = enterVertexCallback.mock.calls[callIndex][0]; - expect(params.currentVertex).toEqual(enterVertexParamsMap[callIndex].currentVertex); - expect(params.previousVertex).toEqual(enterVertexParamsMap[callIndex].previousVertex); - } - - const leaveVertexParamsMap = [ - { currentVertex: vertexA, previousVertex: null }, - { currentVertex: vertexB, previousVertex: vertexA }, - { currentVertex: vertexD, previousVertex: vertexB }, - { currentVertex: vertexE, previousVertex: vertexD }, - { currentVertex: vertexC, previousVertex: vertexE }, - { currentVertex: vertexH, previousVertex: vertexC }, - { currentVertex: vertexF, previousVertex: vertexH }, - { currentVertex: vertexG, previousVertex: vertexF }, - ]; - - for (let callIndex = 0; callIndex < graph.getAllVertices().length; callIndex += 1) { - const params = leaveVertexCallback.mock.calls[callIndex][0]; - expect(params.currentVertex).toEqual(leaveVertexParamsMap[callIndex].currentVertex); - expect(params.previousVertex).toEqual(leaveVertexParamsMap[callIndex].previousVertex); - } - }); - - it('should allow to create custom vertex visiting logic', () => { - const graph = new Graph(true); - - const vertexA = new GraphVertex('A'); - const vertexB = new GraphVertex('B'); - const vertexC = new GraphVertex('C'); - const vertexD = new GraphVertex('D'); - const vertexE = new GraphVertex('E'); - const vertexF = new GraphVertex('F'); - const vertexG = new GraphVertex('G'); - const vertexH = new GraphVertex('H'); - - const edgeAB = new GraphEdge(vertexA, vertexB); - const edgeBC = new GraphEdge(vertexB, vertexC); - const edgeCG = new GraphEdge(vertexC, vertexG); - const edgeAD = new GraphEdge(vertexA, vertexD); - const edgeAE = new GraphEdge(vertexA, vertexE); - const edgeEF = new GraphEdge(vertexE, vertexF); - const edgeFD = new GraphEdge(vertexF, vertexD); - const edgeDH = new GraphEdge(vertexD, vertexH); - const edgeGH = new GraphEdge(vertexG, vertexH); - - graph - .addEdge(edgeAB) - .addEdge(edgeBC) - .addEdge(edgeCG) - .addEdge(edgeAD) - .addEdge(edgeAE) - .addEdge(edgeEF) - .addEdge(edgeFD) - .addEdge(edgeDH) - .addEdge(edgeGH); - - expect(graph.toString()).toBe('A,B,C,G,D,E,F,H'); - - const enterVertexCallback = jest.fn(); - const leaveVertexCallback = jest.fn(); - - // Traverse graph with enterVertex and leaveVertex callbacks. - breadthFirstSearch(graph, vertexA, { - enterVertex: enterVertexCallback, - leaveVertex: leaveVertexCallback, - allowTraversal: ({ currentVertex, nextVertex }) => { - return !(currentVertex === vertexA && nextVertex === vertexB); - }, - }); - - expect(enterVertexCallback).toHaveBeenCalledTimes(7); - expect(leaveVertexCallback).toHaveBeenCalledTimes(7); - - const enterVertexParamsMap = [ - { currentVertex: vertexA, previousVertex: null }, - { currentVertex: vertexD, previousVertex: vertexA }, - { currentVertex: vertexE, previousVertex: vertexD }, - { currentVertex: vertexH, previousVertex: vertexE }, - { currentVertex: vertexF, previousVertex: vertexH }, - { currentVertex: vertexD, previousVertex: vertexF }, - { currentVertex: vertexH, previousVertex: vertexD }, - ]; - - for (let callIndex = 0; callIndex < 7; callIndex += 1) { - const params = enterVertexCallback.mock.calls[callIndex][0]; - expect(params.currentVertex).toEqual(enterVertexParamsMap[callIndex].currentVertex); - expect(params.previousVertex).toEqual(enterVertexParamsMap[callIndex].previousVertex); - } - - const leaveVertexParamsMap = [ - { currentVertex: vertexA, previousVertex: null }, - { currentVertex: vertexD, previousVertex: vertexA }, - { currentVertex: vertexE, previousVertex: vertexD }, - { currentVertex: vertexH, previousVertex: vertexE }, - { currentVertex: vertexF, previousVertex: vertexH }, - { currentVertex: vertexD, previousVertex: vertexF }, - { currentVertex: vertexH, previousVertex: vertexD }, - ]; - - for (let callIndex = 0; callIndex < 7; callIndex += 1) { - const params = leaveVertexCallback.mock.calls[callIndex][0]; - expect(params.currentVertex).toEqual(leaveVertexParamsMap[callIndex].currentVertex); - expect(params.previousVertex).toEqual(leaveVertexParamsMap[callIndex].previousVertex); - } - }); -}); diff --git a/src/algorithms/graph/breadth-first-search/breadthFirstSearch.js b/src/algorithms/graph/breadth-first-search/breadthFirstSearch.js deleted file mode 100644 index d4b955ece6..0000000000 --- a/src/algorithms/graph/breadth-first-search/breadthFirstSearch.js +++ /dev/null @@ -1,75 +0,0 @@ -import Queue from '../../../data-structures/queue/Queue'; - -/** - * @typedef {Object} Callbacks - * - * @property {function(vertices: Object): boolean} [allowTraversal] - - * Determines whether DFS should traverse from the vertex to its neighbor - * (along the edge). By default prohibits visiting the same vertex again. - * - * @property {function(vertices: Object)} [enterVertex] - Called when BFS enters the vertex. - * - * @property {function(vertices: Object)} [leaveVertex] - Called when BFS leaves the vertex. - */ - -/** - * @param {Callbacks} [callbacks] - * @returns {Callbacks} - */ -function initCallbacks(callbacks = {}) { - const initiatedCallback = callbacks; - - const stubCallback = () => {}; - - const allowTraversalCallback = ( - () => { - const seen = {}; - return ({ nextVertex }) => { - if (!seen[nextVertex.getKey()]) { - seen[nextVertex.getKey()] = true; - return true; - } - return false; - }; - } - )(); - - initiatedCallback.allowTraversal = callbacks.allowTraversal || allowTraversalCallback; - initiatedCallback.enterVertex = callbacks.enterVertex || stubCallback; - initiatedCallback.leaveVertex = callbacks.leaveVertex || stubCallback; - - return initiatedCallback; -} - -/** - * @param {Graph} graph - * @param {GraphVertex} startVertex - * @param {Callbacks} [originalCallbacks] - */ -export default function breadthFirstSearch(graph, startVertex, originalCallbacks) { - const callbacks = initCallbacks(originalCallbacks); - const vertexQueue = new Queue(); - - // Do initial queue setup. - vertexQueue.enqueue(startVertex); - - let previousVertex = null; - - // Traverse all vertices from the queue. - while (!vertexQueue.isEmpty()) { - const currentVertex = vertexQueue.dequeue(); - callbacks.enterVertex({ currentVertex, previousVertex }); - - // Add all neighbors to the queue for future traversals. - graph.getNeighbors(currentVertex).forEach((nextVertex) => { - if (callbacks.allowTraversal({ previousVertex, currentVertex, nextVertex })) { - vertexQueue.enqueue(nextVertex); - } - }); - - callbacks.leaveVertex({ currentVertex, previousVertex }); - - // Memorize current vertex before next loop. - previousVertex = currentVertex; - } -} diff --git a/src/algorithms/graph/bridges/README.md b/src/algorithms/graph/bridges/README.md deleted file mode 100644 index 08d919ff96..0000000000 --- a/src/algorithms/graph/bridges/README.md +++ /dev/null @@ -1,26 +0,0 @@ -# Bridges in Graph - -In graph theory, a **bridge**, **isthmus**, **cut-edge**, or **cut arc** is an edge -of a graph whose deletion increases its number of connected components. Equivalently, -an edge is a bridge if and only if it is not contained in any cycle. A graph is said -to be bridgeless or isthmus-free if it contains no bridges. - -![Bridges in graph](https://upload.wikimedia.org/wikipedia/commons/d/df/Graph_cut_edges.svg) - -A graph with 16 vertices and 6 bridges (highlighted in red) - -![Bridgeless](https://upload.wikimedia.org/wikipedia/commons/b/bf/Undirected.svg) - -An undirected connected graph with no cut edges - -![Bridges in graph](https://www.geeksforgeeks.org/wp-content/uploads/Bridge1.png) - -![Bridges in graph](https://www.geeksforgeeks.org/wp-content/uploads/Bridge2.png) - -![Bridges in graph](https://www.geeksforgeeks.org/wp-content/uploads/Bridge3.png) - -## References - -- [GeeksForGeeks on YouTube](https://www.youtube.com/watch?v=thLQYBlz2DM&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) -- [Wikipedia](https://en.wikipedia.org/wiki/Bridge_%28graph_theory%29#Tarjan.27s_Bridge-finding_algorithm) -- [GeeksForGeeks](https://www.geeksforgeeks.org/bridge-in-a-graph/) diff --git a/src/algorithms/graph/bridges/__test__/graphBridges.test.js b/src/algorithms/graph/bridges/__test__/graphBridges.test.js deleted file mode 100644 index 01837528b0..0000000000 --- a/src/algorithms/graph/bridges/__test__/graphBridges.test.js +++ /dev/null @@ -1,203 +0,0 @@ -import GraphVertex from '../../../../data-structures/graph/GraphVertex'; -import GraphEdge from '../../../../data-structures/graph/GraphEdge'; -import Graph from '../../../../data-structures/graph/Graph'; -import graphBridges from '../graphBridges'; - -describe('graphBridges', () => { - it('should find bridges in simple graph', () => { - const vertexA = new GraphVertex('A'); - const vertexB = new GraphVertex('B'); - const vertexC = new GraphVertex('C'); - const vertexD = new GraphVertex('D'); - - const edgeAB = new GraphEdge(vertexA, vertexB); - const edgeBC = new GraphEdge(vertexB, vertexC); - const edgeCD = new GraphEdge(vertexC, vertexD); - - const graph = new Graph(); - - graph - .addEdge(edgeAB) - .addEdge(edgeBC) - .addEdge(edgeCD); - - const bridges = Object.values(graphBridges(graph)); - - expect(bridges.length).toBe(3); - expect(bridges[0].getKey()).toBe(edgeCD.getKey()); - expect(bridges[1].getKey()).toBe(edgeBC.getKey()); - expect(bridges[2].getKey()).toBe(edgeAB.getKey()); - }); - - it('should find bridges in simple graph with back edge', () => { - const vertexA = new GraphVertex('A'); - const vertexB = new GraphVertex('B'); - const vertexC = new GraphVertex('C'); - const vertexD = new GraphVertex('D'); - - const edgeAB = new GraphEdge(vertexA, vertexB); - const edgeBC = new GraphEdge(vertexB, vertexC); - const edgeCD = new GraphEdge(vertexC, vertexD); - const edgeAC = new GraphEdge(vertexA, vertexC); - - const graph = new Graph(); - - graph - .addEdge(edgeAB) - .addEdge(edgeAC) - .addEdge(edgeBC) - .addEdge(edgeCD); - - const bridges = Object.values(graphBridges(graph)); - - expect(bridges.length).toBe(1); - expect(bridges[0].getKey()).toBe(edgeCD.getKey()); - }); - - it('should find bridges in graph', () => { - const vertexA = new GraphVertex('A'); - const vertexB = new GraphVertex('B'); - const vertexC = new GraphVertex('C'); - const vertexD = new GraphVertex('D'); - const vertexE = new GraphVertex('E'); - const vertexF = new GraphVertex('F'); - const vertexG = new GraphVertex('G'); - const vertexH = new GraphVertex('H'); - - const edgeAB = new GraphEdge(vertexA, vertexB); - const edgeBC = new GraphEdge(vertexB, vertexC); - const edgeAC = new GraphEdge(vertexA, vertexC); - const edgeCD = new GraphEdge(vertexC, vertexD); - const edgeDE = new GraphEdge(vertexD, vertexE); - const edgeEG = new GraphEdge(vertexE, vertexG); - const edgeEF = new GraphEdge(vertexE, vertexF); - const edgeGF = new GraphEdge(vertexG, vertexF); - const edgeFH = new GraphEdge(vertexF, vertexH); - - const graph = new Graph(); - - graph - .addEdge(edgeAB) - .addEdge(edgeBC) - .addEdge(edgeAC) - .addEdge(edgeCD) - .addEdge(edgeDE) - .addEdge(edgeEG) - .addEdge(edgeEF) - .addEdge(edgeGF) - .addEdge(edgeFH); - - const bridges = Object.values(graphBridges(graph)); - - expect(bridges.length).toBe(3); - expect(bridges[0].getKey()).toBe(edgeFH.getKey()); - expect(bridges[1].getKey()).toBe(edgeDE.getKey()); - expect(bridges[2].getKey()).toBe(edgeCD.getKey()); - }); - - it('should find bridges in graph starting with different root vertex', () => { - const vertexA = new GraphVertex('A'); - const vertexB = new GraphVertex('B'); - const vertexC = new GraphVertex('C'); - const vertexD = new GraphVertex('D'); - const vertexE = new GraphVertex('E'); - const vertexF = new GraphVertex('F'); - const vertexG = new GraphVertex('G'); - const vertexH = new GraphVertex('H'); - - const edgeAB = new GraphEdge(vertexA, vertexB); - const edgeBC = new GraphEdge(vertexB, vertexC); - const edgeAC = new GraphEdge(vertexA, vertexC); - const edgeCD = new GraphEdge(vertexC, vertexD); - const edgeDE = new GraphEdge(vertexD, vertexE); - const edgeEG = new GraphEdge(vertexE, vertexG); - const edgeEF = new GraphEdge(vertexE, vertexF); - const edgeGF = new GraphEdge(vertexG, vertexF); - const edgeFH = new GraphEdge(vertexF, vertexH); - - const graph = new Graph(); - - graph - .addEdge(edgeDE) - .addEdge(edgeAB) - .addEdge(edgeBC) - .addEdge(edgeAC) - .addEdge(edgeCD) - .addEdge(edgeEG) - .addEdge(edgeEF) - .addEdge(edgeGF) - .addEdge(edgeFH); - - const bridges = Object.values(graphBridges(graph)); - - expect(bridges.length).toBe(3); - expect(bridges[0].getKey()).toBe(edgeFH.getKey()); - expect(bridges[1].getKey()).toBe(edgeDE.getKey()); - expect(bridges[2].getKey()).toBe(edgeCD.getKey()); - }); - - it('should find bridges in yet another graph #1', () => { - const vertexA = new GraphVertex('A'); - const vertexB = new GraphVertex('B'); - const vertexC = new GraphVertex('C'); - const vertexD = new GraphVertex('D'); - const vertexE = new GraphVertex('E'); - - const edgeAB = new GraphEdge(vertexA, vertexB); - const edgeAC = new GraphEdge(vertexA, vertexC); - const edgeBC = new GraphEdge(vertexB, vertexC); - const edgeCD = new GraphEdge(vertexC, vertexD); - const edgeDE = new GraphEdge(vertexD, vertexE); - - const graph = new Graph(); - - graph - .addEdge(edgeAB) - .addEdge(edgeAC) - .addEdge(edgeBC) - .addEdge(edgeCD) - .addEdge(edgeDE); - - const bridges = Object.values(graphBridges(graph)); - - expect(bridges.length).toBe(2); - expect(bridges[0].getKey()).toBe(edgeDE.getKey()); - expect(bridges[1].getKey()).toBe(edgeCD.getKey()); - }); - - it('should find bridges in yet another graph #2', () => { - const vertexA = new GraphVertex('A'); - const vertexB = new GraphVertex('B'); - const vertexC = new GraphVertex('C'); - const vertexD = new GraphVertex('D'); - const vertexE = new GraphVertex('E'); - const vertexF = new GraphVertex('F'); - const vertexG = new GraphVertex('G'); - - const edgeAB = new GraphEdge(vertexA, vertexB); - const edgeAC = new GraphEdge(vertexA, vertexC); - const edgeBC = new GraphEdge(vertexB, vertexC); - const edgeCD = new GraphEdge(vertexC, vertexD); - const edgeCE = new GraphEdge(vertexC, vertexE); - const edgeCF = new GraphEdge(vertexC, vertexF); - const edgeEG = new GraphEdge(vertexE, vertexG); - const edgeFG = new GraphEdge(vertexF, vertexG); - - const graph = new Graph(); - - graph - .addEdge(edgeAB) - .addEdge(edgeAC) - .addEdge(edgeBC) - .addEdge(edgeCD) - .addEdge(edgeCE) - .addEdge(edgeCF) - .addEdge(edgeEG) - .addEdge(edgeFG); - - const bridges = Object.values(graphBridges(graph)); - - expect(bridges.length).toBe(1); - expect(bridges[0].getKey()).toBe(edgeCD.getKey()); - }); -}); diff --git a/src/algorithms/graph/bridges/graphBridges.js b/src/algorithms/graph/bridges/graphBridges.js deleted file mode 100644 index 58a64004bc..0000000000 --- a/src/algorithms/graph/bridges/graphBridges.js +++ /dev/null @@ -1,95 +0,0 @@ -import depthFirstSearch from '../depth-first-search/depthFirstSearch'; - -/** - * Helper class for visited vertex metadata. - */ -class VisitMetadata { - constructor({ discoveryTime, lowDiscoveryTime }) { - this.discoveryTime = discoveryTime; - this.lowDiscoveryTime = lowDiscoveryTime; - } -} - -/** - * @param {Graph} graph - * @return {Object} - */ -export default function graphBridges(graph) { - // Set of vertices we've already visited during DFS. - const visitedSet = {}; - - // Set of bridges. - const bridges = {}; - - // Time needed to discover to the current vertex. - let discoveryTime = 0; - - // Peek the start vertex for DFS traversal. - const startVertex = graph.getAllVertices()[0]; - - const dfsCallbacks = { - /** - * @param {GraphVertex} currentVertex - */ - enterVertex: ({ currentVertex }) => { - // Tick discovery time. - discoveryTime += 1; - - // Put current vertex to visited set. - visitedSet[currentVertex.getKey()] = new VisitMetadata({ - discoveryTime, - lowDiscoveryTime: discoveryTime, - }); - }, - /** - * @param {GraphVertex} currentVertex - * @param {GraphVertex} previousVertex - */ - leaveVertex: ({ currentVertex, previousVertex }) => { - if (previousVertex === null) { - // Don't do anything for the root vertex if it is already current (not previous one). - return; - } - - // Check if current node is connected to any early node other then previous one. - visitedSet[currentVertex.getKey()].lowDiscoveryTime = currentVertex.getNeighbors() - .filter((earlyNeighbor) => earlyNeighbor.getKey() !== previousVertex.getKey()) - .reduce( - /** - * @param {number} lowestDiscoveryTime - * @param {GraphVertex} neighbor - */ - (lowestDiscoveryTime, neighbor) => { - const neighborLowTime = visitedSet[neighbor.getKey()].lowDiscoveryTime; - return neighborLowTime < lowestDiscoveryTime ? neighborLowTime : lowestDiscoveryTime; - }, - visitedSet[currentVertex.getKey()].lowDiscoveryTime, - ); - - // Compare low discovery times. In case if current low discovery time is less than the one - // in previous vertex then update previous vertex low time. - const currentLowDiscoveryTime = visitedSet[currentVertex.getKey()].lowDiscoveryTime; - const previousLowDiscoveryTime = visitedSet[previousVertex.getKey()].lowDiscoveryTime; - if (currentLowDiscoveryTime < previousLowDiscoveryTime) { - visitedSet[previousVertex.getKey()].lowDiscoveryTime = currentLowDiscoveryTime; - } - - // Compare current vertex low discovery time with parent discovery time. Check if there - // are any short path (back edge) exists. If we can't get to current vertex other then - // via parent then the parent vertex is articulation point for current one. - const parentDiscoveryTime = visitedSet[previousVertex.getKey()].discoveryTime; - if (parentDiscoveryTime < currentLowDiscoveryTime) { - const bridge = graph.findEdge(previousVertex, currentVertex); - bridges[bridge.getKey()] = bridge; - } - }, - allowTraversal: ({ nextVertex }) => { - return !visitedSet[nextVertex.getKey()]; - }, - }; - - // Do Depth First Search traversal over submitted graph. - depthFirstSearch(graph, startVertex, dfsCallbacks); - - return bridges; -} diff --git a/src/algorithms/graph/depth-first-search/README.md b/src/algorithms/graph/depth-first-search/README.md deleted file mode 100644 index b22a8aa9c8..0000000000 --- a/src/algorithms/graph/depth-first-search/README.md +++ /dev/null @@ -1,16 +0,0 @@ -# Depth-First Search (DFS) - -Depth-first search (DFS) is an algorithm for traversing or -searching tree or graph data structures. One starts at -the root (selecting some arbitrary node as the root in -the case of a graph) and explores as far as possible -along each branch before backtracking. - -![Algorithm Visualization](https://upload.wikimedia.org/wikipedia/commons/7/7f/Depth-First-Search.gif) - -## References - -- [Wikipedia](https://en.wikipedia.org/wiki/Depth-first_search) -- [Tree Traversals (Inorder, Preorder and Postorder)](https://www.geeksforgeeks.org/tree-traversals-inorder-preorder-and-postorder/) -- [BFS vs DFS](https://www.geeksforgeeks.org/bfs-vs-dfs-binary-tree/) -- [DFS Visualization](https://www.cs.usfca.edu/~galles/visualization/DFS.html) diff --git a/src/algorithms/graph/depth-first-search/__test__/depthFirstSearch.test.js b/src/algorithms/graph/depth-first-search/__test__/depthFirstSearch.test.js deleted file mode 100644 index 93ed61091a..0000000000 --- a/src/algorithms/graph/depth-first-search/__test__/depthFirstSearch.test.js +++ /dev/null @@ -1,165 +0,0 @@ -import Graph from '../../../../data-structures/graph/Graph'; -import GraphVertex from '../../../../data-structures/graph/GraphVertex'; -import GraphEdge from '../../../../data-structures/graph/GraphEdge'; -import depthFirstSearch from '../depthFirstSearch'; - -describe('depthFirstSearch', () => { - it('should perform DFS operation on graph', () => { - const graph = new Graph(true); - - const vertexA = new GraphVertex('A'); - const vertexB = new GraphVertex('B'); - const vertexC = new GraphVertex('C'); - const vertexD = new GraphVertex('D'); - const vertexE = new GraphVertex('E'); - const vertexF = new GraphVertex('F'); - const vertexG = new GraphVertex('G'); - - const edgeAB = new GraphEdge(vertexA, vertexB); - const edgeBC = new GraphEdge(vertexB, vertexC); - const edgeCG = new GraphEdge(vertexC, vertexG); - const edgeAD = new GraphEdge(vertexA, vertexD); - const edgeAE = new GraphEdge(vertexA, vertexE); - const edgeEF = new GraphEdge(vertexE, vertexF); - const edgeFD = new GraphEdge(vertexF, vertexD); - const edgeDG = new GraphEdge(vertexD, vertexG); - - graph - .addEdge(edgeAB) - .addEdge(edgeBC) - .addEdge(edgeCG) - .addEdge(edgeAD) - .addEdge(edgeAE) - .addEdge(edgeEF) - .addEdge(edgeFD) - .addEdge(edgeDG); - - expect(graph.toString()).toBe('A,B,C,G,D,E,F'); - - const enterVertexCallback = jest.fn(); - const leaveVertexCallback = jest.fn(); - - // Traverse graphs without callbacks first to check default ones. - depthFirstSearch(graph, vertexA); - - // Traverse graph with enterVertex and leaveVertex callbacks. - depthFirstSearch(graph, vertexA, { - enterVertex: enterVertexCallback, - leaveVertex: leaveVertexCallback, - }); - - expect(enterVertexCallback).toHaveBeenCalledTimes(graph.getAllVertices().length); - expect(leaveVertexCallback).toHaveBeenCalledTimes(graph.getAllVertices().length); - - const enterVertexParamsMap = [ - { currentVertex: vertexA, previousVertex: null }, - { currentVertex: vertexB, previousVertex: vertexA }, - { currentVertex: vertexC, previousVertex: vertexB }, - { currentVertex: vertexG, previousVertex: vertexC }, - { currentVertex: vertexD, previousVertex: vertexA }, - { currentVertex: vertexE, previousVertex: vertexA }, - { currentVertex: vertexF, previousVertex: vertexE }, - ]; - - for (let callIndex = 0; callIndex < graph.getAllVertices().length; callIndex += 1) { - const params = enterVertexCallback.mock.calls[callIndex][0]; - expect(params.currentVertex).toEqual(enterVertexParamsMap[callIndex].currentVertex); - expect(params.previousVertex).toEqual(enterVertexParamsMap[callIndex].previousVertex); - } - - const leaveVertexParamsMap = [ - { currentVertex: vertexG, previousVertex: vertexC }, - { currentVertex: vertexC, previousVertex: vertexB }, - { currentVertex: vertexB, previousVertex: vertexA }, - { currentVertex: vertexD, previousVertex: vertexA }, - { currentVertex: vertexF, previousVertex: vertexE }, - { currentVertex: vertexE, previousVertex: vertexA }, - { currentVertex: vertexA, previousVertex: null }, - ]; - - for (let callIndex = 0; callIndex < graph.getAllVertices().length; callIndex += 1) { - const params = leaveVertexCallback.mock.calls[callIndex][0]; - expect(params.currentVertex).toEqual(leaveVertexParamsMap[callIndex].currentVertex); - expect(params.previousVertex).toEqual(leaveVertexParamsMap[callIndex].previousVertex); - } - }); - - it('allow users to redefine vertex visiting logic', () => { - const graph = new Graph(true); - - const vertexA = new GraphVertex('A'); - const vertexB = new GraphVertex('B'); - const vertexC = new GraphVertex('C'); - const vertexD = new GraphVertex('D'); - const vertexE = new GraphVertex('E'); - const vertexF = new GraphVertex('F'); - const vertexG = new GraphVertex('G'); - - const edgeAB = new GraphEdge(vertexA, vertexB); - const edgeBC = new GraphEdge(vertexB, vertexC); - const edgeCG = new GraphEdge(vertexC, vertexG); - const edgeAD = new GraphEdge(vertexA, vertexD); - const edgeAE = new GraphEdge(vertexA, vertexE); - const edgeEF = new GraphEdge(vertexE, vertexF); - const edgeFD = new GraphEdge(vertexF, vertexD); - const edgeDG = new GraphEdge(vertexD, vertexG); - - graph - .addEdge(edgeAB) - .addEdge(edgeBC) - .addEdge(edgeCG) - .addEdge(edgeAD) - .addEdge(edgeAE) - .addEdge(edgeEF) - .addEdge(edgeFD) - .addEdge(edgeDG); - - expect(graph.toString()).toBe('A,B,C,G,D,E,F'); - - const enterVertexCallback = jest.fn(); - const leaveVertexCallback = jest.fn(); - - depthFirstSearch(graph, vertexA, { - enterVertex: enterVertexCallback, - leaveVertex: leaveVertexCallback, - allowTraversal: ({ currentVertex, nextVertex }) => { - return !(currentVertex === vertexA && nextVertex === vertexB); - }, - }); - - expect(enterVertexCallback).toHaveBeenCalledTimes(7); - expect(leaveVertexCallback).toHaveBeenCalledTimes(7); - - const enterVertexParamsMap = [ - { currentVertex: vertexA, previousVertex: null }, - { currentVertex: vertexD, previousVertex: vertexA }, - { currentVertex: vertexG, previousVertex: vertexD }, - { currentVertex: vertexE, previousVertex: vertexA }, - { currentVertex: vertexF, previousVertex: vertexE }, - { currentVertex: vertexD, previousVertex: vertexF }, - { currentVertex: vertexG, previousVertex: vertexD }, - ]; - - for (let callIndex = 0; callIndex < graph.getAllVertices().length; callIndex += 1) { - const params = enterVertexCallback.mock.calls[callIndex][0]; - expect(params.currentVertex).toEqual(enterVertexParamsMap[callIndex].currentVertex); - expect(params.previousVertex).toEqual(enterVertexParamsMap[callIndex].previousVertex); - } - - const leaveVertexParamsMap = [ - { currentVertex: vertexG, previousVertex: vertexD }, - { currentVertex: vertexD, previousVertex: vertexA }, - { currentVertex: vertexG, previousVertex: vertexD }, - { currentVertex: vertexD, previousVertex: vertexF }, - { currentVertex: vertexF, previousVertex: vertexE }, - { currentVertex: vertexE, previousVertex: vertexA }, - { currentVertex: vertexA, previousVertex: null }, - ]; - - for (let callIndex = 0; callIndex < graph.getAllVertices().length; callIndex += 1) { - const params = leaveVertexCallback.mock.calls[callIndex][0]; - expect(params.currentVertex).toEqual(leaveVertexParamsMap[callIndex].currentVertex); - expect(params.previousVertex).toEqual(leaveVertexParamsMap[callIndex].previousVertex); - } - }); -}); diff --git a/src/algorithms/graph/depth-first-search/depthFirstSearch.js b/src/algorithms/graph/depth-first-search/depthFirstSearch.js deleted file mode 100644 index a77c672f19..0000000000 --- a/src/algorithms/graph/depth-first-search/depthFirstSearch.js +++ /dev/null @@ -1,68 +0,0 @@ -/** - * @typedef {Object} Callbacks - * - * @property {function(vertices: Object): boolean} [allowTraversal] - - * Determines whether DFS should traverse from the vertex to its neighbor - * (along the edge). By default prohibits visiting the same vertex again. - * - * @property {function(vertices: Object)} [enterVertex] - Called when DFS enters the vertex. - * - * @property {function(vertices: Object)} [leaveVertex] - Called when DFS leaves the vertex. - */ - -/** - * @param {Callbacks} [callbacks] - * @returns {Callbacks} - */ -function initCallbacks(callbacks = {}) { - const initiatedCallback = callbacks; - - const stubCallback = () => {}; - - const allowTraversalCallback = ( - () => { - const seen = {}; - return ({ nextVertex }) => { - if (!seen[nextVertex.getKey()]) { - seen[nextVertex.getKey()] = true; - return true; - } - return false; - }; - } - )(); - - initiatedCallback.allowTraversal = callbacks.allowTraversal || allowTraversalCallback; - initiatedCallback.enterVertex = callbacks.enterVertex || stubCallback; - initiatedCallback.leaveVertex = callbacks.leaveVertex || stubCallback; - - return initiatedCallback; -} - -/** - * @param {Graph} graph - * @param {GraphVertex} currentVertex - * @param {GraphVertex} previousVertex - * @param {Callbacks} callbacks - */ -function depthFirstSearchRecursive(graph, currentVertex, previousVertex, callbacks) { - callbacks.enterVertex({ currentVertex, previousVertex }); - - graph.getNeighbors(currentVertex).forEach((nextVertex) => { - if (callbacks.allowTraversal({ previousVertex, currentVertex, nextVertex })) { - depthFirstSearchRecursive(graph, nextVertex, currentVertex, callbacks); - } - }); - - callbacks.leaveVertex({ currentVertex, previousVertex }); -} - -/** - * @param {Graph} graph - * @param {GraphVertex} startVertex - * @param {Callbacks} [callbacks] - */ -export default function depthFirstSearch(graph, startVertex, callbacks) { - const previousVertex = null; - depthFirstSearchRecursive(graph, startVertex, previousVertex, initCallbacks(callbacks)); -} diff --git a/src/algorithms/graph/detect-cycle/README.md b/src/algorithms/graph/detect-cycle/README.md deleted file mode 100644 index 82641c78a2..0000000000 --- a/src/algorithms/graph/detect-cycle/README.md +++ /dev/null @@ -1,60 +0,0 @@ -# Detect Cycle in Graphs - -In graph theory, a **cycle** is a path of edges and vertices -wherein a vertex is reachable from itself. There are several -different types of cycles, principally a **closed walk** and -a **simple cycle**. - -## Definitions - -A **closed walk** consists of a sequence of vertices starting -and ending at the same vertex, with each two consecutive vertices -in the sequence adjacent to each other in the graph. In a directed graph, -each edge must be traversed by the walk consistently with its direction: -the edge must be oriented from the earlier of two consecutive vertices -to the later of the two vertices in the sequence. -The choice of starting vertex is not important: traversing the same cyclic -sequence of edges from different starting vertices produces the same closed walk. - -A **simple cycle may** be defined either as a closed walk with no repetitions of -vertices and edges allowed, other than the repetition of the starting and ending -vertex, or as the set of edges in such a walk. The two definitions are equivalent -in directed graphs, where simple cycles are also called directed cycles: the cyclic -sequence of vertices and edges in a walk is completely determined by the set of -edges that it uses. In undirected graphs the set of edges of a cycle can be -traversed by a walk in either of two directions, giving two possible directed cycles -for every undirected cycle. A circuit can be a closed walk allowing repetitions of -vertices but not edges; however, it can also be a simple cycle, so explicit -definition is recommended when it is used. - -## Example - -![Cycles](https://upload.wikimedia.org/wikipedia/commons/e/e7/Graph_cycle.gif) - -A graph with edges colored to illustrate **path** `H-A-B` (green), closed path or -**walk with a repeated vertex** `B-D-E-F-D-C-B` (blue) and a **cycle with no repeated edge** or -vertex `H-D-G-H` (red) - -### Cycle in undirected graph - -![Undirected Cycle](https://www.geeksforgeeks.org/wp-content/uploads/cycleGraph.png) - -### Cycle in directed graph - -![Directed Cycle](https://cdncontribute.geeksforgeeks.org/wp-content/uploads/cycle.png) - -## References - -General information: - -- [Wikipedia](https://en.wikipedia.org/wiki/Cycle_(graph_theory)) - -Cycles in undirected graphs: - -- [Detect Cycle in Undirected Graph on GeeksForGeeks](https://www.geeksforgeeks.org/detect-cycle-undirected-graph/) -- [Detect Cycle in Undirected Graph Algorithm on YouTube](https://www.youtube.com/watch?v=n_t0a_8H8VY&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) - -Cycles in directed graphs: - -- [Detect Cycle in Directed Graph on GeeksForGeeks](https://www.geeksforgeeks.org/detect-cycle-in-a-graph/) -- [Detect Cycle in Directed Graph Algorithm on YouTube](https://www.youtube.com/watch?v=rKQaZuoUR4M&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) diff --git a/src/algorithms/graph/detect-cycle/__test__/detectDirectedCycle.test.js b/src/algorithms/graph/detect-cycle/__test__/detectDirectedCycle.test.js deleted file mode 100644 index 64a4149338..0000000000 --- a/src/algorithms/graph/detect-cycle/__test__/detectDirectedCycle.test.js +++ /dev/null @@ -1,42 +0,0 @@ -import GraphVertex from '../../../../data-structures/graph/GraphVertex'; -import GraphEdge from '../../../../data-structures/graph/GraphEdge'; -import Graph from '../../../../data-structures/graph/Graph'; -import detectDirectedCycle from '../detectDirectedCycle'; - -describe('detectDirectedCycle', () => { - it('should detect directed cycle', () => { - const vertexA = new GraphVertex('A'); - const vertexB = new GraphVertex('B'); - const vertexC = new GraphVertex('C'); - const vertexD = new GraphVertex('D'); - const vertexE = new GraphVertex('E'); - const vertexF = new GraphVertex('F'); - - const edgeAB = new GraphEdge(vertexA, vertexB); - const edgeBC = new GraphEdge(vertexB, vertexC); - const edgeAC = new GraphEdge(vertexA, vertexC); - const edgeDA = new GraphEdge(vertexD, vertexA); - const edgeDE = new GraphEdge(vertexD, vertexE); - const edgeEF = new GraphEdge(vertexE, vertexF); - const edgeFD = new GraphEdge(vertexF, vertexD); - - const graph = new Graph(true); - graph - .addEdge(edgeAB) - .addEdge(edgeBC) - .addEdge(edgeAC) - .addEdge(edgeDA) - .addEdge(edgeDE) - .addEdge(edgeEF); - - expect(detectDirectedCycle(graph)).toBeNull(); - - graph.addEdge(edgeFD); - - expect(detectDirectedCycle(graph)).toEqual({ - D: vertexF, - F: vertexE, - E: vertexD, - }); - }); -}); diff --git a/src/algorithms/graph/detect-cycle/__test__/detectUndirectedCycle.test.js b/src/algorithms/graph/detect-cycle/__test__/detectUndirectedCycle.test.js deleted file mode 100644 index c3f9903102..0000000000 --- a/src/algorithms/graph/detect-cycle/__test__/detectUndirectedCycle.test.js +++ /dev/null @@ -1,41 +0,0 @@ -import GraphVertex from '../../../../data-structures/graph/GraphVertex'; -import GraphEdge from '../../../../data-structures/graph/GraphEdge'; -import Graph from '../../../../data-structures/graph/Graph'; -import detectUndirectedCycle from '../detectUndirectedCycle'; - -describe('detectUndirectedCycle', () => { - it('should detect undirected cycle', () => { - const vertexA = new GraphVertex('A'); - const vertexB = new GraphVertex('B'); - const vertexC = new GraphVertex('C'); - const vertexD = new GraphVertex('D'); - const vertexE = new GraphVertex('E'); - const vertexF = new GraphVertex('F'); - - const edgeAF = new GraphEdge(vertexA, vertexF); - const edgeAB = new GraphEdge(vertexA, vertexB); - const edgeBE = new GraphEdge(vertexB, vertexE); - const edgeBC = new GraphEdge(vertexB, vertexC); - const edgeCD = new GraphEdge(vertexC, vertexD); - const edgeDE = new GraphEdge(vertexD, vertexE); - - const graph = new Graph(); - graph - .addEdge(edgeAF) - .addEdge(edgeAB) - .addEdge(edgeBE) - .addEdge(edgeBC) - .addEdge(edgeCD); - - expect(detectUndirectedCycle(graph)).toBeNull(); - - graph.addEdge(edgeDE); - - expect(detectUndirectedCycle(graph)).toEqual({ - B: vertexC, - C: vertexD, - D: vertexE, - E: vertexB, - }); - }); -}); diff --git a/src/algorithms/graph/detect-cycle/__test__/detectUndirectedCycleUsingDisjointSet.test.js b/src/algorithms/graph/detect-cycle/__test__/detectUndirectedCycleUsingDisjointSet.test.js deleted file mode 100644 index 15cb153471..0000000000 --- a/src/algorithms/graph/detect-cycle/__test__/detectUndirectedCycleUsingDisjointSet.test.js +++ /dev/null @@ -1,36 +0,0 @@ -import GraphVertex from '../../../../data-structures/graph/GraphVertex'; -import GraphEdge from '../../../../data-structures/graph/GraphEdge'; -import Graph from '../../../../data-structures/graph/Graph'; -import detectUndirectedCycleUsingDisjointSet from '../detectUndirectedCycleUsingDisjointSet'; - -describe('detectUndirectedCycleUsingDisjointSet', () => { - it('should detect undirected cycle', () => { - const vertexA = new GraphVertex('A'); - const vertexB = new GraphVertex('B'); - const vertexC = new GraphVertex('C'); - const vertexD = new GraphVertex('D'); - const vertexE = new GraphVertex('E'); - const vertexF = new GraphVertex('F'); - - const edgeAF = new GraphEdge(vertexA, vertexF); - const edgeAB = new GraphEdge(vertexA, vertexB); - const edgeBE = new GraphEdge(vertexB, vertexE); - const edgeBC = new GraphEdge(vertexB, vertexC); - const edgeCD = new GraphEdge(vertexC, vertexD); - const edgeDE = new GraphEdge(vertexD, vertexE); - - const graph = new Graph(); - graph - .addEdge(edgeAF) - .addEdge(edgeAB) - .addEdge(edgeBE) - .addEdge(edgeBC) - .addEdge(edgeCD); - - expect(detectUndirectedCycleUsingDisjointSet(graph)).toBe(false); - - graph.addEdge(edgeDE); - - expect(detectUndirectedCycleUsingDisjointSet(graph)).toBe(true); - }); -}); diff --git a/src/algorithms/graph/detect-cycle/detectDirectedCycle.js b/src/algorithms/graph/detect-cycle/detectDirectedCycle.js deleted file mode 100644 index 73b2b22419..0000000000 --- a/src/algorithms/graph/detect-cycle/detectDirectedCycle.js +++ /dev/null @@ -1,93 +0,0 @@ -import depthFirstSearch from '../depth-first-search/depthFirstSearch'; - -/** - * Detect cycle in directed graph using Depth First Search. - * - * @param {Graph} graph - */ -export default function detectDirectedCycle(graph) { - let cycle = null; - - // Will store parents (previous vertices) for all visited nodes. - // This will be needed in order to specify what path exactly is a cycle. - const dfsParentMap = {}; - - // White set (UNVISITED) contains all the vertices that haven't been visited at all. - const whiteSet = {}; - - // Gray set (VISITING) contains all the vertices that are being visited right now - // (in current path). - const graySet = {}; - - // Black set (VISITED) contains all the vertices that has been fully visited. - // Meaning that all children of the vertex has been visited. - const blackSet = {}; - - // If we encounter vertex in gray set it means that we've found a cycle. - // Because when vertex in gray set it means that its neighbors or its neighbors - // neighbors are still being explored. - - // Init white set and add all vertices to it. - /** @param {GraphVertex} vertex */ - graph.getAllVertices().forEach((vertex) => { - whiteSet[vertex.getKey()] = vertex; - }); - - // Describe BFS callbacks. - const callbacks = { - enterVertex: ({ currentVertex, previousVertex }) => { - if (graySet[currentVertex.getKey()]) { - // If current vertex already in grey set it means that cycle is detected. - // Let's detect cycle path. - cycle = {}; - - let currentCycleVertex = currentVertex; - let previousCycleVertex = previousVertex; - - while (previousCycleVertex.getKey() !== currentVertex.getKey()) { - cycle[currentCycleVertex.getKey()] = previousCycleVertex; - currentCycleVertex = previousCycleVertex; - previousCycleVertex = dfsParentMap[previousCycleVertex.getKey()]; - } - - cycle[currentCycleVertex.getKey()] = previousCycleVertex; - } else { - // Otherwise let's add current vertex to gray set and remove it from white set. - graySet[currentVertex.getKey()] = currentVertex; - delete whiteSet[currentVertex.getKey()]; - - // Update DFS parents list. - dfsParentMap[currentVertex.getKey()] = previousVertex; - } - }, - leaveVertex: ({ currentVertex }) => { - // If all node's children has been visited let's remove it from gray set - // and move it to the black set meaning that all its neighbors are visited. - blackSet[currentVertex.getKey()] = currentVertex; - delete graySet[currentVertex.getKey()]; - }, - allowTraversal: ({ nextVertex }) => { - // If cycle was detected we must forbid all further traversing since it will - // cause infinite traversal loop. - if (cycle) { - return false; - } - - // Allow traversal only for the vertices that are not in black set - // since all black set vertices have been already visited. - return !blackSet[nextVertex.getKey()]; - }, - }; - - // Start exploring vertices. - while (Object.keys(whiteSet).length) { - // Pick fist vertex to start BFS from. - const firstWhiteKey = Object.keys(whiteSet)[0]; - const startVertex = whiteSet[firstWhiteKey]; - - // Do Depth First Search. - depthFirstSearch(graph, startVertex, callbacks); - } - - return cycle; -} diff --git a/src/algorithms/graph/detect-cycle/detectUndirectedCycle.js b/src/algorithms/graph/detect-cycle/detectUndirectedCycle.js deleted file mode 100644 index 5bcc9bb699..0000000000 --- a/src/algorithms/graph/detect-cycle/detectUndirectedCycle.js +++ /dev/null @@ -1,59 +0,0 @@ -import depthFirstSearch from '../depth-first-search/depthFirstSearch'; - -/** - * Detect cycle in undirected graph using Depth First Search. - * - * @param {Graph} graph - */ -export default function detectUndirectedCycle(graph) { - let cycle = null; - - // List of vertices that we have visited. - const visitedVertices = {}; - - // List of parents vertices for every visited vertex. - const parents = {}; - - // Callbacks for DFS traversing. - const callbacks = { - allowTraversal: ({ currentVertex, nextVertex }) => { - // Don't allow further traversal in case if cycle has been detected. - if (cycle) { - return false; - } - - // Don't allow traversal from child back to its parent. - const currentVertexParent = parents[currentVertex.getKey()]; - const currentVertexParentKey = currentVertexParent ? currentVertexParent.getKey() : null; - - return currentVertexParentKey !== nextVertex.getKey(); - }, - enterVertex: ({ currentVertex, previousVertex }) => { - if (visitedVertices[currentVertex.getKey()]) { - // Compile cycle path based on parents of previous vertices. - cycle = {}; - - let currentCycleVertex = currentVertex; - let previousCycleVertex = previousVertex; - - while (previousCycleVertex.getKey() !== currentVertex.getKey()) { - cycle[currentCycleVertex.getKey()] = previousCycleVertex; - currentCycleVertex = previousCycleVertex; - previousCycleVertex = parents[previousCycleVertex.getKey()]; - } - - cycle[currentCycleVertex.getKey()] = previousCycleVertex; - } else { - // Add next vertex to visited set. - visitedVertices[currentVertex.getKey()] = currentVertex; - parents[currentVertex.getKey()] = previousVertex; - } - }, - }; - - // Start DFS traversing. - const startVertex = graph.getAllVertices()[0]; - depthFirstSearch(graph, startVertex, callbacks); - - return cycle; -} diff --git a/src/algorithms/graph/detect-cycle/detectUndirectedCycleUsingDisjointSet.js b/src/algorithms/graph/detect-cycle/detectUndirectedCycleUsingDisjointSet.js deleted file mode 100644 index 7dec9c2890..0000000000 --- a/src/algorithms/graph/detect-cycle/detectUndirectedCycleUsingDisjointSet.js +++ /dev/null @@ -1,31 +0,0 @@ -import DisjointSet from '../../../data-structures/disjoint-set/DisjointSet'; - -/** - * Detect cycle in undirected graph using disjoint sets. - * - * @param {Graph} graph - */ -export default function detectUndirectedCycleUsingDisjointSet(graph) { - // Create initial singleton disjoint sets for each graph vertex. - /** @param {GraphVertex} graphVertex */ - const keyExtractor = (graphVertex) => graphVertex.getKey(); - const disjointSet = new DisjointSet(keyExtractor); - graph.getAllVertices().forEach((graphVertex) => disjointSet.makeSet(graphVertex)); - - // Go trough all graph edges one by one and check if edge vertices are from the - // different sets. In this case joint those sets together. Do this until you find - // an edge where to edge vertices are already in one set. This means that current - // edge will create a cycle. - let cycleFound = false; - /** @param {GraphEdge} graphEdge */ - graph.getAllEdges().forEach((graphEdge) => { - if (disjointSet.inSameSet(graphEdge.startVertex, graphEdge.endVertex)) { - // Cycle found. - cycleFound = true; - } else { - disjointSet.union(graphEdge.startVertex, graphEdge.endVertex); - } - }); - - return cycleFound; -} diff --git a/src/algorithms/graph/dijkstra/README.ko-KR.md b/src/algorithms/graph/dijkstra/README.ko-KR.md deleted file mode 100644 index e2595bbe23..0000000000 --- a/src/algorithms/graph/dijkstra/README.ko-KR.md +++ /dev/null @@ -1,16 +0,0 @@ -# 다익스트라 알고리즘(Dijkstra's algorithm) - -다익스트라 알고리즘은 도로 네트워크 등을 나타낼 수 있는 그래프에서 노드 간의 최단 경로를 찾는 알고리즘입니다. - -이 알고리즘은 다양한 형태로 존재합니다. 다익스트라의 원래 형태는 두 노드 간의 최단 경로를 찾았지만, 더 일반적인 형태는 단일 노드를 "소스"노드로 수정하고 그래프의 소스에서 다른 모든 노드까지의 최단 경로를 찾아 최단 경로 트리(shortest-path tree)를 생성합니다. - -![Dijkstra](https://upload.wikimedia.org/wikipedia/commons/5/57/Dijkstra_Animation.gif) - -`a`와 `b` 사이의 최단 경로를 찾는 다익스트라 알고리즘입니다. -가장 낮은 거리를 가지며 방문하지 않은 정점(vertex)를 선택하고, 이를 통해 방문하지 않은 각 이웃까지의 거리를 계산하며, 더 작은 경우 이웃의 거리를 업데이트합니다. 이웃에 대한 작업을 마치면 방문한 것으로 표시(빨간색으로 변경)합니다. - -## 참조 - -- [Wikipedia](https://en.wikipedia.org/wiki/Dijkstra%27s_algorithm) -- [On YouTube by Nathaniel Fan](https://www.youtube.com/watch?v=gdmfOwyQlcI&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) -- [On YouTube by Tushar Roy](https://www.youtube.com/watch?v=lAXZGERcDf4&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) diff --git a/src/algorithms/graph/dijkstra/README.md b/src/algorithms/graph/dijkstra/README.md deleted file mode 100644 index d94e2a3cdf..0000000000 --- a/src/algorithms/graph/dijkstra/README.md +++ /dev/null @@ -1,28 +0,0 @@ -# Dijkstra's Algorithm - -_Read this in other languages:_ -[_한국어_](README.ko-KR.md) - -Dijkstra's algorithm is an algorithm for finding the shortest -paths between nodes in a graph, which may represent, for example, -road networks. - -The algorithm exists in many variants; Dijkstra's original variant -found the shortest path between two nodes, but a more common -variant fixes a single node as the "source" node and finds -shortest paths from the source to all other nodes in the graph, -producing a shortest-path tree. - -![Dijkstra](https://upload.wikimedia.org/wikipedia/commons/5/57/Dijkstra_Animation.gif) - -Dijkstra's algorithm to find the shortest path between `a` and `b`. -It picks the unvisited vertex with the lowest distance, -calculates the distance through it to each unvisited neighbor, -and updates the neighbor's distance if smaller. Mark visited -(set to red) when done with neighbors. - -## References - -- [Wikipedia](https://en.wikipedia.org/wiki/Dijkstra%27s_algorithm) -- [On YouTube by Nathaniel Fan](https://www.youtube.com/watch?v=gdmfOwyQlcI&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) -- [On YouTube by Tushar Roy](https://www.youtube.com/watch?v=lAXZGERcDf4&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) diff --git a/src/algorithms/graph/dijkstra/__test__/dijkstra.test.js b/src/algorithms/graph/dijkstra/__test__/dijkstra.test.js deleted file mode 100644 index f6c5a263f9..0000000000 --- a/src/algorithms/graph/dijkstra/__test__/dijkstra.test.js +++ /dev/null @@ -1,117 +0,0 @@ -import GraphVertex from '../../../../data-structures/graph/GraphVertex'; -import GraphEdge from '../../../../data-structures/graph/GraphEdge'; -import Graph from '../../../../data-structures/graph/Graph'; -import dijkstra from '../dijkstra'; - -describe('dijkstra', () => { - it('should find minimum paths to all vertices for undirected graph', () => { - const vertexA = new GraphVertex('A'); - const vertexB = new GraphVertex('B'); - const vertexC = new GraphVertex('C'); - const vertexD = new GraphVertex('D'); - const vertexE = new GraphVertex('E'); - const vertexF = new GraphVertex('F'); - const vertexG = new GraphVertex('G'); - const vertexH = new GraphVertex('H'); - - const edgeAB = new GraphEdge(vertexA, vertexB, 4); - const edgeAE = new GraphEdge(vertexA, vertexE, 7); - const edgeAC = new GraphEdge(vertexA, vertexC, 3); - const edgeBC = new GraphEdge(vertexB, vertexC, 6); - const edgeBD = new GraphEdge(vertexB, vertexD, 5); - const edgeEC = new GraphEdge(vertexE, vertexC, 8); - const edgeED = new GraphEdge(vertexE, vertexD, 2); - const edgeDC = new GraphEdge(vertexD, vertexC, 11); - const edgeDG = new GraphEdge(vertexD, vertexG, 10); - const edgeDF = new GraphEdge(vertexD, vertexF, 2); - const edgeFG = new GraphEdge(vertexF, vertexG, 3); - const edgeEG = new GraphEdge(vertexE, vertexG, 5); - - const graph = new Graph(); - graph - .addVertex(vertexH) - .addEdge(edgeAB) - .addEdge(edgeAE) - .addEdge(edgeAC) - .addEdge(edgeBC) - .addEdge(edgeBD) - .addEdge(edgeEC) - .addEdge(edgeED) - .addEdge(edgeDC) - .addEdge(edgeDG) - .addEdge(edgeDF) - .addEdge(edgeFG) - .addEdge(edgeEG); - - const { distances, previousVertices } = dijkstra(graph, vertexA); - - expect(distances).toEqual({ - H: Infinity, - A: 0, - B: 4, - E: 7, - C: 3, - D: 9, - G: 12, - F: 11, - }); - - expect(previousVertices.F.getKey()).toBe('D'); - expect(previousVertices.D.getKey()).toBe('B'); - expect(previousVertices.B.getKey()).toBe('A'); - expect(previousVertices.G.getKey()).toBe('E'); - expect(previousVertices.C.getKey()).toBe('A'); - expect(previousVertices.A).toBeNull(); - expect(previousVertices.H).toBeNull(); - }); - - it('should find minimum paths to all vertices for directed graph with negative edge weights', () => { - const vertexS = new GraphVertex('S'); - const vertexE = new GraphVertex('E'); - const vertexA = new GraphVertex('A'); - const vertexD = new GraphVertex('D'); - const vertexB = new GraphVertex('B'); - const vertexC = new GraphVertex('C'); - const vertexH = new GraphVertex('H'); - - const edgeSE = new GraphEdge(vertexS, vertexE, 8); - const edgeSA = new GraphEdge(vertexS, vertexA, 10); - const edgeED = new GraphEdge(vertexE, vertexD, 1); - const edgeDA = new GraphEdge(vertexD, vertexA, -4); - const edgeDC = new GraphEdge(vertexD, vertexC, -1); - const edgeAC = new GraphEdge(vertexA, vertexC, 2); - const edgeCB = new GraphEdge(vertexC, vertexB, -2); - const edgeBA = new GraphEdge(vertexB, vertexA, 1); - - const graph = new Graph(true); - graph - .addVertex(vertexH) - .addEdge(edgeSE) - .addEdge(edgeSA) - .addEdge(edgeED) - .addEdge(edgeDA) - .addEdge(edgeDC) - .addEdge(edgeAC) - .addEdge(edgeCB) - .addEdge(edgeBA); - - const { distances, previousVertices } = dijkstra(graph, vertexS); - - expect(distances).toEqual({ - H: Infinity, - S: 0, - A: 5, - B: 5, - C: 7, - D: 9, - E: 8, - }); - - expect(previousVertices.H).toBeNull(); - expect(previousVertices.S).toBeNull(); - expect(previousVertices.B.getKey()).toBe('C'); - expect(previousVertices.C.getKey()).toBe('A'); - expect(previousVertices.A.getKey()).toBe('D'); - expect(previousVertices.D.getKey()).toBe('E'); - }); -}); diff --git a/src/algorithms/graph/dijkstra/dijkstra.js b/src/algorithms/graph/dijkstra/dijkstra.js deleted file mode 100644 index c5b47b08d3..0000000000 --- a/src/algorithms/graph/dijkstra/dijkstra.js +++ /dev/null @@ -1,80 +0,0 @@ -import PriorityQueue from '../../../data-structures/priority-queue/PriorityQueue'; - -/** - * @typedef {Object} ShortestPaths - * @property {Object} distances - shortest distances to all vertices - * @property {Object} previousVertices - shortest paths to all vertices. - */ - -/** - * Implementation of Dijkstra algorithm of finding the shortest paths to graph nodes. - * @param {Graph} graph - graph we're going to traverse. - * @param {GraphVertex} startVertex - traversal start vertex. - * @return {ShortestPaths} - */ -export default function dijkstra(graph, startVertex) { - // Init helper variables that we will need for Dijkstra algorithm. - const distances = {}; - const visitedVertices = {}; - const previousVertices = {}; - const queue = new PriorityQueue(); - - // Init all distances with infinity assuming that currently we can't reach - // any of the vertices except the start one. - graph.getAllVertices().forEach((vertex) => { - distances[vertex.getKey()] = Infinity; - previousVertices[vertex.getKey()] = null; - }); - - // We are already at the startVertex so the distance to it is zero. - distances[startVertex.getKey()] = 0; - - // Init vertices queue. - queue.add(startVertex, distances[startVertex.getKey()]); - - // Iterate over the priority queue of vertices until it is empty. - while (!queue.isEmpty()) { - // Fetch next closest vertex. - const currentVertex = queue.poll(); - - // Iterate over every unvisited neighbor of the current vertex. - currentVertex.getNeighbors().forEach((neighbor) => { - // Don't visit already visited vertices. - if (!visitedVertices[neighbor.getKey()]) { - // Update distances to every neighbor from current vertex. - const edge = graph.findEdge(currentVertex, neighbor); - - const existingDistanceToNeighbor = distances[neighbor.getKey()]; - const distanceToNeighborFromCurrent = distances[currentVertex.getKey()] + edge.weight; - - // If we've found shorter path to the neighbor - update it. - if (distanceToNeighborFromCurrent < existingDistanceToNeighbor) { - distances[neighbor.getKey()] = distanceToNeighborFromCurrent; - - // Change priority of the neighbor in a queue since it might have became closer. - if (queue.hasValue(neighbor)) { - queue.changePriority(neighbor, distances[neighbor.getKey()]); - } - - // Remember previous closest vertex. - previousVertices[neighbor.getKey()] = currentVertex; - } - - // Add neighbor to the queue for further visiting. - if (!queue.hasValue(neighbor)) { - queue.add(neighbor, distances[neighbor.getKey()]); - } - } - }); - - // Add current vertex to visited ones to avoid visiting it again later. - visitedVertices[currentVertex.getKey()] = currentVertex; - } - - // Return the set of shortest distances to all vertices and the set of - // shortest paths to all vertices in a graph. - return { - distances, - previousVertices, - }; -} diff --git a/src/algorithms/graph/eulerian-path/README.md b/src/algorithms/graph/eulerian-path/README.md deleted file mode 100644 index 597a9ef32e..0000000000 --- a/src/algorithms/graph/eulerian-path/README.md +++ /dev/null @@ -1,35 +0,0 @@ -# Eulerian Path - -In graph theory, an **Eulerian trail** (or **Eulerian path**) is a -trail in a finite graph which visits every edge exactly once. -Similarly, an **Eulerian circuit** or **Eulerian cycle** is an -Eulerian trail which starts and ends on the same vertex. - -Euler proved that a necessary condition for the existence of Eulerian -circuits is that all vertices in the graph have an even degree, and -stated that connected graphs with all vertices of even degree have -an Eulerian circuit. - -![Eulerian Circuit](https://upload.wikimedia.org/wikipedia/commons/7/72/Labelled_Eulergraph.svg) - -Every vertex of this graph has an even degree. Therefore, this is -an Eulerian graph. Following the edges in alphabetical order gives -an Eulerian circuit/cycle. - -For the existence of Eulerian trails it is necessary that zero or -two vertices have an odd degree; this means the Königsberg graph -is not Eulerian. If there are no vertices of odd degree, -all Eulerian trails are circuits. If there are exactly two vertices -of odd degree, all Eulerian trails start at one of them and end at -the other. A graph that has an Eulerian trail but not an Eulerian -circuit is called semi-Eulerian. - -![Königsberg graph](https://upload.wikimedia.org/wikipedia/commons/9/96/K%C3%B6nigsberg_graph.svg) - -The Königsberg Bridges multigraph. This multigraph is not Eulerian, -therefore, a solution does not exist. - -## References - -- [Wikipedia](https://en.wikipedia.org/wiki/Eulerian_path) -- [YouTube](https://www.youtube.com/watch?v=vvP4Fg4r-Ns&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) diff --git a/src/algorithms/graph/eulerian-path/__test__/eulerianPath.test.js b/src/algorithms/graph/eulerian-path/__test__/eulerianPath.test.js deleted file mode 100644 index d10d980806..0000000000 --- a/src/algorithms/graph/eulerian-path/__test__/eulerianPath.test.js +++ /dev/null @@ -1,139 +0,0 @@ -import GraphVertex from '../../../../data-structures/graph/GraphVertex'; -import GraphEdge from '../../../../data-structures/graph/GraphEdge'; -import Graph from '../../../../data-structures/graph/Graph'; -import eulerianPath from '../eulerianPath'; - -describe('eulerianPath', () => { - it('should throw an error when graph is not Eulerian', () => { - function findEulerianPathInNotEulerianGraph() { - const vertexA = new GraphVertex('A'); - const vertexB = new GraphVertex('B'); - const vertexC = new GraphVertex('C'); - const vertexD = new GraphVertex('D'); - const vertexE = new GraphVertex('E'); - - const edgeAB = new GraphEdge(vertexA, vertexB); - const edgeAC = new GraphEdge(vertexA, vertexC); - const edgeBC = new GraphEdge(vertexB, vertexC); - const edgeBD = new GraphEdge(vertexB, vertexD); - const edgeCE = new GraphEdge(vertexC, vertexE); - - const graph = new Graph(); - - graph - .addEdge(edgeAB) - .addEdge(edgeAC) - .addEdge(edgeBC) - .addEdge(edgeBD) - .addEdge(edgeCE); - - eulerianPath(graph); - } - - expect(findEulerianPathInNotEulerianGraph).toThrowError(); - }); - - it('should find Eulerian Circuit in graph', () => { - const vertexA = new GraphVertex('A'); - const vertexB = new GraphVertex('B'); - const vertexC = new GraphVertex('C'); - const vertexD = new GraphVertex('D'); - const vertexE = new GraphVertex('E'); - const vertexF = new GraphVertex('F'); - const vertexG = new GraphVertex('G'); - - const edgeAB = new GraphEdge(vertexA, vertexB); - const edgeAE = new GraphEdge(vertexA, vertexE); - const edgeAF = new GraphEdge(vertexA, vertexF); - const edgeAG = new GraphEdge(vertexA, vertexG); - const edgeGF = new GraphEdge(vertexG, vertexF); - const edgeBE = new GraphEdge(vertexB, vertexE); - const edgeEB = new GraphEdge(vertexE, vertexB); - const edgeBC = new GraphEdge(vertexB, vertexC); - const edgeED = new GraphEdge(vertexE, vertexD); - const edgeCD = new GraphEdge(vertexC, vertexD); - - const graph = new Graph(); - - graph - .addEdge(edgeAB) - .addEdge(edgeAE) - .addEdge(edgeAF) - .addEdge(edgeAG) - .addEdge(edgeGF) - .addEdge(edgeBE) - .addEdge(edgeEB) - .addEdge(edgeBC) - .addEdge(edgeED) - .addEdge(edgeCD); - - const graphEdgesCount = graph.getAllEdges().length; - - const eulerianPathSet = eulerianPath(graph); - - expect(eulerianPathSet.length).toBe(graphEdgesCount + 1); - - expect(eulerianPathSet[0].getKey()).toBe(vertexA.getKey()); - expect(eulerianPathSet[1].getKey()).toBe(vertexB.getKey()); - expect(eulerianPathSet[2].getKey()).toBe(vertexE.getKey()); - expect(eulerianPathSet[3].getKey()).toBe(vertexB.getKey()); - expect(eulerianPathSet[4].getKey()).toBe(vertexC.getKey()); - expect(eulerianPathSet[5].getKey()).toBe(vertexD.getKey()); - expect(eulerianPathSet[6].getKey()).toBe(vertexE.getKey()); - expect(eulerianPathSet[7].getKey()).toBe(vertexA.getKey()); - expect(eulerianPathSet[8].getKey()).toBe(vertexF.getKey()); - expect(eulerianPathSet[9].getKey()).toBe(vertexG.getKey()); - expect(eulerianPathSet[10].getKey()).toBe(vertexA.getKey()); - }); - - it('should find Eulerian Path in graph', () => { - const vertexA = new GraphVertex('A'); - const vertexB = new GraphVertex('B'); - const vertexC = new GraphVertex('C'); - const vertexD = new GraphVertex('D'); - const vertexE = new GraphVertex('E'); - const vertexF = new GraphVertex('F'); - const vertexG = new GraphVertex('G'); - const vertexH = new GraphVertex('H'); - - const edgeAB = new GraphEdge(vertexA, vertexB); - const edgeAC = new GraphEdge(vertexA, vertexC); - const edgeBD = new GraphEdge(vertexB, vertexD); - const edgeDC = new GraphEdge(vertexD, vertexC); - const edgeCE = new GraphEdge(vertexC, vertexE); - const edgeEF = new GraphEdge(vertexE, vertexF); - const edgeFH = new GraphEdge(vertexF, vertexH); - const edgeFG = new GraphEdge(vertexF, vertexG); - const edgeHG = new GraphEdge(vertexH, vertexG); - - const graph = new Graph(); - - graph - .addEdge(edgeAB) - .addEdge(edgeAC) - .addEdge(edgeBD) - .addEdge(edgeDC) - .addEdge(edgeCE) - .addEdge(edgeEF) - .addEdge(edgeFH) - .addEdge(edgeFG) - .addEdge(edgeHG); - - const graphEdgesCount = graph.getAllEdges().length; - - const eulerianPathSet = eulerianPath(graph); - - expect(eulerianPathSet.length).toBe(graphEdgesCount + 1); - - expect(eulerianPathSet[0].getKey()).toBe(vertexC.getKey()); - expect(eulerianPathSet[1].getKey()).toBe(vertexA.getKey()); - expect(eulerianPathSet[2].getKey()).toBe(vertexB.getKey()); - expect(eulerianPathSet[3].getKey()).toBe(vertexD.getKey()); - expect(eulerianPathSet[4].getKey()).toBe(vertexC.getKey()); - expect(eulerianPathSet[5].getKey()).toBe(vertexE.getKey()); - expect(eulerianPathSet[6].getKey()).toBe(vertexF.getKey()); - expect(eulerianPathSet[7].getKey()).toBe(vertexH.getKey()); - expect(eulerianPathSet[8].getKey()).toBe(vertexG.getKey()); - expect(eulerianPathSet[9].getKey()).toBe(vertexF.getKey()); - }); -}); diff --git a/src/algorithms/graph/eulerian-path/eulerianPath.js b/src/algorithms/graph/eulerian-path/eulerianPath.js deleted file mode 100644 index c82c6fd134..0000000000 --- a/src/algorithms/graph/eulerian-path/eulerianPath.js +++ /dev/null @@ -1,101 +0,0 @@ -import graphBridges from '../bridges/graphBridges'; - -/** - * Fleury's algorithm of finding Eulerian Path (visit all graph edges exactly once). - * - * @param {Graph} graph - * @return {GraphVertex[]} - */ -export default function eulerianPath(graph) { - const eulerianPathVertices = []; - - // Set that contains all vertices with even rank (number of neighbors). - const evenRankVertices = {}; - - // Set that contains all vertices with odd rank (number of neighbors). - const oddRankVertices = {}; - - // Set of all not visited edges. - const notVisitedEdges = {}; - graph.getAllEdges().forEach((vertex) => { - notVisitedEdges[vertex.getKey()] = vertex; - }); - - // Detect whether graph contains Eulerian Circuit or Eulerian Path or none of them. - /** @params {GraphVertex} vertex */ - graph.getAllVertices().forEach((vertex) => { - if (vertex.getDegree() % 2) { - oddRankVertices[vertex.getKey()] = vertex; - } else { - evenRankVertices[vertex.getKey()] = vertex; - } - }); - - // Check whether we're dealing with Eulerian Circuit or Eulerian Path only. - // Graph would be an Eulerian Circuit in case if all its vertices has even degree. - // If not all vertices have even degree then graph must contain only two odd-degree - // vertices in order to have Euler Path. - const isCircuit = !Object.values(oddRankVertices).length; - - if (!isCircuit && Object.values(oddRankVertices).length !== 2) { - throw new Error('Eulerian path must contain two odd-ranked vertices'); - } - - // Pick start vertex for traversal. - let startVertex = null; - - if (isCircuit) { - // For Eulerian Circuit it doesn't matter from what vertex to start thus we'll just - // peek a first node. - const evenVertexKey = Object.keys(evenRankVertices)[0]; - startVertex = evenRankVertices[evenVertexKey]; - } else { - // For Eulerian Path we need to start from one of two odd-degree vertices. - const oddVertexKey = Object.keys(oddRankVertices)[0]; - startVertex = oddRankVertices[oddVertexKey]; - } - - // Start traversing the graph. - let currentVertex = startVertex; - while (Object.values(notVisitedEdges).length) { - // Add current vertex to Eulerian path. - eulerianPathVertices.push(currentVertex); - - // Detect all bridges in graph. - // We need to do it in order to not delete bridges if there are other edges - // exists for deletion. - const bridges = graphBridges(graph); - - // Peek the next edge to delete from graph. - const currentEdges = currentVertex.getEdges(); - /** @var {GraphEdge} edgeToDelete */ - let edgeToDelete = null; - if (currentEdges.length === 1) { - // If there is only one edge left we need to peek it. - [edgeToDelete] = currentEdges; - } else { - // If there are many edges left then we need to peek any of those except bridges. - [edgeToDelete] = currentEdges.filter((edge) => !bridges[edge.getKey()]); - } - - // Detect next current vertex. - if (currentVertex.getKey() === edgeToDelete.startVertex.getKey()) { - currentVertex = edgeToDelete.endVertex; - } else { - currentVertex = edgeToDelete.startVertex; - } - - // Delete edge from not visited edges set. - delete notVisitedEdges[edgeToDelete.getKey()]; - - // If last edge were deleted then add finish vertex to Eulerian Path. - if (Object.values(notVisitedEdges).length === 0) { - eulerianPathVertices.push(currentVertex); - } - - // Delete the edge from graph. - graph.deleteEdge(edgeToDelete); - } - - return eulerianPathVertices; -} diff --git a/src/algorithms/graph/floyd-warshall/README.md b/src/algorithms/graph/floyd-warshall/README.md deleted file mode 100644 index f662861305..0000000000 --- a/src/algorithms/graph/floyd-warshall/README.md +++ /dev/null @@ -1,94 +0,0 @@ -# Floyd–Warshall Algorithm - -In computer science, the **Floyd–Warshall algorithm** is an algorithm for finding -shortest paths in a weighted graph with positive or negative edge weights (but -with no negative cycles). A single execution of the algorithm will find the -lengths (summed weights) of shortest paths between all pairs of vertices. Although -it does not return details of the paths themselves, it is possible to reconstruct -the paths with simple modifications to the algorithm. - -## Algorithm - -The Floyd–Warshall algorithm compares all possible paths through the graph between -each pair of vertices. It is able to do this with `O(|V|^3)` comparisons in a graph. -This is remarkable considering that there may be up to `|V|^2` edges in the graph, -and every combination of edges is tested. It does so by incrementally improving an -estimate on the shortest path between two vertices, until the estimate is optimal. - -Consider a graph `G` with vertices `V` numbered `1` through `N`. Further consider -a function `shortestPath(i, j, k)` that returns the shortest possible path -from `i` to `j` using vertices only from the set `{1, 2, ..., k}` as -intermediate points along the way. Now, given this function, our goal is to -find the shortest path from each `i` to each `j` using only vertices -in `{1, 2, ..., N}`. - -![Recursive Formula](https://wikimedia.org/api/rest_v1/media/math/render/svg/f9b75e25063384ccca499c56f9a279abf661ad3b) - -![Recursive Formula](https://wikimedia.org/api/rest_v1/media/math/render/svg/34ac7c89bbb18df3fd660225fd38997079e5e513) -![Recursive Formula](https://wikimedia.org/api/rest_v1/media/math/render/svg/0326d6c14def89269c029da59eba012d0f2edc9d) - -This formula is the heart of the Floyd–Warshall algorithm. - -## Example - -The algorithm above is executed on the graph on the left below: - -![Example](https://upload.wikimedia.org/wikipedia/commons/2/2e/Floyd-Warshall_example.svg) - -In the tables below `i` is row numbers and `j` is column numbers. - - -**k = 0** - -| | 1 | 2 | 3 | 4 | -|:-----:|:---:|:---:|:---:|:---:| -| **1** | 0 | ∞ | −2 | ∞ | -| **2** | 4 | 0 | 3 | ∞ | -| **3** | ∞ | ∞ | 0 | 2 | -| **4** | ∞ | −1 | ∞ | 0 | - - -**k = 1** - -| | 1 | 2 | 3 | 4 | -|:-----:|:---:|:---:|:---:|:---:| -| **1** | 0 | ∞ | −2 | ∞ | -| **2** | 4 | 0 | 2 | ∞ | -| **3** | ∞ | ∞ | 0 | 2 | -| **4** | ∞ | − | ∞ | 0 | - - -**k = 2** - -| | 1 | 2 | 3 | 4 | -|:-----:|:---:|:---:|:---:|:---:| -| **1** | 0 | ∞ | −2 | ∞ | -| **2** | 4 | 0 | 2 | ∞ | -| **3** | ∞ | ∞ | 0 | 2 | -| **4** | 3 | −1 | 1 | 0 | - - -**k = 3** - -| | 1 | 2 | 3 | 4 | -|:-----:|:---:|:---:|:---:|:---:| -| **1** | 0 | ∞ | −2 | 0 | -| **2** | 4 | 0 | 2 | 4 | -| **3** | ∞ | ∞ | 0 | 2 | -| **4** | 3 | −1 | 1 | 0 | - - -**k = 4** - -| | 1 | 2 | 3 | 4 | -|:-----:|:---:|:---:|:---:|:---:| -| **1** | 0 | −1 | −2 | 0 | -| **2** | 4 | 0 | 2 | 4 | -| **3** | 5 | 1 | 0 | 2 | -| **4** | 3 | −1 | 1 | 0 | - -## References - -- [Wikipedia](https://en.wikipedia.org/wiki/Floyd%E2%80%93Warshall_algorithm) -- [YouTube (by Abdul Bari)](https://www.youtube.com/watch?v=oNI0rf2P9gE&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8&index=74) -- [YouTube (by Tushar Roy)](https://www.youtube.com/watch?v=LwJdNfdLF9s&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8&index=75) diff --git a/src/algorithms/graph/floyd-warshall/__test__/floydWarshall.test.js b/src/algorithms/graph/floyd-warshall/__test__/floydWarshall.test.js deleted file mode 100644 index dea170c61a..0000000000 --- a/src/algorithms/graph/floyd-warshall/__test__/floydWarshall.test.js +++ /dev/null @@ -1,220 +0,0 @@ -import GraphVertex from '../../../../data-structures/graph/GraphVertex'; -import GraphEdge from '../../../../data-structures/graph/GraphEdge'; -import Graph from '../../../../data-structures/graph/Graph'; -import floydWarshall from '../floydWarshall'; - -describe('floydWarshall', () => { - it('should find minimum paths to all vertices for undirected graph', () => { - const vertexA = new GraphVertex('A'); - const vertexB = new GraphVertex('B'); - const vertexC = new GraphVertex('C'); - const vertexD = new GraphVertex('D'); - const vertexE = new GraphVertex('E'); - const vertexF = new GraphVertex('F'); - const vertexG = new GraphVertex('G'); - const vertexH = new GraphVertex('H'); - - const edgeAB = new GraphEdge(vertexA, vertexB, 4); - const edgeAE = new GraphEdge(vertexA, vertexE, 7); - const edgeAC = new GraphEdge(vertexA, vertexC, 3); - const edgeBC = new GraphEdge(vertexB, vertexC, 6); - const edgeBD = new GraphEdge(vertexB, vertexD, 5); - const edgeEC = new GraphEdge(vertexE, vertexC, 8); - const edgeED = new GraphEdge(vertexE, vertexD, 2); - const edgeDC = new GraphEdge(vertexD, vertexC, 11); - const edgeDG = new GraphEdge(vertexD, vertexG, 10); - const edgeDF = new GraphEdge(vertexD, vertexF, 2); - const edgeFG = new GraphEdge(vertexF, vertexG, 3); - const edgeEG = new GraphEdge(vertexE, vertexG, 5); - - const graph = new Graph(); - - // Add vertices first just to have them in desired order. - graph - .addVertex(vertexA) - .addVertex(vertexB) - .addVertex(vertexC) - .addVertex(vertexD) - .addVertex(vertexE) - .addVertex(vertexF) - .addVertex(vertexG) - .addVertex(vertexH); - - // Now, when vertices are in correct order let's add edges. - graph - .addEdge(edgeAB) - .addEdge(edgeAE) - .addEdge(edgeAC) - .addEdge(edgeBC) - .addEdge(edgeBD) - .addEdge(edgeEC) - .addEdge(edgeED) - .addEdge(edgeDC) - .addEdge(edgeDG) - .addEdge(edgeDF) - .addEdge(edgeFG) - .addEdge(edgeEG); - - const { distances, nextVertices } = floydWarshall(graph); - - const vertices = graph.getAllVertices(); - - const vertexAIndex = vertices.indexOf(vertexA); - const vertexBIndex = vertices.indexOf(vertexB); - const vertexCIndex = vertices.indexOf(vertexC); - const vertexDIndex = vertices.indexOf(vertexD); - const vertexEIndex = vertices.indexOf(vertexE); - const vertexFIndex = vertices.indexOf(vertexF); - const vertexGIndex = vertices.indexOf(vertexG); - const vertexHIndex = vertices.indexOf(vertexH); - - expect(distances[vertexAIndex][vertexHIndex]).toBe(Infinity); - expect(distances[vertexAIndex][vertexAIndex]).toBe(0); - expect(distances[vertexAIndex][vertexBIndex]).toBe(4); - expect(distances[vertexAIndex][vertexEIndex]).toBe(7); - expect(distances[vertexAIndex][vertexCIndex]).toBe(3); - expect(distances[vertexAIndex][vertexDIndex]).toBe(9); - expect(distances[vertexAIndex][vertexGIndex]).toBe(12); - expect(distances[vertexAIndex][vertexFIndex]).toBe(11); - - expect(nextVertices[vertexAIndex][vertexFIndex]).toBe(vertexD); - expect(nextVertices[vertexAIndex][vertexDIndex]).toBe(vertexB); - expect(nextVertices[vertexAIndex][vertexBIndex]).toBe(vertexA); - expect(nextVertices[vertexAIndex][vertexGIndex]).toBe(vertexE); - expect(nextVertices[vertexAIndex][vertexCIndex]).toBe(vertexA); - expect(nextVertices[vertexAIndex][vertexAIndex]).toBe(null); - expect(nextVertices[vertexAIndex][vertexHIndex]).toBe(null); - }); - - it('should find minimum paths to all vertices for directed graph', () => { - const vertexA = new GraphVertex('A'); - const vertexB = new GraphVertex('B'); - const vertexC = new GraphVertex('C'); - const vertexD = new GraphVertex('D'); - - const edgeAB = new GraphEdge(vertexA, vertexB, 3); - const edgeBA = new GraphEdge(vertexB, vertexA, 8); - const edgeAD = new GraphEdge(vertexA, vertexD, 7); - const edgeDA = new GraphEdge(vertexD, vertexA, 2); - const edgeBC = new GraphEdge(vertexB, vertexC, 2); - const edgeCA = new GraphEdge(vertexC, vertexA, 5); - const edgeCD = new GraphEdge(vertexC, vertexD, 1); - - const graph = new Graph(true); - - // Add vertices first just to have them in desired order. - graph - .addVertex(vertexA) - .addVertex(vertexB) - .addVertex(vertexC) - .addVertex(vertexD); - - // Now, when vertices are in correct order let's add edges. - graph - .addEdge(edgeAB) - .addEdge(edgeBA) - .addEdge(edgeAD) - .addEdge(edgeDA) - .addEdge(edgeBC) - .addEdge(edgeCA) - .addEdge(edgeCD); - - const { distances, nextVertices } = floydWarshall(graph); - - const vertices = graph.getAllVertices(); - - const vertexAIndex = vertices.indexOf(vertexA); - const vertexBIndex = vertices.indexOf(vertexB); - const vertexCIndex = vertices.indexOf(vertexC); - const vertexDIndex = vertices.indexOf(vertexD); - - expect(distances[vertexAIndex][vertexAIndex]).toBe(0); - expect(distances[vertexAIndex][vertexBIndex]).toBe(3); - expect(distances[vertexAIndex][vertexCIndex]).toBe(5); - expect(distances[vertexAIndex][vertexDIndex]).toBe(6); - - expect(distances).toEqual([ - [0, 3, 5, 6], - [5, 0, 2, 3], - [3, 6, 0, 1], - [2, 5, 7, 0], - ]); - - expect(nextVertices[vertexAIndex][vertexDIndex]).toBe(vertexC); - expect(nextVertices[vertexAIndex][vertexCIndex]).toBe(vertexB); - expect(nextVertices[vertexBIndex][vertexDIndex]).toBe(vertexC); - expect(nextVertices[vertexAIndex][vertexAIndex]).toBe(null); - expect(nextVertices[vertexAIndex][vertexBIndex]).toBe(vertexA); - }); - - it('should find minimum paths to all vertices for directed graph with negative edge weights', () => { - const vertexA = new GraphVertex('A'); - const vertexB = new GraphVertex('B'); - const vertexC = new GraphVertex('C'); - const vertexD = new GraphVertex('D'); - const vertexE = new GraphVertex('E'); - const vertexF = new GraphVertex('F'); - const vertexG = new GraphVertex('G'); - - const edgeFE = new GraphEdge(vertexF, vertexE, 8); - const edgeFA = new GraphEdge(vertexF, vertexA, 10); - const edgeED = new GraphEdge(vertexE, vertexD, 1); - const edgeDA = new GraphEdge(vertexD, vertexA, -4); - const edgeDC = new GraphEdge(vertexD, vertexC, -1); - const edgeAC = new GraphEdge(vertexA, vertexC, 2); - const edgeCB = new GraphEdge(vertexC, vertexB, -2); - const edgeBA = new GraphEdge(vertexB, vertexA, 1); - - const graph = new Graph(true); - - // Add vertices first just to have them in desired order. - graph - .addVertex(vertexA) - .addVertex(vertexB) - .addVertex(vertexC) - .addVertex(vertexD) - .addVertex(vertexE) - .addVertex(vertexF) - .addVertex(vertexG); - - // Now, when vertices are in correct order let's add edges. - graph - .addEdge(edgeFE) - .addEdge(edgeFA) - .addEdge(edgeED) - .addEdge(edgeDA) - .addEdge(edgeDC) - .addEdge(edgeAC) - .addEdge(edgeCB) - .addEdge(edgeBA); - - const { distances, nextVertices } = floydWarshall(graph); - - const vertices = graph.getAllVertices(); - - const vertexAIndex = vertices.indexOf(vertexA); - const vertexBIndex = vertices.indexOf(vertexB); - const vertexCIndex = vertices.indexOf(vertexC); - const vertexDIndex = vertices.indexOf(vertexD); - const vertexEIndex = vertices.indexOf(vertexE); - const vertexGIndex = vertices.indexOf(vertexG); - const vertexFIndex = vertices.indexOf(vertexF); - - expect(distances[vertexFIndex][vertexGIndex]).toBe(Infinity); - expect(distances[vertexFIndex][vertexFIndex]).toBe(0); - expect(distances[vertexFIndex][vertexAIndex]).toBe(5); - expect(distances[vertexFIndex][vertexBIndex]).toBe(5); - expect(distances[vertexFIndex][vertexCIndex]).toBe(7); - expect(distances[vertexFIndex][vertexDIndex]).toBe(9); - expect(distances[vertexFIndex][vertexEIndex]).toBe(8); - - expect(nextVertices[vertexFIndex][vertexGIndex]).toBe(null); - expect(nextVertices[vertexFIndex][vertexFIndex]).toBe(null); - expect(nextVertices[vertexAIndex][vertexBIndex]).toBe(vertexC); - expect(nextVertices[vertexAIndex][vertexCIndex]).toBe(vertexA); - expect(nextVertices[vertexFIndex][vertexBIndex]).toBe(vertexE); - expect(nextVertices[vertexEIndex][vertexBIndex]).toBe(vertexD); - expect(nextVertices[vertexDIndex][vertexBIndex]).toBe(vertexC); - expect(nextVertices[vertexCIndex][vertexBIndex]).toBe(vertexC); - }); -}); diff --git a/src/algorithms/graph/floyd-warshall/floydWarshall.js b/src/algorithms/graph/floyd-warshall/floydWarshall.js deleted file mode 100644 index 870d78a6e8..0000000000 --- a/src/algorithms/graph/floyd-warshall/floydWarshall.js +++ /dev/null @@ -1,72 +0,0 @@ -/** - * @param {Graph} graph - * @return {{distances: number[][], nextVertices: GraphVertex[][]}} - */ -export default function floydWarshall(graph) { - // Get all graph vertices. - const vertices = graph.getAllVertices(); - - // Init previous vertices matrix with nulls meaning that there are no - // previous vertices exist that will give us shortest path. - const nextVertices = Array(vertices.length).fill(null).map(() => { - return Array(vertices.length).fill(null); - }); - - // Init distances matrix with Infinities meaning there are no paths - // between vertices exist so far. - const distances = Array(vertices.length).fill(null).map(() => { - return Array(vertices.length).fill(Infinity); - }); - - // Init distance matrix with the distance we already now (from existing edges). - // And also init previous vertices from the edges. - vertices.forEach((startVertex, startIndex) => { - vertices.forEach((endVertex, endIndex) => { - if (startVertex === endVertex) { - // Distance to the vertex itself is 0. - distances[startIndex][endIndex] = 0; - } else { - // Find edge between the start and end vertices. - const edge = graph.findEdge(startVertex, endVertex); - - if (edge) { - // There is an edge from vertex with startIndex to vertex with endIndex. - // Save distance and previous vertex. - distances[startIndex][endIndex] = edge.weight; - nextVertices[startIndex][endIndex] = startVertex; - } else { - distances[startIndex][endIndex] = Infinity; - } - } - }); - }); - - // Now let's go to the core of the algorithm. - // Let's all pair of vertices (from start to end ones) and try to check if there - // is a shorter path exists between them via middle vertex. Middle vertex may also - // be one of the graph vertices. As you may see now we're going to have three - // loops over all graph vertices: for start, end and middle vertices. - vertices.forEach((middleVertex, middleIndex) => { - // Path starts from startVertex with startIndex. - vertices.forEach((startVertex, startIndex) => { - // Path ends to endVertex with endIndex. - vertices.forEach((endVertex, endIndex) => { - // Compare existing distance from startVertex to endVertex, with distance - // from startVertex to endVertex but via middleVertex. - // Save the shortest distance and previous vertex that allows - // us to have this shortest distance. - const distViaMiddle = distances[startIndex][middleIndex] + distances[middleIndex][endIndex]; - - if (distances[startIndex][endIndex] > distViaMiddle) { - // We've found a shortest pass via middle vertex. - distances[startIndex][endIndex] = distViaMiddle; - nextVertices[startIndex][endIndex] = middleVertex; - } - }); - }); - }); - - // Shortest distance from x to y: distance[x][y]. - // Next vertex after x one in path from x to y: nextVertices[x][y]. - return { distances, nextVertices }; -} diff --git a/src/algorithms/graph/hamiltonian-cycle/README.md b/src/algorithms/graph/hamiltonian-cycle/README.md deleted file mode 100644 index ccd15481ba..0000000000 --- a/src/algorithms/graph/hamiltonian-cycle/README.md +++ /dev/null @@ -1,48 +0,0 @@ -# Hamiltonian Path - -**Hamiltonian path** (or **traceable path**) is a path in an -undirected or directed graph that visits each vertex exactly once. -A **Hamiltonian cycle** (or **Hamiltonian circuit**) is a -Hamiltonian path that is a cycle. Determining whether such paths -and cycles exist in graphs is the **Hamiltonian path problem**. - -![Hamiltonian cycle](https://upload.wikimedia.org/wikipedia/commons/6/6c/Hamiltonian_path_3d.svg) - -One possible Hamiltonian cycle through every vertex of a -dodecahedron is shown in red – like all platonic solids, the -dodecahedron is Hamiltonian. - -## Naive Algorithm - -Generate all possible configurations of vertices and print a -configuration that satisfies the given constraints. There -will be `n!` (n factorial) configurations. - -``` -while there are untried configurations -{ - generate the next configuration - if ( there are edges between two consecutive vertices of this - configuration and there is an edge from the last vertex to - the first ). - { - print this configuration; - break; - } -} -``` - -## Backtracking Algorithm - -Create an empty path array and add vertex `0` to it. Add other -vertices, starting from the vertex `1`. Before adding a vertex, -check for whether it is adjacent to the previously added vertex -and not already added. If we find such a vertex, we add the -vertex as part of the solution. If we do not find a vertex -then we return false. - -## References - -- [Hamiltonian path on Wikipedia](https://en.wikipedia.org/wiki/Hamiltonian_path) -- [Hamiltonian path on YouTube](https://www.youtube.com/watch?v=dQr4wZCiJJ4&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) -- [Hamiltonian cycle on GeeksForGeeks](https://www.geeksforgeeks.org/backtracking-set-7-hamiltonian-cycle/) diff --git a/src/algorithms/graph/hamiltonian-cycle/__test__/hamiltonianCycle.test.js b/src/algorithms/graph/hamiltonian-cycle/__test__/hamiltonianCycle.test.js deleted file mode 100644 index eab0d333dc..0000000000 --- a/src/algorithms/graph/hamiltonian-cycle/__test__/hamiltonianCycle.test.js +++ /dev/null @@ -1,90 +0,0 @@ -import GraphVertex from '../../../../data-structures/graph/GraphVertex'; -import GraphEdge from '../../../../data-structures/graph/GraphEdge'; -import Graph from '../../../../data-structures/graph/Graph'; -import hamiltonianCycle from '../hamiltonianCycle'; - -describe('hamiltonianCycle', () => { - it('should find hamiltonian paths in graph', () => { - const vertexA = new GraphVertex('A'); - const vertexB = new GraphVertex('B'); - const vertexC = new GraphVertex('C'); - const vertexD = new GraphVertex('D'); - const vertexE = new GraphVertex('E'); - - const edgeAB = new GraphEdge(vertexA, vertexB); - const edgeAE = new GraphEdge(vertexA, vertexE); - const edgeAC = new GraphEdge(vertexA, vertexC); - const edgeBE = new GraphEdge(vertexB, vertexE); - const edgeBC = new GraphEdge(vertexB, vertexC); - const edgeBD = new GraphEdge(vertexB, vertexD); - const edgeCD = new GraphEdge(vertexC, vertexD); - const edgeDE = new GraphEdge(vertexD, vertexE); - - const graph = new Graph(); - graph - .addEdge(edgeAB) - .addEdge(edgeAE) - .addEdge(edgeAC) - .addEdge(edgeBE) - .addEdge(edgeBC) - .addEdge(edgeBD) - .addEdge(edgeCD) - .addEdge(edgeDE); - - const hamiltonianCycleSet = hamiltonianCycle(graph); - - expect(hamiltonianCycleSet.length).toBe(8); - - expect(hamiltonianCycleSet[0][0].getKey()).toBe(vertexA.getKey()); - expect(hamiltonianCycleSet[0][1].getKey()).toBe(vertexB.getKey()); - expect(hamiltonianCycleSet[0][2].getKey()).toBe(vertexE.getKey()); - expect(hamiltonianCycleSet[0][3].getKey()).toBe(vertexD.getKey()); - expect(hamiltonianCycleSet[0][4].getKey()).toBe(vertexC.getKey()); - - expect(hamiltonianCycleSet[1][0].getKey()).toBe(vertexA.getKey()); - expect(hamiltonianCycleSet[1][1].getKey()).toBe(vertexB.getKey()); - expect(hamiltonianCycleSet[1][2].getKey()).toBe(vertexC.getKey()); - expect(hamiltonianCycleSet[1][3].getKey()).toBe(vertexD.getKey()); - expect(hamiltonianCycleSet[1][4].getKey()).toBe(vertexE.getKey()); - - expect(hamiltonianCycleSet[2][0].getKey()).toBe(vertexA.getKey()); - expect(hamiltonianCycleSet[2][1].getKey()).toBe(vertexE.getKey()); - expect(hamiltonianCycleSet[2][2].getKey()).toBe(vertexB.getKey()); - expect(hamiltonianCycleSet[2][3].getKey()).toBe(vertexD.getKey()); - expect(hamiltonianCycleSet[2][4].getKey()).toBe(vertexC.getKey()); - - expect(hamiltonianCycleSet[3][0].getKey()).toBe(vertexA.getKey()); - expect(hamiltonianCycleSet[3][1].getKey()).toBe(vertexE.getKey()); - expect(hamiltonianCycleSet[3][2].getKey()).toBe(vertexD.getKey()); - expect(hamiltonianCycleSet[3][3].getKey()).toBe(vertexB.getKey()); - expect(hamiltonianCycleSet[3][4].getKey()).toBe(vertexC.getKey()); - }); - - it('should return false for graph without Hamiltonian path', () => { - const vertexA = new GraphVertex('A'); - const vertexB = new GraphVertex('B'); - const vertexC = new GraphVertex('C'); - const vertexD = new GraphVertex('D'); - const vertexE = new GraphVertex('E'); - - const edgeAB = new GraphEdge(vertexA, vertexB); - const edgeAE = new GraphEdge(vertexA, vertexE); - const edgeBE = new GraphEdge(vertexB, vertexE); - const edgeBC = new GraphEdge(vertexB, vertexC); - const edgeBD = new GraphEdge(vertexB, vertexD); - const edgeCD = new GraphEdge(vertexC, vertexD); - - const graph = new Graph(); - graph - .addEdge(edgeAB) - .addEdge(edgeAE) - .addEdge(edgeBE) - .addEdge(edgeBC) - .addEdge(edgeBD) - .addEdge(edgeCD); - - const hamiltonianCycleSet = hamiltonianCycle(graph); - - expect(hamiltonianCycleSet.length).toBe(0); - }); -}); diff --git a/src/algorithms/graph/hamiltonian-cycle/hamiltonianCycle.js b/src/algorithms/graph/hamiltonian-cycle/hamiltonianCycle.js deleted file mode 100644 index 2a33bf7d69..0000000000 --- a/src/algorithms/graph/hamiltonian-cycle/hamiltonianCycle.js +++ /dev/null @@ -1,134 +0,0 @@ -import GraphVertex from '../../../data-structures/graph/GraphVertex'; - -/** - * @param {number[][]} adjacencyMatrix - * @param {object} verticesIndices - * @param {GraphVertex[]} cycle - * @param {GraphVertex} vertexCandidate - * @return {boolean} - */ -function isSafe(adjacencyMatrix, verticesIndices, cycle, vertexCandidate) { - const endVertex = cycle[cycle.length - 1]; - - // Get end and candidate vertices indices in adjacency matrix. - const candidateVertexAdjacencyIndex = verticesIndices[vertexCandidate.getKey()]; - const endVertexAdjacencyIndex = verticesIndices[endVertex.getKey()]; - - // Check if last vertex in the path and candidate vertex are adjacent. - if (adjacencyMatrix[endVertexAdjacencyIndex][candidateVertexAdjacencyIndex] === Infinity) { - return false; - } - - // Check if vertexCandidate is being added to the path for the first time. - const candidateDuplicate = cycle.find((vertex) => vertex.getKey() === vertexCandidate.getKey()); - - return !candidateDuplicate; -} - -/** - * @param {number[][]} adjacencyMatrix - * @param {object} verticesIndices - * @param {GraphVertex[]} cycle - * @return {boolean} - */ -function isCycle(adjacencyMatrix, verticesIndices, cycle) { - // Check if first and last vertices in hamiltonian path are adjacent. - - // Get start and end vertices from the path. - const startVertex = cycle[0]; - const endVertex = cycle[cycle.length - 1]; - - // Get start/end vertices indices in adjacency matrix. - const startVertexAdjacencyIndex = verticesIndices[startVertex.getKey()]; - const endVertexAdjacencyIndex = verticesIndices[endVertex.getKey()]; - - // Check if we can go from end vertex to the start one. - return adjacencyMatrix[endVertexAdjacencyIndex][startVertexAdjacencyIndex] !== Infinity; -} - -/** - * @param {number[][]} adjacencyMatrix - * @param {GraphVertex[]} vertices - * @param {object} verticesIndices - * @param {GraphVertex[][]} cycles - * @param {GraphVertex[]} cycle - */ -function hamiltonianCycleRecursive({ - adjacencyMatrix, - vertices, - verticesIndices, - cycles, - cycle, -}) { - // Clone cycle in order to prevent it from modification by other DFS branches. - const currentCycle = [...cycle].map((vertex) => new GraphVertex(vertex.value)); - - if (vertices.length === currentCycle.length) { - // Hamiltonian path is found. - // Now we need to check if it is cycle or not. - if (isCycle(adjacencyMatrix, verticesIndices, currentCycle)) { - // Another solution has been found. Save it. - cycles.push(currentCycle); - } - return; - } - - for (let vertexIndex = 0; vertexIndex < vertices.length; vertexIndex += 1) { - // Get vertex candidate that we will try to put into next path step and see if it fits. - const vertexCandidate = vertices[vertexIndex]; - - // Check if it is safe to put vertex candidate to cycle. - if (isSafe(adjacencyMatrix, verticesIndices, currentCycle, vertexCandidate)) { - // Add candidate vertex to cycle path. - currentCycle.push(vertexCandidate); - - // Try to find other vertices in cycle. - hamiltonianCycleRecursive({ - adjacencyMatrix, - vertices, - verticesIndices, - cycles, - cycle: currentCycle, - }); - - // BACKTRACKING. - // Remove candidate vertex from cycle path in order to try another one. - currentCycle.pop(); - } - } -} - -/** - * @param {Graph} graph - * @return {GraphVertex[][]} - */ -export default function hamiltonianCycle(graph) { - // Gather some information about the graph that we will need to during - // the problem solving. - const verticesIndices = graph.getVerticesIndices(); - const adjacencyMatrix = graph.getAdjacencyMatrix(); - const vertices = graph.getAllVertices(); - - // Define start vertex. We will always pick the first one - // this it doesn't matter which vertex to pick in a cycle. - // Every vertex is in a cycle so we can start from any of them. - const startVertex = vertices[0]; - - // Init cycles array that will hold all solutions. - const cycles = []; - - // Init cycle array that will hold current cycle path. - const cycle = [startVertex]; - - // Try to find cycles recursively in Depth First Search order. - hamiltonianCycleRecursive({ - adjacencyMatrix, - vertices, - verticesIndices, - cycles, - cycle, - }); - - // Return found cycles. - return cycles; -} diff --git a/src/algorithms/graph/kruskal/README.ko-KR.md b/src/algorithms/graph/kruskal/README.ko-KR.md deleted file mode 100644 index eefb6a6756..0000000000 --- a/src/algorithms/graph/kruskal/README.ko-KR.md +++ /dev/null @@ -1,29 +0,0 @@ -# 크루스칼 알고리즘 - -크루스칼 알고리즘은 두 트리를 연결하는 최소 간선 가중치를 찾는 최소 신장 트리 알고리즘입니다. -각 단계에서 비용을 더하는 연결된 가중 그래프에 대한 최소 신장 트리를 찾기 때문에 그래프 이론에서의 그리디 알고리즘입니다. 즉, 트리의 모든 간선의 총 가중치가 최소화되는 모든 정점을 포함하는 트리를 형성하는 간선의 하위 집합을 찾습니다. 그래프가 연결되어 있지 않으면 최소 신장 포레스트(연결된 각 구성 요소의 최소 신장 트리)를 찾습니다. - -![Kruskal Algorithm](https://upload.wikimedia.org/wikipedia/commons/5/5c/MST_kruskal_en.gif) - -![Kruskal Demo](https://upload.wikimedia.org/wikipedia/commons/b/bb/KruskalDemo.gif) - -유클리드 거리를 기반으로 한 크루스칼 알고리즘의 데모입니다. - -## 최소 신장 트리 - -**최소 신장 트리(MST)** 또는 최소 가중치 신장 트리는 연결된 간선 가중치 무 방향 그래프의 간선의 하위 집합으로, 사이클 없이 가능한 최소 총 간선 가중치로 모든 정점을 연결합니다. 즉, 간선 가중치의 합이 가능한 작은 신장 트리입니다. 보다 일반적으로, 간선-가중치 비방향 그래프(꼭 연결되지는 않음)에는 연결된 구성 요소에 대한 최소 신장 트리의 결합인 최소 신장 포레스트(minimum spanning forest)가 있습니다. - -![Minimum Spanning Tree](https://upload.wikimedia.org/wikipedia/commons/d/d2/Minimum_spanning_tree.svg) - -평면 그래프와 해당 최소 신장 트리입니다. 각 간선은 가중치로 레이블이 지정되며, 이 값은 길이에 거의 비례합니다. - -![Minimum Spanning Tree](https://upload.wikimedia.org/wikipedia/commons/c/c9/Multiple_minimum_spanning_trees.svg) - -이 그림은 그래프에 최소 신장 트리가 두 개 이상 있을 수 있음을 보여 줍니다. 그림에서 그래프 아래의 두 트리는 주어진 그래프에서 최소 신장 트리가 될 수 있는 두 가지 경우입니다. - -## 참조 - -- [Minimum Spanning Tree on Wikipedia](https://en.wikipedia.org/wiki/Minimum_spanning_tree) -- [Kruskal's Algorithm on Wikipedia](https://en.wikipedia.org/wiki/Kruskal%27s_algorithm) -- [Kruskal's Algorithm on YouTube by Tushar Roy](https://www.youtube.com/watch?v=fAuF0EuZVCk&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) -- [Kruskal's Algorithm on YouTube by Michael Sambol](https://www.youtube.com/watch?v=71UQH7Pr9kU&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) diff --git a/src/algorithms/graph/kruskal/README.md b/src/algorithms/graph/kruskal/README.md deleted file mode 100644 index 1a71390e2f..0000000000 --- a/src/algorithms/graph/kruskal/README.md +++ /dev/null @@ -1,52 +0,0 @@ -# Kruskal's Algorithm - -_Read this in other languages:_ -[_한국어_](README.ko-KR.md) - -Kruskal's algorithm is a minimum-spanning-tree algorithm which -finds an edge of the least possible weight that connects any two -trees in the forest. It is a greedy algorithm in graph theory -as it finds a minimum spanning tree for a connected weighted -graph adding increasing cost arcs at each step. This means it -finds a subset of the edges that forms a tree that includes every -vertex, where the total weight of all the edges in the tree is -minimized. If the graph is not connected, then it finds a -minimum spanning forest (a minimum spanning tree for each -connected component). - -![Kruskal Algorithm](https://upload.wikimedia.org/wikipedia/commons/5/5c/MST_kruskal_en.gif) - -![Kruskal Demo](https://upload.wikimedia.org/wikipedia/commons/b/bb/KruskalDemo.gif) - -A demo for Kruskal's algorithm based on Euclidean distance. - -## Minimum Spanning Tree - -A **minimum spanning tree** (MST) or minimum weight spanning tree -is a subset of the edges of a connected, edge-weighted -(un)directed graph that connects all the vertices together, -without any cycles and with the minimum possible total edge -weight. That is, it is a spanning tree whose sum of edge weights -is as small as possible. More generally, any edge-weighted -undirected graph (not necessarily connected) has a minimum -spanning forest, which is a union of the minimum spanning -trees for its connected components. - -![Minimum Spanning Tree](https://upload.wikimedia.org/wikipedia/commons/d/d2/Minimum_spanning_tree.svg) - -A planar graph and its minimum spanning tree. Each edge is -labeled with its weight, which here is roughly proportional -to its length. - -![Minimum Spanning Tree](https://upload.wikimedia.org/wikipedia/commons/c/c9/Multiple_minimum_spanning_trees.svg) - -This figure shows there may be more than one minimum spanning -tree in a graph. In the figure, the two trees below the graph -are two possibilities of minimum spanning tree of the given graph. - -## References - -- [Minimum Spanning Tree on Wikipedia](https://en.wikipedia.org/wiki/Minimum_spanning_tree) -- [Kruskal's Algorithm on Wikipedia](https://en.wikipedia.org/wiki/Kruskal%27s_algorithm) -- [Kruskal's Algorithm on YouTube by Tushar Roy](https://www.youtube.com/watch?v=fAuF0EuZVCk&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) -- [Kruskal's Algorithm on YouTube by Michael Sambol](https://www.youtube.com/watch?v=71UQH7Pr9kU&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) diff --git a/src/algorithms/graph/kruskal/__test__/kruskal.test.js b/src/algorithms/graph/kruskal/__test__/kruskal.test.js deleted file mode 100644 index da71d13740..0000000000 --- a/src/algorithms/graph/kruskal/__test__/kruskal.test.js +++ /dev/null @@ -1,91 +0,0 @@ -import GraphVertex from '../../../../data-structures/graph/GraphVertex'; -import GraphEdge from '../../../../data-structures/graph/GraphEdge'; -import Graph from '../../../../data-structures/graph/Graph'; -import kruskal from '../kruskal'; - -describe('kruskal', () => { - it('should fire an error for directed graph', () => { - function applyPrimToDirectedGraph() { - const graph = new Graph(true); - - kruskal(graph); - } - - expect(applyPrimToDirectedGraph).toThrowError(); - }); - - it('should find minimum spanning tree', () => { - const vertexA = new GraphVertex('A'); - const vertexB = new GraphVertex('B'); - const vertexC = new GraphVertex('C'); - const vertexD = new GraphVertex('D'); - const vertexE = new GraphVertex('E'); - const vertexF = new GraphVertex('F'); - const vertexG = new GraphVertex('G'); - - const edgeAB = new GraphEdge(vertexA, vertexB, 2); - const edgeAD = new GraphEdge(vertexA, vertexD, 3); - const edgeAC = new GraphEdge(vertexA, vertexC, 3); - const edgeBC = new GraphEdge(vertexB, vertexC, 4); - const edgeBE = new GraphEdge(vertexB, vertexE, 3); - const edgeDF = new GraphEdge(vertexD, vertexF, 7); - const edgeEC = new GraphEdge(vertexE, vertexC, 1); - const edgeEF = new GraphEdge(vertexE, vertexF, 8); - const edgeFG = new GraphEdge(vertexF, vertexG, 9); - const edgeFC = new GraphEdge(vertexF, vertexC, 6); - - const graph = new Graph(); - - graph - .addEdge(edgeAB) - .addEdge(edgeAD) - .addEdge(edgeAC) - .addEdge(edgeBC) - .addEdge(edgeBE) - .addEdge(edgeDF) - .addEdge(edgeEC) - .addEdge(edgeEF) - .addEdge(edgeFC) - .addEdge(edgeFG); - - expect(graph.getWeight()).toEqual(46); - - const minimumSpanningTree = kruskal(graph); - - expect(minimumSpanningTree.getWeight()).toBe(24); - expect(minimumSpanningTree.getAllVertices().length).toBe(graph.getAllVertices().length); - expect(minimumSpanningTree.getAllEdges().length).toBe(graph.getAllVertices().length - 1); - expect(minimumSpanningTree.toString()).toBe('E,C,A,B,D,F,G'); - }); - - it('should find minimum spanning tree for simple graph', () => { - const vertexA = new GraphVertex('A'); - const vertexB = new GraphVertex('B'); - const vertexC = new GraphVertex('C'); - const vertexD = new GraphVertex('D'); - - const edgeAB = new GraphEdge(vertexA, vertexB, 1); - const edgeAD = new GraphEdge(vertexA, vertexD, 3); - const edgeBC = new GraphEdge(vertexB, vertexC, 1); - const edgeBD = new GraphEdge(vertexB, vertexD, 3); - const edgeCD = new GraphEdge(vertexC, vertexD, 1); - - const graph = new Graph(); - - graph - .addEdge(edgeAB) - .addEdge(edgeAD) - .addEdge(edgeBC) - .addEdge(edgeBD) - .addEdge(edgeCD); - - expect(graph.getWeight()).toEqual(9); - - const minimumSpanningTree = kruskal(graph); - - expect(minimumSpanningTree.getWeight()).toBe(3); - expect(minimumSpanningTree.getAllVertices().length).toBe(graph.getAllVertices().length); - expect(minimumSpanningTree.getAllEdges().length).toBe(graph.getAllVertices().length - 1); - expect(minimumSpanningTree.toString()).toBe('A,B,C,D'); - }); -}); diff --git a/src/algorithms/graph/kruskal/kruskal.js b/src/algorithms/graph/kruskal/kruskal.js deleted file mode 100644 index 296616a142..0000000000 --- a/src/algorithms/graph/kruskal/kruskal.js +++ /dev/null @@ -1,62 +0,0 @@ -import Graph from '../../../data-structures/graph/Graph'; -import QuickSort from '../../sorting/quick-sort/QuickSort'; -import DisjointSet from '../../../data-structures/disjoint-set/DisjointSet'; - -/** - * @param {Graph} graph - * @return {Graph} - */ -export default function kruskal(graph) { - // It should fire error if graph is directed since the algorithm works only - // for undirected graphs. - if (graph.isDirected) { - throw new Error('Kruskal\'s algorithms works only for undirected graphs'); - } - - // Init new graph that will contain minimum spanning tree of original graph. - const minimumSpanningTree = new Graph(); - - // Sort all graph edges in increasing order. - const sortingCallbacks = { - /** - * @param {GraphEdge} graphEdgeA - * @param {GraphEdge} graphEdgeB - */ - compareCallback: (graphEdgeA, graphEdgeB) => { - if (graphEdgeA.weight === graphEdgeB.weight) { - return 1; - } - - return graphEdgeA.weight <= graphEdgeB.weight ? -1 : 1; - }, - }; - const sortedEdges = new QuickSort(sortingCallbacks).sort(graph.getAllEdges()); - - // Create disjoint sets for all graph vertices. - const keyCallback = (graphVertex) => graphVertex.getKey(); - const disjointSet = new DisjointSet(keyCallback); - - graph.getAllVertices().forEach((graphVertex) => { - disjointSet.makeSet(graphVertex); - }); - - // Go through all edges started from the minimum one and try to add them - // to minimum spanning tree. The criteria of adding the edge would be whether - // it is forms the cycle or not (if it connects two vertices from one disjoint - // set or not). - for (let edgeIndex = 0; edgeIndex < sortedEdges.length; edgeIndex += 1) { - /** @var {GraphEdge} currentEdge */ - const currentEdge = sortedEdges[edgeIndex]; - - // Check if edge forms the cycle. If it does then skip it. - if (!disjointSet.inSameSet(currentEdge.startVertex, currentEdge.endVertex)) { - // Unite two subsets into one. - disjointSet.union(currentEdge.startVertex, currentEdge.endVertex); - - // Add this edge to spanning tree. - minimumSpanningTree.addEdge(currentEdge); - } - } - - return minimumSpanningTree; -} diff --git a/src/algorithms/graph/prim/README.md b/src/algorithms/graph/prim/README.md deleted file mode 100644 index 49061a278e..0000000000 --- a/src/algorithms/graph/prim/README.md +++ /dev/null @@ -1,47 +0,0 @@ -# Prim's Algorithm - -In computer science, **Prim's algorithm** is a greedy algorithm that -finds a minimum spanning tree for a weighted undirected graph. - -The algorithm operates by building this tree one vertex at a -time, from an arbitrary starting vertex, at each step adding -the cheapest possible connection from the tree to another vertex. - -![Prim's Algorithm](https://upload.wikimedia.org/wikipedia/commons/f/f7/Prim%27s_algorithm.svg) - -Prim's algorithm starting at vertex `A`. In the third step, edges -`BD` and `AB` both have weight `2`, so `BD` is chosen arbitrarily. -After that step, `AB` is no longer a candidate for addition -to the tree because it links two nodes that are already -in the tree. - -## Minimum Spanning Tree - -A **minimum spanning tree** (MST) or minimum weight spanning tree -is a subset of the edges of a connected, edge-weighted -(un)directed graph that connects all the vertices together, -without any cycles and with the minimum possible total edge -weight. That is, it is a spanning tree whose sum of edge weights -is as small as possible. More generally, any edge-weighted -undirected graph (not necessarily connected) has a minimum -spanning forest, which is a union of the minimum spanning -trees for its connected components. - -![Minimum Spanning Tree](https://upload.wikimedia.org/wikipedia/commons/d/d2/Minimum_spanning_tree.svg) - -A planar graph and its minimum spanning tree. Each edge is -labeled with its weight, which here is roughly proportional -to its length. - -![Minimum Spanning Tree](https://upload.wikimedia.org/wikipedia/commons/c/c9/Multiple_minimum_spanning_trees.svg) - -This figure shows there may be more than one minimum spanning -tree in a graph. In the figure, the two trees below the graph -are two possibilities of minimum spanning tree of the given graph. - -## References - -- [Minimum Spanning Tree on Wikipedia](https://en.wikipedia.org/wiki/Minimum_spanning_tree) -- [Prim's Algorithm on Wikipedia](https://en.wikipedia.org/wiki/Prim%27s_algorithm) -- [Prim's Algorithm on YouTube by Tushar Roy](https://www.youtube.com/watch?v=oP2-8ysT3QQ&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) -- [Prim's Algorithm on YouTube by Michael Sambol](https://www.youtube.com/watch?v=cplfcGZmX7I&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) diff --git a/src/algorithms/graph/prim/__test__/prim.test.js b/src/algorithms/graph/prim/__test__/prim.test.js deleted file mode 100644 index ac608df875..0000000000 --- a/src/algorithms/graph/prim/__test__/prim.test.js +++ /dev/null @@ -1,91 +0,0 @@ -import GraphVertex from '../../../../data-structures/graph/GraphVertex'; -import GraphEdge from '../../../../data-structures/graph/GraphEdge'; -import Graph from '../../../../data-structures/graph/Graph'; -import prim from '../prim'; - -describe('prim', () => { - it('should fire an error for directed graph', () => { - function applyPrimToDirectedGraph() { - const graph = new Graph(true); - - prim(graph); - } - - expect(applyPrimToDirectedGraph).toThrowError(); - }); - - it('should find minimum spanning tree', () => { - const vertexA = new GraphVertex('A'); - const vertexB = new GraphVertex('B'); - const vertexC = new GraphVertex('C'); - const vertexD = new GraphVertex('D'); - const vertexE = new GraphVertex('E'); - const vertexF = new GraphVertex('F'); - const vertexG = new GraphVertex('G'); - - const edgeAB = new GraphEdge(vertexA, vertexB, 2); - const edgeAD = new GraphEdge(vertexA, vertexD, 3); - const edgeAC = new GraphEdge(vertexA, vertexC, 3); - const edgeBC = new GraphEdge(vertexB, vertexC, 4); - const edgeBE = new GraphEdge(vertexB, vertexE, 3); - const edgeDF = new GraphEdge(vertexD, vertexF, 7); - const edgeEC = new GraphEdge(vertexE, vertexC, 1); - const edgeEF = new GraphEdge(vertexE, vertexF, 8); - const edgeFG = new GraphEdge(vertexF, vertexG, 9); - const edgeFC = new GraphEdge(vertexF, vertexC, 6); - - const graph = new Graph(); - - graph - .addEdge(edgeAB) - .addEdge(edgeAD) - .addEdge(edgeAC) - .addEdge(edgeBC) - .addEdge(edgeBE) - .addEdge(edgeDF) - .addEdge(edgeEC) - .addEdge(edgeEF) - .addEdge(edgeFC) - .addEdge(edgeFG); - - expect(graph.getWeight()).toEqual(46); - - const minimumSpanningTree = prim(graph); - - expect(minimumSpanningTree.getWeight()).toBe(24); - expect(minimumSpanningTree.getAllVertices().length).toBe(graph.getAllVertices().length); - expect(minimumSpanningTree.getAllEdges().length).toBe(graph.getAllVertices().length - 1); - expect(minimumSpanningTree.toString()).toBe('A,B,C,E,D,F,G'); - }); - - it('should find minimum spanning tree for simple graph', () => { - const vertexA = new GraphVertex('A'); - const vertexB = new GraphVertex('B'); - const vertexC = new GraphVertex('C'); - const vertexD = new GraphVertex('D'); - - const edgeAB = new GraphEdge(vertexA, vertexB, 1); - const edgeAD = new GraphEdge(vertexA, vertexD, 3); - const edgeBC = new GraphEdge(vertexB, vertexC, 1); - const edgeBD = new GraphEdge(vertexB, vertexD, 3); - const edgeCD = new GraphEdge(vertexC, vertexD, 1); - - const graph = new Graph(); - - graph - .addEdge(edgeAB) - .addEdge(edgeAD) - .addEdge(edgeBC) - .addEdge(edgeBD) - .addEdge(edgeCD); - - expect(graph.getWeight()).toEqual(9); - - const minimumSpanningTree = prim(graph); - - expect(minimumSpanningTree.getWeight()).toBe(3); - expect(minimumSpanningTree.getAllVertices().length).toBe(graph.getAllVertices().length); - expect(minimumSpanningTree.getAllEdges().length).toBe(graph.getAllVertices().length - 1); - expect(minimumSpanningTree.toString()).toBe('A,B,C,D'); - }); -}); diff --git a/src/algorithms/graph/prim/prim.js b/src/algorithms/graph/prim/prim.js deleted file mode 100644 index 03b7a0b1b8..0000000000 --- a/src/algorithms/graph/prim/prim.js +++ /dev/null @@ -1,73 +0,0 @@ -import Graph from '../../../data-structures/graph/Graph'; -import PriorityQueue from '../../../data-structures/priority-queue/PriorityQueue'; - -/** - * @param {Graph} graph - * @return {Graph} - */ -export default function prim(graph) { - // It should fire error if graph is directed since the algorithm works only - // for undirected graphs. - if (graph.isDirected) { - throw new Error('Prim\'s algorithms works only for undirected graphs'); - } - - // Init new graph that will contain minimum spanning tree of original graph. - const minimumSpanningTree = new Graph(); - - // This priority queue will contain all the edges that are starting from - // visited nodes and they will be ranked by edge weight - so that on each step - // we would always pick the edge with minimal edge weight. - const edgesQueue = new PriorityQueue(); - - // Set of vertices that has been already visited. - const visitedVertices = {}; - - // Vertex from which we will start graph traversal. - const startVertex = graph.getAllVertices()[0]; - - // Add start vertex to the set of visited ones. - visitedVertices[startVertex.getKey()] = startVertex; - - // Add all edges of start vertex to the queue. - startVertex.getEdges().forEach((graphEdge) => { - edgesQueue.add(graphEdge, graphEdge.weight); - }); - - // Now let's explore all queued edges. - while (!edgesQueue.isEmpty()) { - // Fetch next queued edge with minimal weight. - /** @var {GraphEdge} currentEdge */ - const currentMinEdge = edgesQueue.poll(); - - // Find out the next unvisited minimal vertex to traverse. - let nextMinVertex = null; - if (!visitedVertices[currentMinEdge.startVertex.getKey()]) { - nextMinVertex = currentMinEdge.startVertex; - } else if (!visitedVertices[currentMinEdge.endVertex.getKey()]) { - nextMinVertex = currentMinEdge.endVertex; - } - - // If all vertices of current edge has been already visited then skip this round. - if (nextMinVertex) { - // Add current min edge to MST. - minimumSpanningTree.addEdge(currentMinEdge); - - // Add vertex to the set of visited ones. - visitedVertices[nextMinVertex.getKey()] = nextMinVertex; - - // Add all current vertex's edges to the queue. - nextMinVertex.getEdges().forEach((graphEdge) => { - // Add only vertices that link to unvisited nodes. - if ( - !visitedVertices[graphEdge.startVertex.getKey()] - || !visitedVertices[graphEdge.endVertex.getKey()] - ) { - edgesQueue.add(graphEdge, graphEdge.weight); - } - }); - } - } - - return minimumSpanningTree; -} diff --git a/src/algorithms/graph/strongly-connected-components/README.md b/src/algorithms/graph/strongly-connected-components/README.md deleted file mode 100644 index 74f23ce051..0000000000 --- a/src/algorithms/graph/strongly-connected-components/README.md +++ /dev/null @@ -1,16 +0,0 @@ -# Strongly Connected Component - -A directed graph is called **strongly connected** if there is a path -in each direction between each pair of vertices of the graph. -In a directed graph G that may not itself be strongly connected, -a pair of vertices `u` and `v` are said to be strongly connected -to each other if there is a path in each direction between them. - -![Strongly Connected](https://upload.wikimedia.org/wikipedia/commons/5/5c/Scc.png) - -Graph with strongly connected components marked - -## References - -- [Wikipedia](https://en.wikipedia.org/wiki/Strongly_connected_component) -- [YouTube](https://www.youtube.com/watch?v=RpgcYiky7uw&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) diff --git a/src/algorithms/graph/strongly-connected-components/__test__/stronglyConnectedComponents.test.js b/src/algorithms/graph/strongly-connected-components/__test__/stronglyConnectedComponents.test.js deleted file mode 100644 index 3379ca75fb..0000000000 --- a/src/algorithms/graph/strongly-connected-components/__test__/stronglyConnectedComponents.test.js +++ /dev/null @@ -1,102 +0,0 @@ -import GraphVertex from '../../../../data-structures/graph/GraphVertex'; -import GraphEdge from '../../../../data-structures/graph/GraphEdge'; -import Graph from '../../../../data-structures/graph/Graph'; -import stronglyConnectedComponents from '../stronglyConnectedComponents'; - -describe('stronglyConnectedComponents', () => { - it('should detect strongly connected components in simple graph', () => { - const vertexA = new GraphVertex('A'); - const vertexB = new GraphVertex('B'); - const vertexC = new GraphVertex('C'); - const vertexD = new GraphVertex('D'); - - const edgeAB = new GraphEdge(vertexA, vertexB); - const edgeBC = new GraphEdge(vertexB, vertexC); - const edgeCA = new GraphEdge(vertexC, vertexA); - const edgeCD = new GraphEdge(vertexC, vertexD); - - const graph = new Graph(true); - - graph - .addEdge(edgeAB) - .addEdge(edgeBC) - .addEdge(edgeCA) - .addEdge(edgeCD); - - const components = stronglyConnectedComponents(graph); - - expect(components).toBeDefined(); - expect(components.length).toBe(2); - - expect(components[0][0].getKey()).toBe(vertexA.getKey()); - expect(components[0][1].getKey()).toBe(vertexC.getKey()); - expect(components[0][2].getKey()).toBe(vertexB.getKey()); - - expect(components[1][0].getKey()).toBe(vertexD.getKey()); - }); - - it('should detect strongly connected components in graph', () => { - const vertexA = new GraphVertex('A'); - const vertexB = new GraphVertex('B'); - const vertexC = new GraphVertex('C'); - const vertexD = new GraphVertex('D'); - const vertexE = new GraphVertex('E'); - const vertexF = new GraphVertex('F'); - const vertexG = new GraphVertex('G'); - const vertexH = new GraphVertex('H'); - const vertexI = new GraphVertex('I'); - const vertexJ = new GraphVertex('J'); - const vertexK = new GraphVertex('K'); - - const edgeAB = new GraphEdge(vertexA, vertexB); - const edgeBC = new GraphEdge(vertexB, vertexC); - const edgeCA = new GraphEdge(vertexC, vertexA); - const edgeBD = new GraphEdge(vertexB, vertexD); - const edgeDE = new GraphEdge(vertexD, vertexE); - const edgeEF = new GraphEdge(vertexE, vertexF); - const edgeFD = new GraphEdge(vertexF, vertexD); - const edgeGF = new GraphEdge(vertexG, vertexF); - const edgeGH = new GraphEdge(vertexG, vertexH); - const edgeHI = new GraphEdge(vertexH, vertexI); - const edgeIJ = new GraphEdge(vertexI, vertexJ); - const edgeJG = new GraphEdge(vertexJ, vertexG); - const edgeJK = new GraphEdge(vertexJ, vertexK); - - const graph = new Graph(true); - - graph - .addEdge(edgeAB) - .addEdge(edgeBC) - .addEdge(edgeCA) - .addEdge(edgeBD) - .addEdge(edgeDE) - .addEdge(edgeEF) - .addEdge(edgeFD) - .addEdge(edgeGF) - .addEdge(edgeGH) - .addEdge(edgeHI) - .addEdge(edgeIJ) - .addEdge(edgeJG) - .addEdge(edgeJK); - - const components = stronglyConnectedComponents(graph); - - expect(components).toBeDefined(); - expect(components.length).toBe(4); - - expect(components[0][0].getKey()).toBe(vertexG.getKey()); - expect(components[0][1].getKey()).toBe(vertexJ.getKey()); - expect(components[0][2].getKey()).toBe(vertexI.getKey()); - expect(components[0][3].getKey()).toBe(vertexH.getKey()); - - expect(components[1][0].getKey()).toBe(vertexK.getKey()); - - expect(components[2][0].getKey()).toBe(vertexA.getKey()); - expect(components[2][1].getKey()).toBe(vertexC.getKey()); - expect(components[2][2].getKey()).toBe(vertexB.getKey()); - - expect(components[3][0].getKey()).toBe(vertexD.getKey()); - expect(components[3][1].getKey()).toBe(vertexF.getKey()); - expect(components[3][2].getKey()).toBe(vertexE.getKey()); - }); -}); diff --git a/src/algorithms/graph/strongly-connected-components/stronglyConnectedComponents.js b/src/algorithms/graph/strongly-connected-components/stronglyConnectedComponents.js deleted file mode 100644 index 8096277356..0000000000 --- a/src/algorithms/graph/strongly-connected-components/stronglyConnectedComponents.js +++ /dev/null @@ -1,133 +0,0 @@ -import Stack from '../../../data-structures/stack/Stack'; -import depthFirstSearch from '../depth-first-search/depthFirstSearch'; - -/** - * @param {Graph} graph - * @return {Stack} - */ -function getVerticesSortedByDfsFinishTime(graph) { - // Set of all visited vertices during DFS pass. - const visitedVerticesSet = {}; - - // Stack of vertices by finish time. - // All vertices in this stack are ordered by finished time in decreasing order. - // Vertex that has been finished first will be at the bottom of the stack and - // vertex that has been finished last will be at the top of the stack. - const verticesByDfsFinishTime = new Stack(); - - // Set of all vertices we're going to visit. - const notVisitedVerticesSet = {}; - graph.getAllVertices().forEach((vertex) => { - notVisitedVerticesSet[vertex.getKey()] = vertex; - }); - - // Specify DFS traversal callbacks. - const dfsCallbacks = { - enterVertex: ({ currentVertex }) => { - // Add current vertex to visited set. - visitedVerticesSet[currentVertex.getKey()] = currentVertex; - - // Delete current vertex from not visited set. - delete notVisitedVerticesSet[currentVertex.getKey()]; - }, - leaveVertex: ({ currentVertex }) => { - // Push vertex to the stack when leaving it. - // This will make stack to be ordered by finish time in decreasing order. - verticesByDfsFinishTime.push(currentVertex); - }, - allowTraversal: ({ nextVertex }) => { - // Don't allow to traverse the nodes that have been already visited. - return !visitedVerticesSet[nextVertex.getKey()]; - }, - }; - - // Do FIRST DFS PASS traversal for all graph vertices to fill the verticesByFinishTime stack. - while (Object.values(notVisitedVerticesSet).length) { - // Peek any vertex to start DFS traversal from. - const startVertexKey = Object.keys(notVisitedVerticesSet)[0]; - const startVertex = notVisitedVerticesSet[startVertexKey]; - delete notVisitedVerticesSet[startVertexKey]; - - depthFirstSearch(graph, startVertex, dfsCallbacks); - } - - return verticesByDfsFinishTime; -} - -/** - * @param {Graph} graph - * @param {Stack} verticesByFinishTime - * @return {*[]} - */ -function getSCCSets(graph, verticesByFinishTime) { - // Array of arrays of strongly connected vertices. - const stronglyConnectedComponentsSets = []; - - // Array that will hold all vertices that are being visited during one DFS run. - let stronglyConnectedComponentsSet = []; - - // Visited vertices set. - const visitedVerticesSet = {}; - - // Callbacks for DFS traversal. - const dfsCallbacks = { - enterVertex: ({ currentVertex }) => { - // Add current vertex to SCC set of current DFS round. - stronglyConnectedComponentsSet.push(currentVertex); - - // Add current vertex to visited set. - visitedVerticesSet[currentVertex.getKey()] = currentVertex; - }, - leaveVertex: ({ previousVertex }) => { - // Once DFS traversal is finished push the set of found strongly connected - // components during current DFS round to overall strongly connected components set. - // The sign that traversal is about to be finished is that we came back to start vertex - // which doesn't have parent. - if (previousVertex === null) { - stronglyConnectedComponentsSets.push([...stronglyConnectedComponentsSet]); - } - }, - allowTraversal: ({ nextVertex }) => { - // Don't allow traversal of already visited vertices. - return !visitedVerticesSet[nextVertex.getKey()]; - }, - }; - - while (!verticesByFinishTime.isEmpty()) { - /** @var {GraphVertex} startVertex */ - const startVertex = verticesByFinishTime.pop(); - - // Reset the set of strongly connected vertices. - stronglyConnectedComponentsSet = []; - - // Don't do DFS on already visited vertices. - if (!visitedVerticesSet[startVertex.getKey()]) { - // Do DFS traversal. - depthFirstSearch(graph, startVertex, dfsCallbacks); - } - } - - return stronglyConnectedComponentsSets; -} - -/** - * Kosaraju's algorithm. - * - * @param {Graph} graph - * @return {*[]} - */ -export default function stronglyConnectedComponents(graph) { - // In this algorithm we will need to do TWO DFS PASSES overt the graph. - - // Get stack of vertices ordered by DFS finish time. - // All vertices in this stack are ordered by finished time in decreasing order: - // Vertex that has been finished first will be at the bottom of the stack and - // vertex that has been finished last will be at the top of the stack. - const verticesByFinishTime = getVerticesSortedByDfsFinishTime(graph); - - // Reverse the graph. - graph.reverse(); - - // Do DFS once again on reversed graph. - return getSCCSets(graph, verticesByFinishTime); -} diff --git a/src/algorithms/graph/topological-sorting/README.md b/src/algorithms/graph/topological-sorting/README.md deleted file mode 100644 index f4653a8b1e..0000000000 --- a/src/algorithms/graph/topological-sorting/README.md +++ /dev/null @@ -1,55 +0,0 @@ -# Topological Sorting - -In the field of computer science, a topological sort or -topological ordering of a directed graph is a linear ordering -of its vertices such that for every directed edge `uv` from -vertex `u` to vertex `v`, `u` comes before `v` in the ordering. - -For instance, the vertices of the graph may represent tasks to -be performed, and the edges may represent constraints that one -task must be performed before another; in this application, a -topological ordering is just a valid sequence for the tasks. - -A topological ordering is possible if and only if the graph has -no directed cycles, that is, if it is a [directed acyclic graph](https://en.wikipedia.org/wiki/Directed_acyclic_graph) -(DAG). Any DAG has at least one topological ordering, and algorithms are -known for constructing a topological ordering of any DAG in linear time. - -![Directed Acyclic Graph](https://upload.wikimedia.org/wikipedia/commons/c/c6/Topological_Ordering.svg) - -A topological ordering of a directed acyclic graph: every edge goes from -earlier in the ordering (upper left) to later in the ordering (lower right). -A directed graph is acyclic if and only if it has a topological ordering. - -## Example - -![Topologic Sorting](https://upload.wikimedia.org/wikipedia/commons/0/03/Directed_acyclic_graph_2.svg) - -The graph shown above has many valid topological sorts, including: - -- `5, 7, 3, 11, 8, 2, 9, 10` (visual left-to-right, top-to-bottom) -- `3, 5, 7, 8, 11, 2, 9, 10` (smallest-numbered available vertex first) -- `5, 7, 3, 8, 11, 10, 9, 2` (fewest edges first) -- `7, 5, 11, 3, 10, 8, 9, 2` (largest-numbered available vertex first) -- `5, 7, 11, 2, 3, 8, 9, 10` (attempting top-to-bottom, left-to-right) -- `3, 7, 8, 5, 11, 10, 2, 9` (arbitrary) - -## Application - -The canonical application of topological sorting is in -**scheduling a sequence of jobs** or tasks based on their dependencies. The jobs -are represented by vertices, and there is an edge from `x` to `y` if -job `x` must be completed before job `y` can be started (for -example, when washing clothes, the washing machine must finish -before we put the clothes in the dryer). Then, a topological sort -gives an order in which to perform the jobs. - -Other application is **dependency resolution**. Each vertex is a package -and each edge is a dependency of package `a` on package 'b'. Then topological -sorting will provide a sequence of installing dependencies in a way that every -next dependency has its dependent packages to be installed in prior. - -## References - -- [Wikipedia](https://en.wikipedia.org/wiki/Topological_sorting) -- [Topological Sorting on YouTube by Tushar Roy](https://www.youtube.com/watch?v=ddTC4Zovtbc&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) diff --git a/src/algorithms/graph/topological-sorting/__test__/topologicalSort.test.js b/src/algorithms/graph/topological-sorting/__test__/topologicalSort.test.js deleted file mode 100644 index e2904cfb3d..0000000000 --- a/src/algorithms/graph/topological-sorting/__test__/topologicalSort.test.js +++ /dev/null @@ -1,53 +0,0 @@ -import GraphVertex from '../../../../data-structures/graph/GraphVertex'; -import GraphEdge from '../../../../data-structures/graph/GraphEdge'; -import Graph from '../../../../data-structures/graph/Graph'; -import topologicalSort from '../topologicalSort'; - -describe('topologicalSort', () => { - it('should do topological sorting on graph', () => { - const vertexA = new GraphVertex('A'); - const vertexB = new GraphVertex('B'); - const vertexC = new GraphVertex('C'); - const vertexD = new GraphVertex('D'); - const vertexE = new GraphVertex('E'); - const vertexF = new GraphVertex('F'); - const vertexG = new GraphVertex('G'); - const vertexH = new GraphVertex('H'); - - const edgeAC = new GraphEdge(vertexA, vertexC); - const edgeBC = new GraphEdge(vertexB, vertexC); - const edgeBD = new GraphEdge(vertexB, vertexD); - const edgeCE = new GraphEdge(vertexC, vertexE); - const edgeDF = new GraphEdge(vertexD, vertexF); - const edgeEF = new GraphEdge(vertexE, vertexF); - const edgeEH = new GraphEdge(vertexE, vertexH); - const edgeFG = new GraphEdge(vertexF, vertexG); - - const graph = new Graph(true); - - graph - .addEdge(edgeAC) - .addEdge(edgeBC) - .addEdge(edgeBD) - .addEdge(edgeCE) - .addEdge(edgeDF) - .addEdge(edgeEF) - .addEdge(edgeEH) - .addEdge(edgeFG); - - const sortedVertices = topologicalSort(graph); - - expect(sortedVertices).toBeDefined(); - expect(sortedVertices.length).toBe(graph.getAllVertices().length); - expect(sortedVertices).toEqual([ - vertexB, - vertexD, - vertexA, - vertexC, - vertexE, - vertexH, - vertexF, - vertexG, - ]); - }); -}); diff --git a/src/algorithms/graph/topological-sorting/topologicalSort.js b/src/algorithms/graph/topological-sorting/topologicalSort.js deleted file mode 100644 index cd7bdd3dde..0000000000 --- a/src/algorithms/graph/topological-sorting/topologicalSort.js +++ /dev/null @@ -1,47 +0,0 @@ -import Stack from '../../../data-structures/stack/Stack'; -import depthFirstSearch from '../depth-first-search/depthFirstSearch'; - -/** - * @param {Graph} graph - */ -export default function topologicalSort(graph) { - // Create a set of all vertices we want to visit. - const unvisitedSet = {}; - graph.getAllVertices().forEach((vertex) => { - unvisitedSet[vertex.getKey()] = vertex; - }); - - // Create a set for all vertices that we've already visited. - const visitedSet = {}; - - // Create a stack of already ordered vertices. - const sortedStack = new Stack(); - - const dfsCallbacks = { - enterVertex: ({ currentVertex }) => { - // Add vertex to visited set in case if all its children has been explored. - visitedSet[currentVertex.getKey()] = currentVertex; - - // Remove this vertex from unvisited set. - delete unvisitedSet[currentVertex.getKey()]; - }, - leaveVertex: ({ currentVertex }) => { - // If the vertex has been totally explored then we may push it to stack. - sortedStack.push(currentVertex); - }, - allowTraversal: ({ nextVertex }) => { - return !visitedSet[nextVertex.getKey()]; - }, - }; - - // Let's go and do DFS for all unvisited nodes. - while (Object.keys(unvisitedSet).length) { - const currentVertexKey = Object.keys(unvisitedSet)[0]; - const currentVertex = unvisitedSet[currentVertexKey]; - - // Do DFS for current node. - depthFirstSearch(graph, currentVertex, dfsCallbacks); - } - - return sortedStack.toArray(); -} diff --git a/src/algorithms/graph/travelling-salesman/README.md b/src/algorithms/graph/travelling-salesman/README.md deleted file mode 100644 index 6690cd47ad..0000000000 --- a/src/algorithms/graph/travelling-salesman/README.md +++ /dev/null @@ -1,26 +0,0 @@ -# Travelling Salesman Problem - -The travelling salesman problem (TSP) asks the following question: -"Given a list of cities and the distances between each pair of -cities, what is the shortest possible route that visits each city -and returns to the origin city?" - -![Travelling Salesman](https://upload.wikimedia.org/wikipedia/commons/1/11/GLPK_solution_of_a_travelling_salesman_problem.svg) - -Solution of a travelling salesman problem: the black line shows -the shortest possible loop that connects every red dot. - -![Travelling Salesman Graph](https://upload.wikimedia.org/wikipedia/commons/3/30/Weighted_K4.svg) - -TSP can be modelled as an undirected weighted graph, such that -cities are the graph's vertices, paths are the graph's edges, -and a path's distance is the edge's weight. It is a minimization -problem starting and finishing at a specified vertex after having -visited each other vertex exactly once. Often, the model is a -complete graph (i.e. each pair of vertices is connected by an -edge). If no path exists between two cities, adding an arbitrarily -long edge will complete the graph without affecting the optimal tour. - -## References - -- [Wikipedia](https://en.wikipedia.org/wiki/Travelling_salesman_problem) diff --git a/src/algorithms/graph/travelling-salesman/__test__/bfTravellingSalesman.test.js b/src/algorithms/graph/travelling-salesman/__test__/bfTravellingSalesman.test.js deleted file mode 100644 index 54eb07dcf0..0000000000 --- a/src/algorithms/graph/travelling-salesman/__test__/bfTravellingSalesman.test.js +++ /dev/null @@ -1,51 +0,0 @@ -import GraphVertex from '../../../../data-structures/graph/GraphVertex'; -import GraphEdge from '../../../../data-structures/graph/GraphEdge'; -import Graph from '../../../../data-structures/graph/Graph'; -import bfTravellingSalesman from '../bfTravellingSalesman'; - -describe('bfTravellingSalesman', () => { - it('should solve problem for simple graph', () => { - const vertexA = new GraphVertex('A'); - const vertexB = new GraphVertex('B'); - const vertexC = new GraphVertex('C'); - const vertexD = new GraphVertex('D'); - - const edgeAB = new GraphEdge(vertexA, vertexB, 1); - const edgeBD = new GraphEdge(vertexB, vertexD, 1); - const edgeDC = new GraphEdge(vertexD, vertexC, 1); - const edgeCA = new GraphEdge(vertexC, vertexA, 1); - - const edgeBA = new GraphEdge(vertexB, vertexA, 5); - const edgeDB = new GraphEdge(vertexD, vertexB, 8); - const edgeCD = new GraphEdge(vertexC, vertexD, 7); - const edgeAC = new GraphEdge(vertexA, vertexC, 4); - const edgeAD = new GraphEdge(vertexA, vertexD, 2); - const edgeDA = new GraphEdge(vertexD, vertexA, 3); - const edgeBC = new GraphEdge(vertexB, vertexC, 3); - const edgeCB = new GraphEdge(vertexC, vertexB, 9); - - const graph = new Graph(true); - graph - .addEdge(edgeAB) - .addEdge(edgeBD) - .addEdge(edgeDC) - .addEdge(edgeCA) - .addEdge(edgeBA) - .addEdge(edgeDB) - .addEdge(edgeCD) - .addEdge(edgeAC) - .addEdge(edgeAD) - .addEdge(edgeDA) - .addEdge(edgeBC) - .addEdge(edgeCB); - - const salesmanPath = bfTravellingSalesman(graph); - - expect(salesmanPath.length).toBe(4); - - expect(salesmanPath[0].getKey()).toEqual(vertexA.getKey()); - expect(salesmanPath[1].getKey()).toEqual(vertexB.getKey()); - expect(salesmanPath[2].getKey()).toEqual(vertexD.getKey()); - expect(salesmanPath[3].getKey()).toEqual(vertexC.getKey()); - }); -}); diff --git a/src/algorithms/graph/travelling-salesman/bfTravellingSalesman.js b/src/algorithms/graph/travelling-salesman/bfTravellingSalesman.js deleted file mode 100644 index a13fa241fc..0000000000 --- a/src/algorithms/graph/travelling-salesman/bfTravellingSalesman.js +++ /dev/null @@ -1,104 +0,0 @@ -/** - * Get all possible paths - * @param {GraphVertex} startVertex - * @param {GraphVertex[][]} [paths] - * @param {GraphVertex[]} [path] - */ -function findAllPaths(startVertex, paths = [], path = []) { - // Clone path. - const currentPath = [...path]; - - // Add startVertex to the path. - currentPath.push(startVertex); - - // Generate visited set from path. - const visitedSet = currentPath.reduce((accumulator, vertex) => { - const updatedAccumulator = { ...accumulator }; - updatedAccumulator[vertex.getKey()] = vertex; - - return updatedAccumulator; - }, {}); - - // Get all unvisited neighbors of startVertex. - const unvisitedNeighbors = startVertex.getNeighbors().filter((neighbor) => { - return !visitedSet[neighbor.getKey()]; - }); - - // If there no unvisited neighbors then treat current path as complete and save it. - if (!unvisitedNeighbors.length) { - paths.push(currentPath); - - return paths; - } - - // Go through all the neighbors. - for (let neighborIndex = 0; neighborIndex < unvisitedNeighbors.length; neighborIndex += 1) { - const currentUnvisitedNeighbor = unvisitedNeighbors[neighborIndex]; - findAllPaths(currentUnvisitedNeighbor, paths, currentPath); - } - - return paths; -} - -/** - * @param {number[][]} adjacencyMatrix - * @param {object} verticesIndices - * @param {GraphVertex[]} cycle - * @return {number} - */ -function getCycleWeight(adjacencyMatrix, verticesIndices, cycle) { - let weight = 0; - - for (let cycleIndex = 1; cycleIndex < cycle.length; cycleIndex += 1) { - const fromVertex = cycle[cycleIndex - 1]; - const toVertex = cycle[cycleIndex]; - const fromVertexIndex = verticesIndices[fromVertex.getKey()]; - const toVertexIndex = verticesIndices[toVertex.getKey()]; - weight += adjacencyMatrix[fromVertexIndex][toVertexIndex]; - } - - return weight; -} - -/** - * BRUTE FORCE approach to solve Traveling Salesman Problem. - * - * @param {Graph} graph - * @return {GraphVertex[]} - */ -export default function bfTravellingSalesman(graph) { - // Pick starting point from where we will traverse the graph. - const startVertex = graph.getAllVertices()[0]; - - // BRUTE FORCE. - // Generate all possible paths from startVertex. - const allPossiblePaths = findAllPaths(startVertex); - - // Filter out paths that are not cycles. - const allPossibleCycles = allPossiblePaths.filter((path) => { - /** @var {GraphVertex} */ - const lastVertex = path[path.length - 1]; - const lastVertexNeighbors = lastVertex.getNeighbors(); - - return lastVertexNeighbors.includes(startVertex); - }); - - // Go through all possible cycles and pick the one with minimum overall tour weight. - const adjacencyMatrix = graph.getAdjacencyMatrix(); - const verticesIndices = graph.getVerticesIndices(); - let salesmanPath = []; - let salesmanPathWeight = null; - for (let cycleIndex = 0; cycleIndex < allPossibleCycles.length; cycleIndex += 1) { - const currentCycle = allPossibleCycles[cycleIndex]; - const currentCycleWeight = getCycleWeight(adjacencyMatrix, verticesIndices, currentCycle); - - // If current cycle weight is smaller then previous ones treat current cycle as most optimal. - if (salesmanPathWeight === null || currentCycleWeight < salesmanPathWeight) { - salesmanPath = currentCycle; - salesmanPathWeight = currentCycleWeight; - } - } - - // Return the solution. - return salesmanPath; -} diff --git a/src/algorithms/image-processing/seam-carving/README.md b/src/algorithms/image-processing/seam-carving/README.md deleted file mode 100644 index 87004f7abe..0000000000 --- a/src/algorithms/image-processing/seam-carving/README.md +++ /dev/null @@ -1,509 +0,0 @@ -# Content-aware image resizing in JavaScript - -![Content-aware image resizing in JavaScript](https://raw.githubusercontent.com/trekhleb/trekhleb.github.io/master/src/posts/2021/content-aware-image-resizing-in-javascript/assets/01-cover-02.png) - -> There is an [interactive version of this post](https://trekhleb.dev/blog/2021/content-aware-image-resizing-in-javascript/) available where you can upload and resize your custom images. - -## TL;DR - -There are many great articles written about the *Seam Carving algorithm* already, but I couldn't resist the temptation to explore this elegant, powerful, and *yet simple* algorithm on my own, and to write about my personal experience with it. Another point that drew my attention (as a creator of [javascript-algorithms](https://github.com/trekhleb/javascript-algorithms) repo) was the fact that *Dynamic Programming (DP)* approach might be smoothly applied to solve it. And, if you're like me and still on your "learning algorithms" journey, this algorithmic solution may enrich your personal DP arsenal. - -So, with this article I want to do three things: - -1. Provide you with an interactive **content-aware resizer** so that you could play around with resizing your own images -2. Explain the idea behind the **Seam Carving algorithm** -3. Explain the **dynamic programming approach** to implement the algorithm (we'll be using TypeScript for it) - -### Content-aware image resizing - -*Content-aware image resizing* might be applied when it comes to changing the image proportions (i.e. reducing the width while keeping the height) and when losing some parts of the image is not desirable. Doing the straightforward image scaling in this case would distort the objects in it. To preserve the proportions of the objects while changing the image proportions we may use the [Seam Carving algorithm](https://perso.crans.org/frenoy/matlab2012/seamcarving.pdf) that was introduced by *Shai Avidan* and *Ariel Shamir*. - -The example below shows how the original image width was reduced by 50% using *content-aware resizing* (left image) and *straightforward scaling* (right image). In this particular case, the left image looks more natural since the proportions of the balloons were preserved. - -![Content-aware image resizing](https://raw.githubusercontent.com/trekhleb/trekhleb.github.io/master/src/posts/2021/content-aware-image-resizing-in-javascript/assets/01-resizing-options.png) - -The Seam Carving algorithm's idea is to find the *seam* (continuous sequence of pixels) with the lowest contribution to the image content and then *carve* (remove) it. This process repeats over and over again until we get the required image width or height. In the example below you may see that the hot air balloon pixels contribute more to the content of the image than the sky pixels. Thus, the sky pixels are being removed first. - -![JS IMAGE CARVER DEMO](https://raw.githubusercontent.com/trekhleb/trekhleb.github.io/master/src/posts/2021/content-aware-image-resizing-in-javascript/assets/10-demo-01.gif) - -Finding the seam with the lowest energy is a computationally expensive task (especially for large images). To make the seam search faster the *dynamic programming* approach might be applied (we will go through the implementation details below). - -### Objects removal - -The importance of each pixel (so-called pixel's energy) is being calculated based on its color (`R`, `G`, `B`, `A`) difference between two neighbor pixels. Now, if we set the pixel energy to some really low level artificially (i.e. by drawing a mask on top of them), the Seam Carving algorithm would perform an **object removal** for us for free. - -![JS IMAGE CARVER OBJECT REMOVAL DEMO](https://raw.githubusercontent.com/trekhleb/trekhleb.github.io/master/src/posts/2021/content-aware-image-resizing-in-javascript/assets/10-demo-02.gif) - -### JS IMAGE CARVER demo - -I've created the [JS IMAGE CARVER](https://trekhleb.dev/js-image-carver/) web-app (and also [open-sourced it on GitHub](https://github.com/trekhleb/js-image-carver)) that you may use to play around with resizing of your custom images. - -### More examples - -Here are some more examples of how the algorithm copes with more complex backgrounds. - -Mountains on the background are being shrunk smoothly without visible seams. - -![Resizing demo with more complex backgrounds](https://raw.githubusercontent.com/trekhleb/trekhleb.github.io/master/src/posts/2021/content-aware-image-resizing-in-javascript/assets/11-demo-01.png) - -The same goes for the ocean waves. The algorithm preserved the wave structure without distorting the surfers. - -![Resizing demo with more complex backgrounds](https://raw.githubusercontent.com/trekhleb/trekhleb.github.io/master/src/posts/2021/content-aware-image-resizing-in-javascript/assets/11-demo-02.png) - -We need to keep in mind that the Seam Carving algorithm is not a silver bullet, and it may fail to resize the images where *most of the pixels are edges* (look important to the algorithm). In this case, it starts distorting even the important parts of the image. In the example below the content-aware image resizing looks pretty similar to a straightforward scaling since for the algorithm all the pixels look important, and it is hard for it to distinguish Van Gogh's face from the background. - -![Example when the algorithm does not work as expected](https://raw.githubusercontent.com/trekhleb/trekhleb.github.io/master/src/posts/2021/content-aware-image-resizing-in-javascript/assets/12-demo-01.png) - -## How Seam Carving algorithms works - -Imagine we have a `1000 x 500 px` picture, and we want to change its size to `500 x 500 px` to make it square (let's say the square ratio would better fit the Instagram feed). We might want to set up several **requirements to the resizing process** in this case: - -- *Preserve the important parts of the image* (i.e. if there were 5 trees before the resizing we want to have 5 trees after resizing as well). -- *Preserve the proportions* of the important parts of the image (i.e. circle car wheels should not be squeezed to the ellipse wheels) - -To avoid changing the important parts of the image we may find the **continuous sequence of pixels (the seam)**, that goes from top to bottom and has *the lowest contribution to the content* of the image (avoids important parts) and then remove it. The seam removal will shrink the image by 1 pixel. We will then repeat this step until the image will get the desired width. - -The question is how to define *the importance of the pixel* and its contribution to the content (in the original paper the authors are using the term **energy of the pixel**). One of the ways to do it is to treat all the pixels that form the edges as important ones. In case if a pixel is a part of the edge its color would have a greater difference between the neighbors (left and right pixels) than the pixel that isn't a part of the edge. - -![Pixels color difference](https://raw.githubusercontent.com/trekhleb/trekhleb.github.io/master/src/posts/2021/content-aware-image-resizing-in-javascript/assets/30-pixel-energy-comparison.png) - -Assuming that the color of a pixel is represented by *4* numbers (`R` - red, `G` - green, `B` - blue, `A` - alpha) we may use the following formula to calculate the color difference (the pixel energy): - -![Pixel energy formula](https://raw.githubusercontent.com/trekhleb/trekhleb.github.io/master/src/posts/2021/content-aware-image-resizing-in-javascript/assets/20-energy-formula.png) - -Where: - -- `mEnergy` - *Energy* (importance) of the *middle* pixel (`[0..626]` if rounded) -- `lR` - *Red* channel value for the *left* pixel (`[0..255]`) -- `mR` - *Red* channel value for the *middle* pixel (`[0..255]`) -- `rR` - *Red* channel value for the *right* pixel (`[0..255]`) -- `lG` - *Green* channel value for the *left* pixel (`[0..255]`) -- and so on... - -In the formula above we're omitting the alpha (transparency) channel, for now, assuming that there are no transparent pixels in the image. Later we will use the alpha channel for masking and for object removal. - -![Example of pixel energy calculation](https://raw.githubusercontent.com/trekhleb/trekhleb.github.io/master/src/posts/2021/content-aware-image-resizing-in-javascript/assets/30-pixel-energy-calculation-example.png) - -Now, since we know how to find the energy of one pixel, we can calculate, so-called, **energy map** which will contain the energies of each pixel of the image. On each resizing step the energy map should be re-calculated (at least partially, more about it below) and would have the same size as the image. - -For example, on the 1st resizing step we will have a `1000 x 500` image and a `1000 x 500` energy map. On the 2nd resizing step we will remove the seam from the image and re-calculate the energy map based on the new shrunk image. Thus, we will get a `999 x 500` image and a `999 x 500` energy map. - -The higher the energy of the pixel the more likely it is a part of an edge, and it is important for the image content and the less likely that we need to remove it. - -To visualize the energy map we may assign a brighter color to the pixels with the higher energy and darker colors to the pixels with the lower energy. Here is an artificial example of how the random part of the energy map might look like. You may see the bright line which represents the edge and which we want to preserve during the resizing. - -![Energy map sketch](https://raw.githubusercontent.com/trekhleb/trekhleb.github.io/master/src/posts/2021/content-aware-image-resizing-in-javascript/assets/30-energy-map-padding.png) - -Here is a real example of the energy map for the demo image you saw above (with hot air balloons). - -![Energy map example](https://raw.githubusercontent.com/trekhleb/trekhleb.github.io/master/src/posts/2021/content-aware-image-resizing-in-javascript/assets/40-energy-map.png) - -You may play around with your custom images and see how the energy map would look like in the [interactive version of the post](https://trekhleb.dev/blog/2021/content-aware-image-resizing-in-javascript/). - -We may use the energy map to find the seams (one after another) with the lowest energy and by doing this to decide which pixels should be ultimately deleted. - -![Searching the seam](https://raw.githubusercontent.com/trekhleb/trekhleb.github.io/master/src/posts/2021/content-aware-image-resizing-in-javascript/assets/41-seam-search.png) - -Finding the seam with the lowest energy is not a trivial task and requires exploring many possible pixel combinations before making the decision. We will apply the dynamic programming approach to speed it up. - -In the example below, you may see the energy map with the first lowest energy seam that was found for it. - -![Energy map example with seam](https://raw.githubusercontent.com/trekhleb/trekhleb.github.io/master/src/posts/2021/content-aware-image-resizing-in-javascript/assets/40-energy-map-with-seam.png) - -In the examples above we were reducing the width of the image. A similar approach may be taken to reduce the image height. We need to "rotate" the approach though: - -- start using *top* and *bottom* pixel neighbors (instead of *left* and *right* ones) to calculate the pixel energy -- when searching for a seam we need to move from *left* to *right* (instead of from *up* to *bottom*) - -## Implementation in TypeScript - -> You may find the source code, and the functions mentioned below in the [js-image-carver](https://github.com/trekhleb/js-image-carver) repository. - -To implement the algorithm we will be using TypeScript. If you want a JavaScript version, you may ignore (remove) type definitions and their usages. - -For simplicity reasons let's implement the seam carving algorithm only for the image *width* reduction. - -### Content-aware width resizing (the entry function) - -First, let's define some common types that we're going to use while implementing the algorithm. - -```typescript -// Type that describes the image size (width and height). -type ImageSize = { w: number, h: number }; - -// The coordinate of the pixel. -type Coordinate = { x: number, y: number }; - -// The seam is a sequence of pixels (coordinates). -type Seam = Coordinate[]; - -// Energy map is a 2D array that has the same width and height -// as the image the map is being calculated for. -type EnergyMap = number[][]; - -// Type that describes the image pixel's RGBA color. -type Color = [ - r: number, // Red - g: number, // Green - b: number, // Blue - a: number, // Alpha (transparency) -] | Uint8ClampedArray; -``` - -On the high level the algorithm consists of the following steps: - -1. Calculate the **energy map** for the current version of the image. -2. Find the **seam** with the lowest energy based on the energy map (this is where we will apply Dynamic Programming). -3. **Delete the seam** with the lowest energy seam from the image. -4. **Repeat** until the image width is reduced to the desired value. - -```typescript -type ResizeImageWidthArgs = { - img: ImageData, // Image data we want to resize. - toWidth: number, // Final image width we want the image to shrink to. -}; - -type ResizeImageWidthResult = { - img: ImageData, // Resized image data. - size: ImageSize, // Resized image size (w x h). -}; - -// Performs the content-aware image width resizing using the seam carving method. -export const resizeImageWidth = ( - { img, toWidth }: ResizeImageWidthArgs, -): ResizeImageWidthResult => { - // For performance reasons we want to avoid changing the img data array size. - // Instead we'll just keep the record of the resized image width and height separately. - const size: ImageSize = { w: img.width, h: img.height }; - - // Calculating the number of pixels to remove. - const pxToRemove = img.width - toWidth; - if (pxToRemove < 0) { - throw new Error('Upsizing is not supported for now'); - } - - let energyMap: EnergyMap | null = null; - let seam: Seam | null = null; - - // Removing the lowest energy seams one by one. - for (let i = 0; i < pxToRemove; i += 1) { - // 1. Calculate the energy map for the current version of the image. - energyMap = calculateEnergyMap(img, size); - - // 2. Find the seam with the lowest energy based on the energy map. - seam = findLowEnergySeam(energyMap, size); - - // 3. Delete the seam with the lowest energy seam from the image. - deleteSeam(img, seam, size); - - // Reduce the image width, and continue iterations. - size.w -= 1; - } - - // Returning the resized image and its final size. - // The img is actually a reference to the ImageData, so technically - // the caller of the function already has this pointer. But let's - // still return it for better code readability. - return { img, size }; -}; -``` - -The image that needs to be resized is being passed to the function in [ImageData](https://developer.mozilla.org/en-US/docs/Web/API/ImageData) format. You may draw the image on the canvas and then extract the ImageData from the canvas like this: - -```javascript -const ctx = canvas.getContext('2d'); -const imgData = ctx.getImageData(0, 0, imgWidth, imgHeight); -``` - -> The way of uploading and drawing images in JavaScript is out of scope for this article, but you may find the complete source code of how it may be done using React in [js-image-carver](https://github.com/trekhleb/js-image-carver) repo. - -Let's break down each step ony be one and implement the `calculateEnergyMap()`, `findLowEnergySeam()` and `deleteSeam()` functions. - -### Calculating the pixel's energy - -Here we apply the color difference formula described above. For the left and right borders (when there are no left or right neighbors), we ignore the neighbors and don't take them into account during the energy calculation. - -```typescript -// Calculates the energy of a pixel. -const getPixelEnergy = (left: Color | null, middle: Color, right: Color | null): number => { - // Middle pixel is the pixel we're calculating the energy for. - const [mR, mG, mB] = middle; - - // Energy from the left pixel (if it exists). - let lEnergy = 0; - if (left) { - const [lR, lG, lB] = left; - lEnergy = (lR - mR) ** 2 + (lG - mG) ** 2 + (lB - mB) ** 2; - } - - // Energy from the right pixel (if it exists). - let rEnergy = 0; - if (right) { - const [rR, rG, rB] = right; - rEnergy = (rR - mR) ** 2 + (rG - mG) ** 2 + (rB - mB) ** 2; - } - - // Resulting pixel energy. - return Math.sqrt(lEnergy + rEnergy); -}; -``` - -### Calculating the energy map - -The image we're working with has the [ImageData](https://developer.mozilla.org/en-US/docs/Web/API/ImageData) format. It means that all the pixels (and their colors) are stored in a flat (*1D*) [Uint8ClampedArray](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8ClampedArray) array. For readability purposes let's introduce the couple of helper functions that will allow us to work with the Uint8ClampedArray array as with a *2D* matrix instead. - -```typescript -// Helper function that returns the color of the pixel. -const getPixel = (img: ImageData, { x, y }: Coordinate): Color => { - // The ImageData data array is a flat 1D array. - // Thus we need to convert x and y coordinates to the linear index. - const i = y * img.width + x; - const cellsPerColor = 4; // RGBA - // For better efficiency, instead of creating a new sub-array we return - // a pointer to the part of the ImageData array. - return img.data.subarray(i * cellsPerColor, i * cellsPerColor + cellsPerColor); -}; - -// Helper function that sets the color of the pixel. -const setPixel = (img: ImageData, { x, y }: Coordinate, color: Color): void => { - // The ImageData data array is a flat 1D array. - // Thus we need to convert x and y coordinates to the linear index. - const i = y * img.width + x; - const cellsPerColor = 4; // RGBA - img.data.set(color, i * cellsPerColor); -}; -``` - -To calculate the energy map we go through each image pixel and call the previously described `getPixelEnergy()` function against it. - -```typescript -// Helper function that creates a matrix (2D array) of specific -// size (w x h) and fills it with specified value. -const matrix = (w: number, h: number, filler: T): T[][] => { - return new Array(h) - .fill(null) - .map(() => { - return new Array(w).fill(filler); - }); -}; - -// Calculates the energy of each pixel of the image. -const calculateEnergyMap = (img: ImageData, { w, h }: ImageSize): EnergyMap => { - // Create an empty energy map where each pixel has infinitely high energy. - // We will update the energy of each pixel. - const energyMap: number[][] = matrix(w, h, Infinity); - for (let y = 0; y < h; y += 1) { - for (let x = 0; x < w; x += 1) { - // Left pixel might not exist if we're on the very left edge of the image. - const left = (x - 1) >= 0 ? getPixel(img, { x: x - 1, y }) : null; - // The color of the middle pixel that we're calculating the energy for. - const middle = getPixel(img, { x, y }); - // Right pixel might not exist if we're on the very right edge of the image. - const right = (x + 1) < w ? getPixel(img, { x: x + 1, y }) : null; - energyMap[y][x] = getPixelEnergy(left, middle, right); - } - } - return energyMap; -}; -``` - -> The energy map is going to be recalculated on every resize iteration. It means that it will be recalculated, let's say, 500 times if we need to shrink the image by 500 pixels which is not optimal. To speed up the energy map calculation on the 2nd, 3rd, and further steps, we may re-calculate the energy only for those pixels that are placed around the seam that is going to be removed. For simplicity reasons this optimization is omitted here, but you may find the example source-code in [js-image-carver](https://github.com/trekhleb/js-image-carver) repo. - -### Finding the seam with the lowest energy (Dynamic Programming approach) - -> I've described some Dynamic Programming basics in [Dynamic Programming vs Divide-and-Conquer](https://trekhleb.dev/blog/2018/dynamic-programming-vs-divide-and-conquer/) article before. There is a DP example based on the minimum edit distance problem. You might want to check it out to get some more context. - -The issue we need to solve now is to find the path (the seam) on the energy map that goes from top to bottom and has the minimum sum of pixel energies. - -#### The naive approach - -The naive approach would be to check all possible paths one after another. - -![The naive approach](https://raw.githubusercontent.com/trekhleb/trekhleb.github.io/master/src/posts/2021/content-aware-image-resizing-in-javascript/assets/50-naive-approach.png) - -Going from top to bottom, for each pixel, we have 3 options (↙︎ go down-left, ↓ go down, ↘︎ go down-right). This gives us the time complexity of `O(w * 3^h)` or simply `O(3^h)`, where `w` and `h` are the width and the height of the image. This approach looks slow. - -#### The greedy approach - -We may also try to choose the next pixel as a pixel with the lowest energy, hoping that the resulting seam energy will be the smallest one. - -![The greedy approach](https://raw.githubusercontent.com/trekhleb/trekhleb.github.io/master/src/posts/2021/content-aware-image-resizing-in-javascript/assets/51-greedy-approach.png) - -This approach gives not the worst solution, but it cannot guarantee that we will find the best available solution. On the image above you may see how the greedy approach chose `5` instead of `10` at first and missed the chain of optimal pixels. - -The good part about this approach is that it is fast, and it has a time complexity of `O(w + h)`, where `w` and `h` are the width and the height of the image. In this case, the cost of the speed is the low quality of resizing. We need to find a minimum value in the first row (traversing `w` cells) and then we explore only 3 neighbor pixels for each row (traversing `h` rows). - -#### The dynamic programming approach - -You might have noticed that in the naive approach we summed up the same pixel energies over and over again while calculating the resulting seams' energy. - -![Repeated problems](https://raw.githubusercontent.com/trekhleb/trekhleb.github.io/master/src/posts/2021/content-aware-image-resizing-in-javascript/assets/52-dp-repeated-problems.png) - -In the example above you see that for the first two seams we are re-using the energy of the shorter seam (which has the energy of `235`). Instead of doing just one operation `235 + 70` to calculate the energy of the 2nd seam we're doing four operations `(5 + 0 + 80 + 150) + 70`. - -> This fact that we're re-using the energy of the previous seam to calculate the current seam's energy might be applied recursively to all the shorter seams up to the very top 1st row seam. When we have such overlapping sub-problems, [it is a sign](https://trekhleb.dev/blog/2018/dynamic-programming-vs-divide-and-conquer/) that the general problem *might* be optimized by dynamic programming approach. - -So, we may **save the energy of the current seam** at the particular pixel in an additional `seamsEnergies` table to make it re-usable for calculating the next seams faster (the `seamsEnergies` table will have the same size as the energy map and the image itself). - -Let's also keep in mind that for one particular pixel on the image (i.e. the bottom left one) we may have *several* values of the previous seams energies. - -![What seam to choose](https://raw.githubusercontent.com/trekhleb/trekhleb.github.io/master/src/posts/2021/content-aware-image-resizing-in-javascript/assets/53-dp-what-to-choose.png) - -Since we're looking for a seam with the lowest resulting energy it would make sense to pick the previous seam with the lowest resulting energy as well. - -![Seams energies example](https://raw.githubusercontent.com/trekhleb/trekhleb.github.io/master/src/posts/2021/content-aware-image-resizing-in-javascript/assets/56-dp-seams-energies-example.png) - -In general, we have three possible previous seems to choose from: - -![Three options to choose from](https://raw.githubusercontent.com/trekhleb/trekhleb.github.io/master/src/posts/2021/content-aware-image-resizing-in-javascript/assets/55-dp-three-options.png) - -You may think about it this way: - -- The cell `[1][x]`: contains the lowest possible energy of the seam that starts somewhere on the row `[0][?]` and ends up at cell `[1][x]` -- **The current cell** `[2][3]`: contains the lowest possible energy of the seam that starts somewhere on the row `[0][?]` and ends up at cell `[2][3]`. To calculate it we need to sum up the energy of the current pixel `[2][3]` (from the energy map) with the `min(seam_energy_1_2, seam_energy_1_3, seam_energy_1_4)` - -If we fill the `seamsEnergies` table completely, then the minimum number in the lowest row would be the lowest possible seam energy. - -Let's try to fill several cells of this table to see how it works. - -![Seams energies map traversal](https://raw.githubusercontent.com/trekhleb/trekhleb.github.io/master/src/posts/2021/content-aware-image-resizing-in-javascript/assets/57-dp-seams-energies-traversal.png) - -After filling out the `seamsEnergies` table we may see that the lowest energy pixel has an energy of `50`. For convenience, during the `seamsEnergies` generation for each pixel, we may save not only the energy of the seam but also the coordinates of the previous lowest energy seam. This will give us the possibility to reconstruct the seam path from the bottom to the top easily. - -The time complexity of DP approach would be `O(w * h)`, where `w` and `h` are the width and the height of the image. We need to calculate energies for *every* pixel of the image. - -Here is an example of how this logic might be implemented: - -```typescript -// The metadata for the pixels in the seam. -type SeamPixelMeta = { - energy: number, // The energy of the pixel. - coordinate: Coordinate, // The coordinate of the pixel. - previous: Coordinate | null, // The previous pixel in a seam. -}; - -// Finds the seam (the sequence of pixels from top to bottom) that has the -// lowest resulting energy using the Dynamic Programming approach. -const findLowEnergySeam = (energyMap: EnergyMap, { w, h }: ImageSize): Seam => { - // The 2D array of the size of w and h, where each pixel contains the - // seam metadata (pixel energy, pixel coordinate and previous pixel from - // the lowest energy seam at this point). - const seamsEnergies: (SeamPixelMeta | null)[][] = matrix(w, h, null); - - // Populate the first row of the map by just copying the energies - // from the energy map. - for (let x = 0; x < w; x += 1) { - const y = 0; - seamsEnergies[y][x] = { - energy: energyMap[y][x], - coordinate: { x, y }, - previous: null, - }; - } - - // Populate the rest of the rows. - for (let y = 1; y < h; y += 1) { - for (let x = 0; x < w; x += 1) { - // Find the top adjacent cell with minimum energy. - // This cell would be the tail of a seam with lowest energy at this point. - // It doesn't mean that this seam (path) has lowest energy globally. - // Instead, it means that we found a path with the lowest energy that may lead - // us to the current pixel with the coordinates x and y. - let minPrevEnergy = Infinity; - let minPrevX: number = x; - for (let i = (x - 1); i <= (x + 1); i += 1) { - if (i >= 0 && i < w && seamsEnergies[y - 1][i].energy < minPrevEnergy) { - minPrevEnergy = seamsEnergies[y - 1][i].energy; - minPrevX = i; - } - } - - // Update the current cell. - seamsEnergies[y][x] = { - energy: minPrevEnergy + energyMap[y][x], - coordinate: { x, y }, - previous: { x: minPrevX, y: y - 1 }, - }; - } - } - - // Find where the minimum energy seam ends. - // We need to find the tail of the lowest energy seam to start - // traversing it from its tail to its head (from the bottom to the top). - let lastMinCoordinate: Coordinate | null = null; - let minSeamEnergy = Infinity; - for (let x = 0; x < w; x += 1) { - const y = h - 1; - if (seamsEnergies[y][x].energy < minSeamEnergy) { - minSeamEnergy = seamsEnergies[y][x].energy; - lastMinCoordinate = { x, y }; - } - } - - // Find the lowest energy energy seam. - // Once we know where the tail is we may traverse and assemble the lowest - // energy seam based on the "previous" value of the seam pixel metadata. - const seam: Seam = []; - if (!lastMinCoordinate) { - return seam; - } - - const { x: lastMinX, y: lastMinY } = lastMinCoordinate; - - // Adding new pixel to the seam path one by one until we reach the top. - let currentSeam = seamsEnergies[lastMinY][lastMinX]; - while (currentSeam) { - seam.push(currentSeam.coordinate); - const prevMinCoordinates = currentSeam.previous; - if (!prevMinCoordinates) { - currentSeam = null; - } else { - const { x: prevMinX, y: prevMinY } = prevMinCoordinates; - currentSeam = seamsEnergies[prevMinY][prevMinX]; - } - } - - return seam; -}; -``` - -### Removing the seam with the lowest energy - -Once we found the lowest energy seam, we need to remove (to carve) the pixels that form it from the image. The removal is happening by shifting the pixels to the right of the seam by `1px` to the left. For performance reasons, we don't actually delete the last columns. Instead, the rendering component will just ignore the part of the image that lays beyond the resized image width. - -![Deleting the seam](https://raw.githubusercontent.com/trekhleb/trekhleb.github.io/master/src/posts/2021/content-aware-image-resizing-in-javascript/assets/60-deleting-example.png) - -```typescript -// Deletes the seam from the image data. -// We delete the pixel in each row and then shift the rest of the row pixels to the left. -const deleteSeam = (img: ImageData, seam: Seam, { w }: ImageSize): void => { - seam.forEach(({ x: seamX, y: seamY }: Coordinate) => { - for (let x = seamX; x < (w - 1); x += 1) { - const nextPixel = getPixel(img, { x: x + 1, y: seamY }); - setPixel(img, { x, y: seamY }, nextPixel); - } - }); -}; -``` - -## Objects removal - -The Seam Carving algorithm tries to remove the seams which consist of low energy pixels first. We could leverage this fact and by assigning low energy to some pixels manually (i.e. by drawing on the image and masking out some areas of it) we could make the Seam Carving algorithm to do *objects removal* for us for free. - -Currently, in `getPixelEnergy()` function we were using only the `R`, `G`, `B` color channels to calculate the pixel's energy. But there is also the `A` (alpha, transparency) parameter of the color that we didn't use yet. We may use the transparency channel to tell the algorithm that transparent pixels are the pixels we want to remove. You may check the [source-code of the energy function](https://github.com/trekhleb/js-image-carver/blob/main/src/utils/contentAwareResizer.ts#L54) that takes transparency into account. - -Here is how the algorithm works for object removal. - -![JS IMAGE CARVER OBJECT REMOVAL DEMO](https://raw.githubusercontent.com/trekhleb/trekhleb.github.io/master/src/posts/2021/content-aware-image-resizing-in-javascript/assets/10-demo-02.gif) - -## Issues and what's next - -The [JS IMAGE CARVER](https://github.com/trekhleb/js-image-carver) web app is far from being a production ready resizer of course. Its main purpose was to experiment with the Seam Carving algorithm interactively. So the plan for the future is to continue experimentation. - -The [original paper](https://perso.crans.org/frenoy/matlab2012/seamcarving.pdf) describes how the Seam Carving algorithm might be used not only for the downscaling but also for the **upscaling of the images**. The upscaling, in turn, might be used to **upscale the image back to its original width after the objects' removal**. - -Another interesting area of experimentation might be to make the algorithm work in a **real-time**. - -> Those are the plans for the future, but for now, I hope that the example with image downsizing was interesting and useful for you. I also hope that you've got the idea of using dynamic programming to implement it. -> -> So, good luck with your own experiments! diff --git a/src/algorithms/image-processing/seam-carving/README.ru-RU.md b/src/algorithms/image-processing/seam-carving/README.ru-RU.md deleted file mode 100644 index 444ce6df61..0000000000 --- a/src/algorithms/image-processing/seam-carving/README.ru-RU.md +++ /dev/null @@ -1,509 +0,0 @@ -# Изменение размеров изображения с учетом его содержимого в JavaScript - -![Content-aware image resizing in JavaScript](https://raw.githubusercontent.com/trekhleb/trekhleb.github.io/master/src/posts/2021/content-aware-image-resizing-in-javascript/assets/01-cover-02.png) - -> Доступна [английская интерактивная версия этой статьи](https://trekhleb.dev/blog/2021/content-aware-image-resizing-in-javascript/) в которой вы можете загрузить свои собственные изображения и посмотреть, как алгоритм "справляется" с ними. - -## TL;DR - -Написано много замечательных статей об алгоритме *Seam Carving* ("Вырезание швов"), но я не смог устоять перед соблазном самостоятельно исследовать этот элегантный, мощный и в то же время простой алгоритм и написать о своем личном опыте работы с ним. Мое внимание также привлек тот факт, что для его имплементации мы можем применить *динамическое программирование (DP)*. И, если вы, как и я, все еще находитесь на пути изучения алгоритмов, то это решение может обогатить ваш личный арсенал DP. - -Итак, в этой статье я хочу сделать три вещи: - -1. Предоставить вам возможность "поиграться" с алгоритмом самостоятельно при помощи **интерактивного ресайзера**. -2. Объяснить **идею алгоритма Seam Carving**. -3. Объяснить как можно **применить динамическое программирование** для имплементации алгоритма (мы будем писать на TypeScript). - -### Изменение размеров изображений с учетом их содержимого - -*Изменение размера изображения с учетом содержимого* (content-aware image resizing) может быть применено, когда дело доходит до изменения пропорций изображения (например, уменьшения ширины при сохранении высоты), а также когда потеря некоторых частей изображения нежелательна. Простое масштабирование изображения в этом случае исказит находящиеся в нем объекты. Для сохранения пропорций объектов при изменении пропорций изображения можно использовать [алгоритм Seam Carving](https://perso.crans.org/frenoy/matlab2012/seamcarving.pdf), который был описан *Shai Avidan* и *Ariel Shamir*. - -В приведенном ниже примере показано, как ширина исходного изображения была уменьшена на 50% *с учетом содержимого изображения* (слева) и *без учета содержимого изображения* (справа, простой скейлинг). В данном случае левое изображение выглядит более естественным, так как пропорции воздушных шаров в нем были сохранены. - -![Content-aware image resizing](https://raw.githubusercontent.com/trekhleb/trekhleb.github.io/master/src/posts/2021/content-aware-image-resizing-in-javascript/assets/01-resizing-options.png) - -Идея алгоритма Seam Carving заключается в том, чтобы найти *шов* (seam, непрерывную последовательность пикселей) с наименьшим влиянием на содержание изображения, а затем его *вырезать* (carve). Этот процесс повторяется снова и снова, пока мы не получим требуемую ширину или высоту изображения. В примере ниже интуитивно видно, что пиксели воздушных шаров вносят больший "вклад" в содержание и смысл изображения, чем пиксели неба. Таким образом, сначала удаляются пиксели неба. - -![JS IMAGE CARVER DEMO](https://raw.githubusercontent.com/trekhleb/trekhleb.github.io/master/src/posts/2021/content-aware-image-resizing-in-javascript/assets/10-demo-01.gif) - -Поиск шва с наименьшей энергией (с наименьшим вкладом в содержимое изображения) является вычислительно дорогостоящей операцией (особенно для больших изображений). Для ускорения поиска шва может быть применено *динамическое программирование* (мы рассмотрим детали реализации ниже). - -### Удаление объектов - -Важность каждого пикселя (так называемая энергия пикселя) вычисляется исходя из его цветовой разницы (`R`, `G`, `B`, `A`) между двумя соседними пикселями. Если же мы вручную зададим некоторым пикселям низкий уровень энергии (например нарисовав маску поверх них), то алгоритм Seam Carving выполнит для нас **удаление помеченного объекта**, как говорится, "забесплатно". - -![JS IMAGE CARVER OBJECT REMOVAL DEMO](https://raw.githubusercontent.com/trekhleb/trekhleb.github.io/master/src/posts/2021/content-aware-image-resizing-in-javascript/assets/10-demo-02.gif) - -### Интерактивный ресзайзер - -Для этой статьи я создал приложение [JS IMAGE CARVER](https://trekhleb.dev/js-image-carver/) (доступен также и [исходный код на GitHub](https://github.com/trekhleb/js-image-carver)), которым вы можете воспользоваться для ресайза своих изображений и увидеть в реальном времени, как работает алгоритм. - -### Другие примеры ресайза - -Вот еще несколько примеров того, как алгоритм справляется с более сложным фоном. - -Горы на заднем плане плавно сжимаются, без видимых швов. - -![Resizing demo with more complex backgrounds](https://raw.githubusercontent.com/trekhleb/trekhleb.github.io/master/src/posts/2021/content-aware-image-resizing-in-javascript/assets/11-demo-01.png) - -То же самое и с океанскими волнами. Алгоритм сохранил волновую структуру, не искажая серферов. - -![Resizing demo with more complex backgrounds](https://raw.githubusercontent.com/trekhleb/trekhleb.github.io/master/src/posts/2021/content-aware-image-resizing-in-javascript/assets/11-demo-02.png) - -Нужно помнить, что алгоритм Seam Carving не является "волшебной таблеткой", и может не сохранить пропорции важных частей изображения в том случае, когда *большая часть пикселей выглядят как края, ребра или границы* (почти все пиксели выглядят одинаково важными с точки зрения алгоритма). В приведенном ниже примере изменение размера изображения с учетом содержимого похоже на простое масштабирование, т.к. для алгоритма все пиксели выглядят важными, и ему трудно отличить лицо Ван Гога от фона. - -![Example when the algorithm does not work as expected](https://raw.githubusercontent.com/trekhleb/trekhleb.github.io/master/src/posts/2021/content-aware-image-resizing-in-javascript/assets/12-demo-01.png) - -## Как работает алгоритм Seam Carving - -Представим, что у нас есть картинка размером `1000 x 500 px`, и мы хотим уменьшить ее до `500 x 500 px` (допустим, квадратное изображение больше подходит для Instagram). В этом случае мы, возможно, захотим задать несколько **требований к процессу изменения размера**: - -- *Важные части изображения должны быть сохранены* (если до ресайза на фото было 5 деревьев, то и после ресайза мы хотим увидеть все те же 5 деревьев). -- *Пропорции важных частей изображения должны быть сохранены* (круглые колеса автомобиля не должны стать овальными после ресайза). - -Чтобы избежать изменения важных частей изображения можно найти **непрерывную последовательность пикселей (шов)**, которая будет идти от верхней границы к нижней и иметь *наименьший вклад в содержимое* изображения (шов, который не проходит через важные части изображения), а затем удалить его. Удаление шва сожмет изображение на один пиксель. Далее надо повторять этот шаг до тех пор, пока изображение не станет нужной ширины. - -Вопрос в том, как определить *важность пикселя* и его вклад в содержание изображения (в оригинальной статье авторы используют термин **энергия пикселя**). Один из способов это сделать — рассматривать все пиксели, образующие края (границы, ребра), как важные. В случае, если пиксель является частью ребра, его цвет будет отличаться от соседей (левого и правого пикселей). - -![Pixels color difference](https://raw.githubusercontent.com/trekhleb/trekhleb.github.io/master/src/posts/2021/content-aware-image-resizing-in-javascript/assets/30-pixel-energy-comparison.png) - -Предполагая, что цвет пикселя представлен *4-мя* числами (`R` - красный, `G` - зеленый, `B` - синий, `A` - альфа, прозрачность), мы можем использовать следующую формулу для вычисления разницы в цвете (энергии пикселя): - -![Pixel energy formula](https://raw.githubusercontent.com/trekhleb/trekhleb.github.io/master/src/posts/2021/content-aware-image-resizing-in-javascript/assets/20-energy-formula.png) - -Где: - -- `mEnergy` - *Энергия* (важность) *среднего* пикселя (`[0..626]` если округлить) -- `lR` - *Красный* цветовой канал *левого* пикселя (`[0..255]`) -- `mR` - *Красный* цветовой канал *среднего* пикселя (`[0..255]`) -- `rR` - *Красный* цветовой канал *правого* пикселя (`[0..255]`) -- `lG` - *Зеленый* цветовой канал *левого* пикселя (`[0..255]`) -- и так далее... - -В приведенной выше формуле мы пока не используем альфа-канал (прозрачность), предполагая, что изображение не содержит прозрачные пиксели. Позже мы будем использовать альфа-канал для маскировки и удаления объектов. - -![Example of pixel energy calculation](https://raw.githubusercontent.com/trekhleb/trekhleb.github.io/master/src/posts/2021/content-aware-image-resizing-in-javascript/assets/30-pixel-energy-calculation-example.png) - -Поскольку мы знаем, как найти энергию одного пикселя, мы можем вычислить так называемую **энергетическую карту**, которая будет содержать энергии каждого пикселя изображения. На каждом шаге изменения размера изображения карту энергий необходимо пересчитывать (по крайней мере частично, подробнее об этом ниже), и она будет иметь тот же размер, что и изображение. - -Например, на 1-м шаге у нас будет изображение размером `1000 x 500` и энергетическая карта размером `1000 x 500`. На 2-м шаге изменения размера мы удалим шов с изображения и пересчитаем карту энергий на основе нового уменьшенного изображения. Таким образом, мы получим изображение размером `999 x 500` и карту энергий размером `999 x 500`. - -Чем выше энергия пикселя, тем больше вероятность того, что он является частью ребра, важен для содержимого изображения и тем меньше вероятность того, что нам потребуется его удалить. - -Для визуализации карты энергий мы можем присвоить более яркий цвет пикселям с большей энергией и более темные цвета пикселям с меньшей энергией. Вот как может выглядеть часть карты энергий. Вы можете увидеть светлую линию, которая представляет край и которую мы хотим сохранить при изменении размера. - -![Energy map sketch](https://raw.githubusercontent.com/trekhleb/trekhleb.github.io/master/src/posts/2021/content-aware-image-resizing-in-javascript/assets/30-energy-map-padding.png) - -Вот реальный пример энергетической карты для изображения, которое вы видели выше (с воздушными шарами). - -![Energy map example](https://raw.githubusercontent.com/trekhleb/trekhleb.github.io/master/src/posts/2021/content-aware-image-resizing-in-javascript/assets/40-energy-map.png) - -Вы можете загрузить свое изображение и посмотреть, как будет выглядеть энергетическая карта в [интерактивной версии статьи](https://trekhleb.dev/blog/2021/content-aware-image-resizing-in-javascript/). - -Мы можем использовать энергетическую карту, чтобы найти швы (один за другим) с наименьшей энергией и тем самым решить, какие пиксели в конечном итоге должны быть удалены. - -![Searching the seam](https://raw.githubusercontent.com/trekhleb/trekhleb.github.io/master/src/posts/2021/content-aware-image-resizing-in-javascript/assets/41-seam-search.png) - -Поиск шва с наименьшими затратами энергии не является тривиальной задачей и требует перебора множества возможных комбинаций пикселей. Мы применим динамическое программирование для оптимизации поиска шва. - -В примере ниже вы можете увидеть карту энергий с первым найденным для нее швом с наименьшей энергией. - -![Energy map example with seam](https://raw.githubusercontent.com/trekhleb/trekhleb.github.io/master/src/posts/2021/content-aware-image-resizing-in-javascript/assets/40-energy-map-with-seam.png) - -В приведенных выше примерах мы уменьшали ширину изображения. Аналогичный подход может быть использован для уменьшения высоты изображения. Для этого нам нужно: - -- начать использовать соседей *сверху* и *снизу*, а не *слева* и *справа*, для вычисления энергии пикселя -- при поиске шва нам нужно двигаться *слева* *направо*, а не *сверху* *вниз*. - -## Реализация алгоритма на TypeScript - -> Исходный код и функции, упомянутые ниже, можно найти в репозитории [js-image-carver](https://github.com/trekhleb/js-image-carver). - -Для реализации алгоритма мы будем использовать TypeScript. Если вам нужна версия на JavaScript, вы можете игнорировать (удалить) определения типов и их использование. - -Для простоты примеров мы напишем код только для уменьшения *ширины* изображения. - -### Уменьшение ширины с учетом содержимого изображения (исходная функция) - -Для начала определим некоторые общие типы, которые мы будем использовать при реализации алгоритма. - -```typescript -// Type that describes the image size (width and height). -type ImageSize = { w: number, h: number }; - -// The coordinate of the pixel. -type Coordinate = { x: number, y: number }; - -// The seam is a sequence of pixels (coordinates). -type Seam = Coordinate[]; - -// Energy map is a 2D array that has the same width and height -// as the image the map is being calculated for. -type EnergyMap = number[][]; - -// Type that describes the image pixel's RGBA color. -type Color = [ - r: number, // Red - g: number, // Green - b: number, // Blue - a: number, // Alpha (transparency) -] | Uint8ClampedArray; -``` - -Для имплементации алгоритма нам необходимо выполнить следующие шаги: - -1. Рассчитать **карту энергии** для текущей версии изображения. -2. Найти **шов** с наименьшей энергией на основе карты энергий (здесь мы применим динамическое программирование). -3. **Удалить шов** с наименьшей энергией из изображения. -4. **Повторять** до тех пор, пока ширина изображения не будет уменьшена до нужного значения. - -```typescript -type ResizeImageWidthArgs = { - img: ImageData, // Image data we want to resize. - toWidth: number, // Final image width we want the image to shrink to. -}; - -type ResizeImageWidthResult = { - img: ImageData, // Resized image data. - size: ImageSize, // Resized image size (w x h). -}; - -// Performs the content-aware image width resizing using the seam carving method. -export const resizeImageWidth = ( - { img, toWidth }: ResizeImageWidthArgs, -): ResizeImageWidthResult => { - // For performance reasons we want to avoid changing the img data array size. - // Instead we'll just keep the record of the resized image width and height separately. - const size: ImageSize = { w: img.width, h: img.height }; - - // Calculating the number of pixels to remove. - const pxToRemove = img.width - toWidth; - if (pxToRemove < 0) { - throw new Error('Upsizing is not supported for now'); - } - - let energyMap: EnergyMap | null = null; - let seam: Seam | null = null; - - // Removing the lowest energy seams one by one. - for (let i = 0; i < pxToRemove; i += 1) { - // 1. Calculate the energy map for the current version of the image. - energyMap = calculateEnergyMap(img, size); - - // 2. Find the seam with the lowest energy based on the energy map. - seam = findLowEnergySeam(energyMap, size); - - // 3. Delete the seam with the lowest energy seam from the image. - deleteSeam(img, seam, size); - - // Reduce the image width, and continue iterations. - size.w -= 1; - } - - // Returning the resized image and its final size. - // The img is actually a reference to the ImageData, so technically - // the caller of the function already has this pointer. But let's - // still return it for better code readability. - return { img, size }; -}; -``` - -Изображение, которому необходимо изменить размер, передается в функцию в формате [ImageData](https://developer.mozilla.org/en-US/docs/Web/API/ImageData). Вы можете отобразить изображение на canvas-е, а затем извлечь ImageData из того же canvas-а следующим образом: - -```javascript -const ctx = canvas.getContext('2d'); -const imgData = ctx.getImageData(0, 0, imgWidth, imgHeight); -``` - -> Загрузка и отрисовка изображений в JavaScript выходит за рамки данной статьи, но вы можете найти полный исходный код того, как это можно сделать с помощью React в репозитории [js-image-carver](https://github.com/trekhleb/js-image-carver). - -Теперь, пошагово реализуем функции `calculateEnergyMap()`, `findLowEnergySeam()` и `deleteSeam()`. - -### Расчет энергии пикселя - -Для расчета воспользуемся формулой разницы цветов, описанной выше. Для левой и правой краев изображения (когда нет левого или правого соседей) мы игнорируем соседей и не учитываем их при расчете энергии. - -```typescript -// Calculates the energy of a pixel. -const getPixelEnergy = (left: Color | null, middle: Color, right: Color | null): number => { - // Middle pixel is the pixel we're calculating the energy for. - const [mR, mG, mB] = middle; - - // Energy from the left pixel (if it exists). - let lEnergy = 0; - if (left) { - const [lR, lG, lB] = left; - lEnergy = (lR - mR) ** 2 + (lG - mG) ** 2 + (lB - mB) ** 2; - } - - // Energy from the right pixel (if it exists). - let rEnergy = 0; - if (right) { - const [rR, rG, rB] = right; - rEnergy = (rR - mR) ** 2 + (rG - mG) ** 2 + (rB - mB) ** 2; - } - - // Resulting pixel energy. - return Math.sqrt(lEnergy + rEnergy); -}; -``` - -### Расчет энергетической карты - -Изображение, с которым мы работаем, имеет формат [ImageData](https://developer.mozilla.org/en-US/docs/Web/API/ImageData). Это означает, что все пиксели (и их цвета) хранятся в одномерном массиве [Uint8ClampedArray](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8ClampedArray). Для удобства чтения введем пару вспомогательных функций, которые позволят работать с массивом Uint8ClampedArray как с *2D* матрицей. - -```typescript -// Helper function that returns the color of the pixel. -const getPixel = (img: ImageData, { x, y }: Coordinate): Color => { - // The ImageData data array is a flat 1D array. - // Thus we need to convert x and y coordinates to the linear index. - const i = y * img.width + x; - const cellsPerColor = 4; // RGBA - // For better efficiency, instead of creating a new sub-array we return - // a pointer to the part of the ImageData array. - return img.data.subarray(i * cellsPerColor, i * cellsPerColor + cellsPerColor); -}; - -// Helper function that sets the color of the pixel. -const setPixel = (img: ImageData, { x, y }: Coordinate, color: Color): void => { - // The ImageData data array is a flat 1D array. - // Thus we need to convert x and y coordinates to the linear index. - const i = y * img.width + x; - const cellsPerColor = 4; // RGBA - img.data.set(color, i * cellsPerColor); -}; -``` - -Для вычисления карты энергии мы проходим через каждый пиксель изображения и вызываем для него описанную ранее функцию `getPixelEnergy()`. - -```typescript -// Helper function that creates a matrix (2D array) of specific -// size (w x h) and fills it with specified value. -const matrix = (w: number, h: number, filler: T): T[][] => { - return new Array(h) - .fill(null) - .map(() => { - return new Array(w).fill(filler); - }); -}; - -// Calculates the energy of each pixel of the image. -const calculateEnergyMap = (img: ImageData, { w, h }: ImageSize): EnergyMap => { - // Create an empty energy map where each pixel has infinitely high energy. - // We will update the energy of each pixel. - const energyMap: number[][] = matrix(w, h, Infinity); - for (let y = 0; y < h; y += 1) { - for (let x = 0; x < w; x += 1) { - // Left pixel might not exist if we're on the very left edge of the image. - const left = (x - 1) >= 0 ? getPixel(img, { x: x - 1, y }) : null; - // The color of the middle pixel that we're calculating the energy for. - const middle = getPixel(img, { x, y }); - // Right pixel might not exist if we're on the very right edge of the image. - const right = (x + 1) < w ? getPixel(img, { x: x + 1, y }) : null; - energyMap[y][x] = getPixelEnergy(left, middle, right); - } - } - return energyMap; -}; -``` - -> Карта энергии будет пересчитываться при каждой итерации изменения размера. Это значит, что она будет пересчитываться, скажем, 500 раз, если нам нужно будет уменьшить изображение на 500 пикселей, что выглядит неоптимально. Чтобы ускорить вычисление карты энергии на 2-м, 3-м и последующих этапах, мы можем пересчитать энергию только для тех пикселей, которые расположены вокруг шва, который будет удален. Для простоты эта оптимизация здесь пропущена, но пример с исходным кодом можно найти в репозитории [js-image-carver](https://github.com/trekhleb/js-image-carver). - -### Нахождение шва с минимальной энергией (применяем динамическое программирование) - -> В статье [Dynamic Programming vs Divide-and-Conquer](https://trekhleb.dev/blog/2018/dynamic-programming-vs-divide-and-conquer/) я описывал некоторые аспекты динамического программирования на примере нахождения "расстояния Левенштейна" (преобразование одной строки в другую). Возможно она будет полезна для ознакомления. - -Проблема, которую нам необходимо решить заключается в нахождении пути (шва) на энергетической карте, который идет от верхней границы изображения к нижней и имеет минимальную энергию (сумма энергий пикселей, составляющих шов должна быть минимальной). - -#### "Наивный" подход (naive) - -Прямолинейный ("наивный") подход — перебрать все возможные пути один за другим. - -![The naive approach](https://raw.githubusercontent.com/trekhleb/trekhleb.github.io/master/src/posts/2021/content-aware-image-resizing-in-javascript/assets/50-naive-approach.png) - -Двигаясь сверху вниз, для каждого пикселя у нас есть 3 варианта (↙︎ идти вниз-влево, ↓ вниз, ↘︎ идти вниз-вправо). Это дает нам временную сложность `O (w * 3 ^ h)` или просто `O (3 ^ h)`, где `w` и` h` - ширина и высота изображения. Такой подход выглядит неоптимальным. - -#### "Жадный" подход (greedy) - -Жадный подход — выбирать следующий пиксель как пиксель с наименьшей энергией, надеясь, что результирующая энергия шва будет наименьшей. - -![The greedy approach](https://raw.githubusercontent.com/trekhleb/trekhleb.github.io/master/src/posts/2021/content-aware-image-resizing-in-javascript/assets/51-greedy-approach.png) - -Жадный подход приведет нас к не самому худшему решению, но он не сможет гарантировать, что мы найдем наилучшее доступное решение. На картинке выше видно, как мы выбрали `5` вместо `10` и пропустили цепочку оптимальных пикселей. - -Плюс этого подхода в том, что он быстрый и имеет временную сложность `O(w + h)`, где `w` и `h` - это ширина и высота изображения. В этом случае плата за скорость — низкое качество ресайза (много искажений). Временная сложность обусловлена тем, что нужно найти минимальное значение в первом ряду (обход `w` ячеек), а затем исследовать только 3 соседних пикселя для каждого ряда (обход `h` рядов). - -#### Используем динамическое программирование - -Вы, наверное, заметили, что в наивном подходе мы снова и снова суммировали одни и те же энергии пикселей, вычисляя энергию образовавшихся швов. - -![Repeated problems](https://raw.githubusercontent.com/trekhleb/trekhleb.github.io/master/src/posts/2021/content-aware-image-resizing-in-javascript/assets/52-dp-repeated-problems.png) - -В примере выше видно, что для первых двух швов мы повторно используем энергию более короткого шва (который имеет энергию `235`). Вместо одной операции `235 + 70` для вычисления энергии 2-го шва мы делаем четыре операции `(5 + 0 + 80 + 150) + 70`. - -> Тот факт, что мы повторно используем энергию предыдущего шва для вычисления энергии текущего шва, может быть применен рекурсивно ко всем более коротким швам до самого верхнего 1-го ряда. Когда у нас есть такие перекрывающиеся под-проблемы, [это признак](https://trekhleb.dev/blog/2018/dynamic-programming-vs-divide-and-conquer/), что общая задача *может* быть оптимизирована с использованием динамического программирования. - -Таким образом, мы можем **сохранить энергию текущего шва** для конкретного пикселя в дополнительной таблице `samsEnergies`, чтобы повторно использовать ее при расчете энергии следующих швов (таблица `samsEnergies` будет иметь тот же размер, что и энергетическая карта и само изображение). - -Обратите также внимание, что для большинства пикселей в изображении (например, для левого нижнего) мы можем иметь *несколько* значений энергий предыдущих швов. - -![What seam to choose](https://raw.githubusercontent.com/trekhleb/trekhleb.github.io/master/src/posts/2021/content-aware-image-resizing-in-javascript/assets/53-dp-what-to-choose.png) - -Так как мы ищем шов с наименьшей результирующей энергией, имеет смысл выбирать и предыдущий шов с наименьшей результирующей энергией. - -![Seams energies example](https://raw.githubusercontent.com/trekhleb/trekhleb.github.io/master/src/posts/2021/content-aware-image-resizing-in-javascript/assets/56-dp-seams-energies-example.png) - -Как правило, у нас есть три возможных предыдущих шва, которые текущий пиксель продолжает: - -![Three options to choose from](https://raw.githubusercontent.com/trekhleb/trekhleb.github.io/master/src/posts/2021/content-aware-image-resizing-in-javascript/assets/55-dp-three-options.png) - -Можем посмотреть на это с такой стороны: - -- Ячейка `[1][x]`: содержит наименьшую возможную энергию шва, который начинается где-то в ряду `[0][?] ` и заканчивается в ячейке `[1][x]`. -- **Текущая ячейка** `[2][3]`: содержит наименьшую возможную энергию шва, который начинается где-то в ряду `[0][?] ` и заканчивается в ячейке `[2][3]`. Для вычисления нужно суммировать энергию текущего пикселя `[2][3]` (из энергетической карты) с `min(seam_energy_1_2, seam_energy_1_3, seam_energy_1_4)`. - -Если мы заполним таблицу `ShesamsEnergies` полностью, то минимальное число в нижнем ряду будет наименьшей возможной энергией шва. - -Попробуем заполнить несколько ячеек этой таблицы, чтобы посмотреть, как это работает. - -![Seams energies map traversal](https://raw.githubusercontent.com/trekhleb/trekhleb.github.io/master/src/posts/2021/content-aware-image-resizing-in-javascript/assets/57-dp-seams-energies-traversal.png) - -После заполнения таблицы `ShesamsEnergies` видно, что в нижнем ряду пиксель с самой низкой энергией имеет значение `50`. Для удобства во время генерации `samsEnergies` для каждого пикселя мы можем сохранить не только энергию шва, но и координаты предыдущего шва с наименьшей энергией. Это даст нам возможность легко восстанавливать траекторию шва снизу вверх. - -Временная сложность DP подхода составит `O(w * h)`, где `w` и `h` - это ширина и высота изображения. Обусловлена она тем, что нужно вычислить энергии для *всех* пикселей изображения. - -Вот пример того, как эта логика может быть реализована: - -```typescript -// The metadata for the pixels in the seam. -type SeamPixelMeta = { - energy: number, // The energy of the pixel. - coordinate: Coordinate, // The coordinate of the pixel. - previous: Coordinate | null, // The previous pixel in a seam. -}; - -// Finds the seam (the sequence of pixels from top to bottom) that has the -// lowest resulting energy using the Dynamic Programming approach. -const findLowEnergySeam = (energyMap: EnergyMap, { w, h }: ImageSize): Seam => { - // The 2D array of the size of w and h, where each pixel contains the - // seam metadata (pixel energy, pixel coordinate and previous pixel from - // the lowest energy seam at this point). - const seamsEnergies: (SeamPixelMeta | null)[][] = matrix(w, h, null); - - // Populate the first row of the map by just copying the energies - // from the energy map. - for (let x = 0; x < w; x += 1) { - const y = 0; - seamsEnergies[y][x] = { - energy: energyMap[y][x], - coordinate: { x, y }, - previous: null, - }; - } - - // Populate the rest of the rows. - for (let y = 1; y < h; y += 1) { - for (let x = 0; x < w; x += 1) { - // Find the top adjacent cell with minimum energy. - // This cell would be the tail of a seam with lowest energy at this point. - // It doesn't mean that this seam (path) has lowest energy globally. - // Instead, it means that we found a path with the lowest energy that may lead - // us to the current pixel with the coordinates x and y. - let minPrevEnergy = Infinity; - let minPrevX: number = x; - for (let i = (x - 1); i <= (x + 1); i += 1) { - if (i >= 0 && i < w && seamsEnergies[y - 1][i].energy < minPrevEnergy) { - minPrevEnergy = seamsEnergies[y - 1][i].energy; - minPrevX = i; - } - } - - // Update the current cell. - seamsEnergies[y][x] = { - energy: minPrevEnergy + energyMap[y][x], - coordinate: { x, y }, - previous: { x: minPrevX, y: y - 1 }, - }; - } - } - - // Find where the minimum energy seam ends. - // We need to find the tail of the lowest energy seam to start - // traversing it from its tail to its head (from the bottom to the top). - let lastMinCoordinate: Coordinate | null = null; - let minSeamEnergy = Infinity; - for (let x = 0; x < w; x += 1) { - const y = h - 1; - if (seamsEnergies[y][x].energy < minSeamEnergy) { - minSeamEnergy = seamsEnergies[y][x].energy; - lastMinCoordinate = { x, y }; - } - } - - // Find the lowest energy energy seam. - // Once we know where the tail is we may traverse and assemble the lowest - // energy seam based on the "previous" value of the seam pixel metadata. - const seam: Seam = []; - if (!lastMinCoordinate) { - return seam; - } - - const { x: lastMinX, y: lastMinY } = lastMinCoordinate; - - // Adding new pixel to the seam path one by one until we reach the top. - let currentSeam = seamsEnergies[lastMinY][lastMinX]; - while (currentSeam) { - seam.push(currentSeam.coordinate); - const prevMinCoordinates = currentSeam.previous; - if (!prevMinCoordinates) { - currentSeam = null; - } else { - const { x: prevMinX, y: prevMinY } = prevMinCoordinates; - currentSeam = seamsEnergies[prevMinY][prevMinX]; - } - } - - return seam; -}; -``` - -### Удаление шва с минимальной энергией - -Как только мы нашли шов с наименьшей суммарной энергией, нам нужно удалить (вырезать) пиксели, которые образуют его из изображения. Удаление происходит путем смещения пикселей справа от шва на `1px` влево. Из соображений производительности мы не будем удалять крайний столбик пикселей. Вместо этого, компонент, отвечающий за отрисовку уменьшенного изображения просто проигнорирует ту часть изображения, которая лежит за пределами обрезанной ширины. - -![Deleting the seam](https://raw.githubusercontent.com/trekhleb/trekhleb.github.io/master/src/posts/2021/content-aware-image-resizing-in-javascript/assets/60-deleting-example.png) - -```typescript -// Deletes the seam from the image data. -// We delete the pixel in each row and then shift the rest of the row pixels to the left. -const deleteSeam = (img: ImageData, seam: Seam, { w }: ImageSize): void => { - seam.forEach(({ x: seamX, y: seamY }: Coordinate) => { - for (let x = seamX; x < (w - 1); x += 1) { - const nextPixel = getPixel(img, { x: x + 1, y: seamY }); - setPixel(img, { x, y: seamY }, nextPixel); - } - }); -}; -``` - -## Удаление объектов с изображения - -Seam Carving алгоритм пытается сначала удалить швы, состоящие из низкоэнергетических пикселей. Мы могли бы использовать этот факт и, присвоив низкую энергию некоторым пикселям вручную (например, нарисовав на изображении маску), мы могли бы заставить алгоритм удалить отмеченные пиксели (*объекты*). - -В настоящее время в функции `getPixelEnergy()` мы используем только каналы цветов `R`, `G`, `B` для вычисления энергии пикселей. Но есть еще и параметр `A` (альфа, прозрачность), который мы не использовали. Мы можем использовать канал прозрачности, чтобы "сказать" алгоритму, что прозрачные пиксели — это те пиксели, которые мы хотим удалить. Вы можете ознакомиться с [исходным кодом функции getPixelEnergy()](https://github.com/trekhleb/js-image-carver/blob/main/src/utils/contentAwareResizer.ts#L54), которая учитывает прозрачность. - -Вот как при этом будет выглядеть удаление объектов: - -![JS IMAGE CARVER OBJECT REMOVAL DEMO](https://raw.githubusercontent.com/trekhleb/trekhleb.github.io/master/src/posts/2021/content-aware-image-resizing-in-javascript/assets/10-demo-02.gif) - -## Проблемы алгоритма и дальнейшие планы - -Приложение [JS IMAGE CARVER](https://github.com/trekhleb/js-image-carver) далеко от идеала и не является приложением production-ready качества. Основной его целью была возможность интерактивного экспериментирования с алгоритмом. Поэтому в дальнейших планах — использовать его именно для экспериментов. - -В [оригинальной статье](https://perso.crans.org/frenoy/matlab2012/seamcarving.pdf) описывается, как алгоритм может быть использован не только для уменьшения, но и для **увеличения изображения**. Увеличение (расширение) изображения, в свою очередь, может быть использовано для **автоматического расширения изображения до его исходной ширины после удаления объектов**. - -Еще одной интересной областью экспериментов может быть попытка ускорить алгоритм, чтобы он работал в режиме **реального времени**. - -> Таковы планы на будущее, но пока, надеюсь, пример с уменьшением изображения был интересен и полезен для вас. Также надеюсь, что вам было интересно увидеть применение динамического программирования в задачах, приближенных к реальности. -> -> Удачи с вашими собственными экспериментами! diff --git a/src/algorithms/image-processing/seam-carving/__tests__/resizeImageWidth.node.js b/src/algorithms/image-processing/seam-carving/__tests__/resizeImageWidth.node.js deleted file mode 100644 index e4f78b7a52..0000000000 --- a/src/algorithms/image-processing/seam-carving/__tests__/resizeImageWidth.node.js +++ /dev/null @@ -1,85 +0,0 @@ -import fs from 'fs'; -import { PNG } from 'pngjs'; - -import resizeImageWidth from '../resizeImageWidth'; - -const testImageBeforePath = './src/algorithms/image-processing/seam-carving/__tests__/test-image-before.png'; -const testImageAfterPath = './src/algorithms/image-processing/seam-carving/__tests__/test-image-after.png'; - -/** - * Compares two images and finds the number of different pixels. - * - * @param {ImageData} imgA - ImageData for the first image. - * @param {ImageData} imgB - ImageData for the second image. - * @param {number} threshold - Color difference threshold [0..255]. Smaller - stricter. - * @returns {number} - Number of different pixels. - */ -function pixelsDiff(imgA, imgB, threshold = 0) { - if (imgA.width !== imgB.width || imgA.height !== imgB.height) { - throw new Error('Images must have the same size'); - } - - let differentPixels = 0; - const numColorParams = 4; // RGBA - - for (let pixelIndex = 0; pixelIndex < imgA.data.length; pixelIndex += numColorParams) { - // Get pixel's color for each image. - const [aR, aG, aB] = imgA.data.subarray(pixelIndex, pixelIndex + numColorParams); - const [bR, bG, bB] = imgB.data.subarray(pixelIndex, pixelIndex + numColorParams); - - // Get average pixel's color for each image (make them greyscale). - const aAvgColor = Math.floor((aR + aG + aB) / 3); - const bAvgColor = Math.floor((bR + bG + bB) / 3); - - // Compare pixel colors. - if (Math.abs(aAvgColor - bAvgColor) > threshold) { - differentPixels += 1; - } - } - - return differentPixels; -} - -const pngLoad = (path) => new Promise((resolve) => { - fs.createReadStream(path) - .pipe(new PNG()) - .on('parsed', function Parsed() { - /** @type {ImageData} */ - const imageData = { - colorSpace: 'srgb', - width: this.width, - height: this.height, - data: this.data, - }; - resolve(imageData); - }); -}); - -describe('resizeImageWidth', () => { - it('should perform content-aware image width reduction', async () => { - const imgBefore = await pngLoad(testImageBeforePath); - const imgAfter = await pngLoad(testImageAfterPath); - - const toWidth = Math.floor(imgBefore.width / 2); - - const { - img: imgResized, - size: resizedSize, - } = resizeImageWidth({ img: imgBefore, toWidth }); - - expect(imgResized).toBeDefined(); - expect(resizedSize).toBeDefined(); - - expect(resizedSize).toEqual({ w: toWidth, h: imgBefore.height }); - expect(imgResized.width).toBe(imgAfter.width); - expect(imgResized.height).toBe(imgAfter.height); - - const colorThreshold = 50; - const differentPixels = pixelsDiff(imgResized, imgAfter, colorThreshold); - - // Allow 10% of pixels to be different - const pixelsThreshold = Math.floor((imgAfter.width * imgAfter.height) / 10); - - expect(differentPixels).toBeLessThanOrEqual(pixelsThreshold); - }); -}); diff --git a/src/algorithms/image-processing/seam-carving/__tests__/test-image-after.png b/src/algorithms/image-processing/seam-carving/__tests__/test-image-after.png deleted file mode 100644 index 8b5724cd300f533fb6cd257eecd566daf7abf3d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6725 zcmbVx_d6Tz_qRPFHA+YbHClV;O=FgrHDlFi)s`w9s8yRFQMA zV(*~Ds>kQ~6Ta8E&ie73>s;r&UiXbf8tL2sa01B4$Zp)%)ik~K&etkMM{{jK!7t9Q z9mRc3b#s66ZO)MIWMq(k|I6k&+=gA(0>+6~K666~Yu58FtGO$=!OBg2$KCpbW^C@K zs85E)O>VJNAN5%1EF$#Eb*m7FZ|Skdx+@wzKSL@+`IyT!$G^+XeeZ?y2z5Vn?aix0 z1)~B!qZHO=Pl6Zw(u#lm`Xs_?Pr5|goiRmcA2i8EEU5=dcj)t;NOXYo?qkeMMVOV- zU>RiO>*^Hm5dRgXQ!J_5P<44}PMZm5up!Cy@eJT6dr4JzWd$ERDE%pwz*mvYc;&kY zkM-OoS!Wq$-aAj%TDZK@NxZ?fB=!`_*g#DdJfX&H}l zzi-u2L+8X>$t^oJt1brJUIX%@!5im!U)9A{D6JQ}z`b8fsBqk!N^zetwRjdLb4<8~ zuBurT1=}8*AvYz!!98Y0RVI#7{$VLMWAl&CNQldi#YY;)STyZTqjy#0-Mm~+IzWkR zg=~~-A`cdeOkG(cEbBQH?$9CX6iNV^ytFSF-?GzM>A@`>D1x&hIsGC7#%Kq7W4y3_ z_iy639VsX<`;t<^(X_IdFftlIIa{=iRi?)w$L_u8_5($`vmHC91suWSW0j1`tE6Wi z#yc=mTm=ObG(94iqBM~@H5yO{z4K5vh3cItppW#fU zzLoGiDW9$HF7{xD1t>kw-x;ApE@Mswq~hCxHUP5*b|jggzq%;(&xa=p1jgzl6oAJ?2l*871wC!oX-)XYHL@N9~^u3uXF3Q)Ex&*i zi;ti1=w$lHsL(98SQuG3j8eMz6G|E*9W7i5k=`1=45{y$LvCglGNiLUt!(R=QC*n2iDSl_}5FeV(re z$&z#8yh8^te15u}snZhb2Ws(&Y&p6hv>yo^k>~BWicib=bxCG2$!@_IiV{v(&2R%~ zraOb5O{p}b(Vwxk_~{NZr#r@0Vwu54%}otmD~lO(ziNxaPxHDi2BU5;K6n0y@5xp^ z*jKMU5@?DUx=p=xbCgO$gwLcAmM1$l|1r-pFEl*2^5-wcJWAu>cc*ne)z*D9y>)+! zm0xW-6_4Zmx!=hB9dWhazf@W1 z!%Z?ZI3*}QCM-F}?6@)!jIV^#A0*Z*aZaQ$rmF-ab@imB^~Kln+7HGFv!ss;LVKg- zU%I#c{1Kn~(z80x;@6vpT4){Zu^jUzbY?4`Y$`Bb?yq43Pf~L0x8I%a$~$IORPU>w z9=O+-NZn|@Tv9lW>X*9e-8-BpX7Y4WEW7n{_C~N|P!d>lJ`K8u;%^<&BuSe>7Y3;S z_76x8aO4%U#5SFTmq()#IHFQ}&)bStPa^*`F0$4yek3K?b=V^~mzk35{<=Onf4s0L z!onW^Zr~W5cuS>Mz-MH)*XIXU-;V5B0sHZExTA_v>C$VM{bfgA^TFz~Wm+bgpjEf$ zult&BUi`SR%aowu;~ZGu!v$!+_-i?%cqnYz+j@MVuk3eV;wrY)YLd9V#pkCX5>${A zknJ~kE`s$tH6JJ z!Wz-$dBTYPSdPNMyg5Y^p;FpjpC~b`9y&z6bZ+i_0tojad6t!s@u9M16Z)^P4<2MM z^>*csHi7T-w@b)H;rZ#Wa1{edJN%GTYsAm2jZIEF_z4Y@xxlELQ}n`>^>ZF�U4* z!`T})BsI|l>VeFYt*U)VpM-m28p5SWf2n&&3txLXZe4jw+Tuok`vt%I zIB}CzCe877Bcy}%_M(L}EY=q-4rf6m7`SLRw02wKh@ziW&+bedbCQuW3l}+Mdaky>4rW96hNVm|iW9@mY*T&24QrMvsKVW_Wtn z8W`%-kZX*8Z+OH+G8)ACmG6g)@`v(d0{JsU7+j+>7b}@{ZFQ=mF^L|>Dh>hh+*k}q zbZ_GvQfL}`ENt&6?ytP6k{JPx8!*svW8_}6lxiQXO9J!EjNQ6-B7S*!LQL)(wI|#; zGpDN)EK3{rUl%|)FPwSig|1krhT{2*xE~4HWi|xt&@_c``n}8);a=hvp}tMu^}g4- zB-bZM=>DtL;{6cB>X-oCiy?mT3?h3+dQ&Mq&j8{e`LXgxR%q;UoFd;8iygoeAc&+g zP|gsbw5CQyYgqG7W-cc1xcbTVJR7sRnlGC<9~LT4xP=nqYGlHIMUxKLVrb>0`w|rX zZ4GgdlFiQ7(-U91@Vq=vfZf{Tlc!W1GOu?0rRmxrf+`xO_|3QcH2jpJSkBylxov{`U4J0B-}a|e@M&YP-)Zg!O1>4 zrSADCFZ?wC2mfa*4VpJ@QHt~Puc3aS$I|1Jk+|&WZ=siu3^(B(_*p|F5;5`amd)~2 zZaPC5{)%WYG%^73MPB8J38w=LHBV7{iwRMj(PDkLN}pEPue&ck@_%}@kxU6 zw_CV?$h#Z&`*>VY&G}ei6IqiuYRXu)R(k8GtA{xdzepnEUe6*+?41Zj(@k}dm`ahf zxz6X{H;EsC3Wo>!7ssLhDBSb^scsKLc6oKHAV%Mbm(O z8)lL6S4f~IFP+5)q?#5pXc)jBVQ0JeAddoJ$`@Rw42;=&H3O4% zQV~sLgwD1Ygl+*AUHjs#>H>q}4fp8pn3zWD8f!{}6k!J67=$BYCt~|PFi*?4qcGmh zcxIID#)s}?Z|&RyHFjp0K~!Kad*W!&qJKGFZP=$WdkxY{pKbmI4VN>)U z=~%wOsjPYL1FAU-6wgv7F_}w$x7uz6jP>=3S*MMQmdk==0hYc6L>0jccT*9b1eT6^zBeC0oV|q)Mp%-ebElM!3~EV@_WmhTj?_vi6@mF zANt7Wq3^LtAkTyc@$b0nh6-2+5|AQ)15im>d2xwmeS}|LO8k`+22X3j>!)JPw`*Or zjF_EYj^PQ8BbJI?9NLkndHh$+lxuPMjRc)1at)ht@^^eSdVFQ0>sJ3B)*SRky-_CC z3Axb-#M<%I5B-9UDZd1Ku2Wx0J$hcs8%e5#Aw7p%*Q-+lkx<0i>+-XtNa@0Vx zVku^-|KJfKt~5q1mYGDJ$E(~tx zdMgEJ(#HL`5qW!ga{L;GFp2e5kHwKgixnv6&;?@;h(~XTIyN z)|Kf7)M@qW?z)Mv-qoP%{+~t$6lEJ={$vlon6oc+_L3~9{nC^l4#rtK3PDOugJgv} zr{n+p_g3MqAByz86v%I+V!{w>a;i4WT?qErwV#JoM$Icki0TzS;T>5+;~{7@kxbkk zQM4c-FqKa{1Hz!Hsk6{D#aATi9EF4M29GWG8qWI@+hMn;R)5yW&Uhy^w+`;(CY9@( zMm??^p07n5DFJEaiqC{|z0K#D3;g>x15Q`DcNf}kDO7l{I|y+E*^)~b%1kj7w|EBC zb_Nkd$J#FBj#UrY-VW|l45*uZqfP`Qy{<*Dbugdhv{<_Qf0Ua3?t@b|#GjHOJixA& zc(WQjRJQBnv%n*H3gC{P5z)>rd~EAP(~SRMd%H|iy)LJ`P3V4a<&tg52=?&v=k?zS z@W(~R$qG@T0rg^Nk16;ALf8-5@40_~VYjsl%0PuyMa1x_Mt^b{4Xt%O^|rOg7Mj-A z94Lsb@Hl*`X*s8SD>iD5**^f4y%4ejQuSSi_5X|1EoT9I`DE}AV5BU`rNB`Hkc4|t zn6m&(zhR4?Mwe9gL??{W8_C|lSE@beTE#-eB%jYM#=nt*Db`18^HmfAQWauhIiO8^ zrm>(oU($J==Va|ez)3}1ojsTVSM>5Y@d}fue88ez%<}AKIIFLrZWo`|CfnQTHj-j#OgO(iD6yz@Z01c1zobW1g!U#$Gj>7XK@})$nc$@l0WPDj3~C zM`R(6zh{5O$@BUQvL9X*&CwzK%_)rqR?iNN^^f5&mg(T2+g$giF}7vw(Vl!b4x^ck(=<0Lqb6UW481 zna3(V(X@!J-Ce=Tcvy|ax_6>CW1{_o zezqdT+mYo-Z*Gbc%+;gNg<*{nJ}=`cb${o|&iyXQA1N0zF3U_=GoP3+6cSI29v;dm z@pjyJNx@TEVz8s!qja02-lbJ^9{t5_UH^Sa-g>HOoYmbDoKrY0izNug z4%E=x?{F<=3!>V(L5}_mH%9qKt$_7@ym04)U3k z{yO`N5Xs3C?#HQtX%L1|Fh9NxGA||qYK5EM9DE3XQ+d5FL6|9diJ~c1m67GeI-dmB zx}k(+0&2gyXhdZc?EtziM3nxPKy_}tJQ(Twyk05$t)+XA#oONqR;VGyDjnP#o9SX; zU*FQj(N5CJd%emERSe4b!h_UvsBah=`EysHHiQgDc)T*=pH0WWIh)jbcWQHgv`}q@ zyU;nU7`5);VrB9@j#rxits5gXp?DK!Bg+syGQi}ZHAa2!fs1Eu-*# zKD)ejwYxwV%ua_e(ZtbGLh)p@@NeXdFT?&Xp*oru!OVxjM=GBAB5ZY5ZO3XW26l3i zy*(Ci12tE@FTAcam=5*{D5N)B>?l}gAamRt%{z6|Z4wBx;+#6_STq}}jn!SK!-d|9 zWKIe(QhJuTV+0YG5-4=+1F*ky@EZ0Ld~~t-=Atb0Wbbq)|EjF&-piEY7)H<4BR3=N zd+M6>U14~5ZD@S{znS))OQAi1MhS*Szgc&$(IBy!fYEY5Ipw3mcL-bMRB*PX}xi3g&UmHNX?^1?nn z+LliexrM5##-pQm;WP;q!f z+_-h|pU-~DR0A*nth>2C(?@rw`MK4`H+Dj)+>WW>AK?R|f@?S;ApdlBjdYftzw)E; z1}DeN%$F`{DrIeMk4 z?>=wnsdv7Uxz^D)(R-JEA<>arTjdB_wAJ*{v!V)Rj?sLS{M^da2i8xA3Wi9e@gHAt z(t68JXEgOSI(@wOqnD;(16`A+qW=$@AgGh{#zT{ja%>%I)15{h7gQ@^Fl`mmXWljHB4FO{J^ zu9D3kl`d1hAVEwQid~anMsY~3*Wp4umvrZh+g;h=kcRBf);2apPdV9F?|9aj%sYgU zz+8C8ehmgO(%+&c+i+*8r)&+HFNtt04!l4$#9kQ?_Ey#0f7zo^j-t~PQ#^50Qj zxXQd`@4rMhsmc=EZLOVyJjc=f5*+5-8Ke^fsKz|IR)P_4BD5NP@mpbnScLi9E<^D=IM)wlpGt#PiSABy9n za@YHCYn_h>0+dzuYeSm48LOECVd;(|-8BdL*1APBs?EW4uxMUC^%v_f!E88Fyb%&9 zX9-^_=%`mG>4%1f=z0+&`PCf%^7&hfGaSG;`ecq#)xO`qIrVjn_6Nll@Jpq4P4-BI zV?p=w`aM)NOa;N>J98R$^SxIFT@tvJdSANr{}{P(T)peCviKJ0J$8C1Rd>~GQemPc zm1%a8YmbsIBM#1_<2sxY?~O{sN818e_Effn5|f7aMN3j-V5XZ`LuY8O^2tRgVHryh zuc<;>^Zu1Ue=9sU{tl#FE*CEeSTZ)Vlv@z7{Yl)B>5iiYN#jGw4iNXyhhAPi*Z)Ff N_qB{Ps}c4Q{}0kcsZ;;} diff --git a/src/algorithms/image-processing/seam-carving/__tests__/test-image-before.png b/src/algorithms/image-processing/seam-carving/__tests__/test-image-before.png deleted file mode 100644 index 20a53207ddf19ed3ace2b29abbe714b2b409e204..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11746 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 Q=jUcwNkxfTF@vE02Xz~Xj{pDw diff --git a/src/algorithms/image-processing/seam-carving/resizeImageWidth.js b/src/algorithms/image-processing/seam-carving/resizeImageWidth.js deleted file mode 100644 index 9f2c92fcee..0000000000 --- a/src/algorithms/image-processing/seam-carving/resizeImageWidth.js +++ /dev/null @@ -1,253 +0,0 @@ -import { getPixel, setPixel } from '../utils/imageData'; - -/** - * The seam is a sequence of pixels (coordinates). - * @typedef {PixelCoordinate[]} Seam - */ - -/** - * Energy map is a 2D array that has the same width and height - * as the image the map is being calculated for. - * @typedef {number[][]} EnergyMap - */ - -/** - * The metadata for the pixels in the seam. - * @typedef {Object} SeamPixelMeta - * @property {number} energy - the energy of the pixel. - * @property {PixelCoordinate} coordinate - the coordinate of the pixel. - * @property {?PixelCoordinate} previous - the previous pixel in a seam. - */ - -/** - * Type that describes the image size (width and height) - * @typedef {Object} ImageSize - * @property {number} w - image width. - * @property {number} h - image height. - */ - -/** - * @typedef {Object} ResizeImageWidthArgs - * @property {ImageData} img - image data we want to resize. - * @property {number} toWidth - final image width we want the image to shrink to. - */ - -/** - * @typedef {Object} ResizeImageWidthResult - * @property {ImageData} img - resized image data. - * @property {ImageSize} size - resized image size. - */ - -/** - * Helper function that creates a matrix (2D array) of specific - * size (w x h) and fills it with specified value. - * @param {number} w - * @param {number} h - * @param {?(number | SeamPixelMeta)} filler - * @returns {?(number | SeamPixelMeta)[][]} - */ -const matrix = (w, h, filler) => { - return new Array(h) - .fill(null) - .map(() => { - return new Array(w).fill(filler); - }); -}; - -/** - * Calculates the energy of a pixel. - * @param {?PixelColor} left - * @param {PixelColor} middle - * @param {?PixelColor} right - * @returns {number} - */ -const getPixelEnergy = (left, middle, right) => { - // Middle pixel is the pixel we're calculating the energy for. - const [mR, mG, mB] = middle; - - // Energy from the left pixel (if it exists). - let lEnergy = 0; - if (left) { - const [lR, lG, lB] = left; - lEnergy = (lR - mR) ** 2 + (lG - mG) ** 2 + (lB - mB) ** 2; - } - - // Energy from the right pixel (if it exists). - let rEnergy = 0; - if (right) { - const [rR, rG, rB] = right; - rEnergy = (rR - mR) ** 2 + (rG - mG) ** 2 + (rB - mB) ** 2; - } - - // Resulting pixel energy. - return Math.sqrt(lEnergy + rEnergy); -}; - -/** - * Calculates the energy of each pixel of the image. - * @param {ImageData} img - * @param {ImageSize} size - * @returns {EnergyMap} - */ -const calculateEnergyMap = (img, { w, h }) => { - // Create an empty energy map where each pixel has infinitely high energy. - // We will update the energy of each pixel. - const energyMap = matrix(w, h, Infinity); - for (let y = 0; y < h; y += 1) { - for (let x = 0; x < w; x += 1) { - // Left pixel might not exist if we're on the very left edge of the image. - const left = (x - 1) >= 0 ? getPixel(img, { x: x - 1, y }) : null; - // The color of the middle pixel that we're calculating the energy for. - const middle = getPixel(img, { x, y }); - // Right pixel might not exist if we're on the very right edge of the image. - const right = (x + 1) < w ? getPixel(img, { x: x + 1, y }) : null; - energyMap[y][x] = getPixelEnergy(left, middle, right); - } - } - return energyMap; -}; - -/** - * Finds the seam (the sequence of pixels from top to bottom) that has the - * lowest resulting energy using the Dynamic Programming approach. - * @param {EnergyMap} energyMap - * @param {ImageSize} size - * @returns {Seam} - */ -const findLowEnergySeam = (energyMap, { w, h }) => { - // The 2D array of the size of w and h, where each pixel contains the - // seam metadata (pixel energy, pixel coordinate and previous pixel from - // the lowest energy seam at this point). - const seamPixelsMap = matrix(w, h, null); - - // Populate the first row of the map by just copying the energies - // from the energy map. - for (let x = 0; x < w; x += 1) { - const y = 0; - seamPixelsMap[y][x] = { - energy: energyMap[y][x], - coordinate: { x, y }, - previous: null, - }; - } - - // Populate the rest of the rows. - for (let y = 1; y < h; y += 1) { - for (let x = 0; x < w; x += 1) { - // Find the top adjacent cell with minimum energy. - // This cell would be the tail of a seam with lowest energy at this point. - // It doesn't mean that this seam (path) has lowest energy globally. - // Instead, it means that we found a path with the lowest energy that may lead - // us to the current pixel with the coordinates x and y. - let minPrevEnergy = Infinity; - let minPrevX = x; - for (let i = (x - 1); i <= (x + 1); i += 1) { - if (i >= 0 && i < w && seamPixelsMap[y - 1][i].energy < minPrevEnergy) { - minPrevEnergy = seamPixelsMap[y - 1][i].energy; - minPrevX = i; - } - } - - // Update the current cell. - seamPixelsMap[y][x] = { - energy: minPrevEnergy + energyMap[y][x], - coordinate: { x, y }, - previous: { x: minPrevX, y: y - 1 }, - }; - } - } - - // Find where the minimum energy seam ends. - // We need to find the tail of the lowest energy seam to start - // traversing it from its tail to its head (from the bottom to the top). - let lastMinCoordinate = null; - let minSeamEnergy = Infinity; - for (let x = 0; x < w; x += 1) { - const y = h - 1; - if (seamPixelsMap[y][x].energy < minSeamEnergy) { - minSeamEnergy = seamPixelsMap[y][x].energy; - lastMinCoordinate = { x, y }; - } - } - - // Find the lowest energy energy seam. - // Once we know where the tail is we may traverse and assemble the lowest - // energy seam based on the "previous" value of the seam pixel metadata. - const seam = []; - - const { x: lastMinX, y: lastMinY } = lastMinCoordinate; - - // Adding new pixel to the seam path one by one until we reach the top. - let currentSeam = seamPixelsMap[lastMinY][lastMinX]; - while (currentSeam) { - seam.push(currentSeam.coordinate); - const prevMinCoordinates = currentSeam.previous; - if (!prevMinCoordinates) { - currentSeam = null; - } else { - const { x: prevMinX, y: prevMinY } = prevMinCoordinates; - currentSeam = seamPixelsMap[prevMinY][prevMinX]; - } - } - - return seam; -}; - -/** - * Deletes the seam from the image data. - * We delete the pixel in each row and then shift the rest of the row pixels to the left. - * @param {ImageData} img - * @param {Seam} seam - * @param {ImageSize} size - */ -const deleteSeam = (img, seam, { w }) => { - seam.forEach(({ x: seamX, y: seamY }) => { - for (let x = seamX; x < (w - 1); x += 1) { - const nextPixel = getPixel(img, { x: x + 1, y: seamY }); - setPixel(img, { x, y: seamY }, nextPixel); - } - }); -}; - -/** - * Performs the content-aware image width resizing using the seam carving method. - * @param {ResizeImageWidthArgs} args - * @returns {ResizeImageWidthResult} - */ -const resizeImageWidth = ({ img, toWidth }) => { - /** - * For performance reasons we want to avoid changing the img data array size. - * Instead we'll just keep the record of the resized image width and height separately. - * @type {ImageSize} - */ - const size = { w: img.width, h: img.height }; - - // Calculating the number of pixels to remove. - const pxToRemove = img.width - toWidth; - - let energyMap = null; - let seam = null; - - // Removing the lowest energy seams one by one. - for (let i = 0; i < pxToRemove; i += 1) { - // 1. Calculate the energy map for the current version of the image. - energyMap = calculateEnergyMap(img, size); - - // 2. Find the seam with the lowest energy based on the energy map. - seam = findLowEnergySeam(energyMap, size); - - // 3. Delete the seam with the lowest energy seam from the image. - deleteSeam(img, seam, size); - - // Reduce the image width, and continue iterations. - size.w -= 1; - } - - // Returning the resized image and its final size. - // The img is actually a reference to the ImageData, so technically - // the caller of the function already has this pointer. But let's - // still return it for better code readability. - return { img, size }; -}; - -export default resizeImageWidth; diff --git a/src/algorithms/image-processing/utils/imageData.js b/src/algorithms/image-processing/utils/imageData.js deleted file mode 100644 index de397b8ead..0000000000 --- a/src/algorithms/image-processing/utils/imageData.js +++ /dev/null @@ -1,39 +0,0 @@ -/** - * @typedef {ArrayLike | Uint8ClampedArray} PixelColor - */ - -/** - * @typedef {Object} PixelCoordinate - * @property {number} x - horizontal coordinate. - * @property {number} y - vertical coordinate. - */ - -/** - * Helper function that returns the color of the pixel. - * @param {ImageData} img - * @param {PixelCoordinate} coordinate - * @returns {PixelColor} - */ -export const getPixel = (img, { x, y }) => { - // The ImageData data array is a flat 1D array. - // Thus we need to convert x and y coordinates to the linear index. - const i = y * img.width + x; - const cellsPerColor = 4; // RGBA - // For better efficiency, instead of creating a new sub-array we return - // a pointer to the part of the ImageData array. - return img.data.subarray(i * cellsPerColor, i * cellsPerColor + cellsPerColor); -}; - -/** - * Helper function that sets the color of the pixel. - * @param {ImageData} img - * @param {PixelCoordinate} coordinate - * @param {PixelColor} color - */ -export const setPixel = (img, { x, y }, color) => { - // The ImageData data array is a flat 1D array. - // Thus we need to convert x and y coordinates to the linear index. - const i = y * img.width + x; - const cellsPerColor = 4; // RGBA - img.data.set(color, i * cellsPerColor); -}; diff --git a/src/algorithms/linked-list/reverse-traversal/README.md b/src/algorithms/linked-list/reverse-traversal/README.md deleted file mode 100644 index 7e3f3cd6bb..0000000000 --- a/src/algorithms/linked-list/reverse-traversal/README.md +++ /dev/null @@ -1,23 +0,0 @@ -# Reversed Linked List Traversal - -_Read this in other languages:_ -[_中文_](README.zh-CN.md), -[_Português_](README.pt-BR.md) - -The task is to traverse the given linked list in reversed order. - -For example for the following linked list: - -![](https://upload.wikimedia.org/wikipedia/commons/6/6d/Singly-linked-list.svg) - -The order of traversal should be: - -```text -37 → 99 → 12 -``` - -The time complexity is `O(n)` because we visit every node only once. - -## Reference - -- [Wikipedia](https://en.wikipedia.org/wiki/Linked_list) diff --git a/src/algorithms/linked-list/reverse-traversal/README.pt-BR.md b/src/algorithms/linked-list/reverse-traversal/README.pt-BR.md deleted file mode 100644 index b2761ad720..0000000000 --- a/src/algorithms/linked-list/reverse-traversal/README.pt-BR.md +++ /dev/null @@ -1,23 +0,0 @@ -# Travessia de Lista Encadeada Reversa - -_Leia isso em outros idiomas:_ -[_中文_](README.zh-CN.md), -[_English_](README.md) - -A tarefa é percorrer a lista encadeada fornecida em ordem inversa. - -Por exemplo, para a seguinte lista vinculada: - -![](https://upload.wikimedia.org/wikipedia/commons/6/6d/Singly-linked-list.svg) - -A ordem de travessia deve ser: - -```texto -37 → 99 → 12 -``` - -A complexidade de tempo é `O(n)` porque visitamos cada nó apenas uma vez. - -## Referência - -- [Wikipedia](https://en.wikipedia.org/wiki/Linked_list) diff --git a/src/algorithms/linked-list/reverse-traversal/README.zh-CN.md b/src/algorithms/linked-list/reverse-traversal/README.zh-CN.md deleted file mode 100644 index cf0217a5b1..0000000000 --- a/src/algorithms/linked-list/reverse-traversal/README.zh-CN.md +++ /dev/null @@ -1,19 +0,0 @@ -# 链表倒序遍历 - -我们的任务是倒序遍历给定的链表 - -比如下面的链表 - -![](https://upload.wikimedia.org/wikipedia/commons/6/6d/Singly-linked-list.svg) - -遍历的顺序应该是 - -```text -37 → 99 → 12 -``` - -因为我们每个节点只访问一次,时间复杂度应该是`O(n)` - -## 参考 - -- [Wikipedia](https://zh.wikipedia.org/wiki/%E9%93%BE%E8%A1%A8) diff --git a/src/algorithms/linked-list/reverse-traversal/__test__/reverseTraversal.test.js b/src/algorithms/linked-list/reverse-traversal/__test__/reverseTraversal.test.js deleted file mode 100644 index 2fb5af9ae7..0000000000 --- a/src/algorithms/linked-list/reverse-traversal/__test__/reverseTraversal.test.js +++ /dev/null @@ -1,35 +0,0 @@ -import LinkedList from '../../../../data-structures/linked-list/LinkedList'; -import reverseTraversal from '../reverseTraversal'; - -describe('reverseTraversal', () => { - it('should traverse linked list in reverse order', () => { - const linkedList = new LinkedList(); - - linkedList - .append(1) - .append(2) - .append(3); - - const traversedNodeValues = []; - const traversalCallback = (nodeValue) => { - traversedNodeValues.push(nodeValue); - }; - - reverseTraversal(linkedList, traversalCallback); - - expect(traversedNodeValues).toEqual([3, 2, 1]); - }); -}); - -// it('should reverse traversal the linked list with callback', () => { -// const linkedList = new LinkedList(); -// -// linkedList -// .append(1) -// .append(2) -// .append(3); -// -// expect(linkedList.toString()).toBe('1,2,3'); -// expect(linkedList.reverseTraversal(linkedList.head, value => value * 2)).toEqual([6, 4, 2]); -// expect(() => linkedList.reverseTraversal(linkedList.head)).toThrow(); -// }); diff --git a/src/algorithms/linked-list/reverse-traversal/reverseTraversal.js b/src/algorithms/linked-list/reverse-traversal/reverseTraversal.js deleted file mode 100644 index d39260aab2..0000000000 --- a/src/algorithms/linked-list/reverse-traversal/reverseTraversal.js +++ /dev/null @@ -1,24 +0,0 @@ -/** - * Traversal callback function. - * @callback traversalCallback - * @param {*} nodeValue - */ - -/** - * @param {LinkedListNode} node - * @param {traversalCallback} callback - */ -function reverseTraversalRecursive(node, callback) { - if (node) { - reverseTraversalRecursive(node.next, callback); - callback(node.value); - } -} - -/** - * @param {LinkedList} linkedList - * @param {traversalCallback} callback - */ -export default function reverseTraversal(linkedList, callback) { - reverseTraversalRecursive(linkedList.head, callback); -} diff --git a/src/algorithms/linked-list/traversal/README.md b/src/algorithms/linked-list/traversal/README.md deleted file mode 100644 index 09b177494c..0000000000 --- a/src/algorithms/linked-list/traversal/README.md +++ /dev/null @@ -1,24 +0,0 @@ -# Linked List Traversal - -_Read this in other languages:_ -[_Русский_](README.ru-RU.md), -[_中文_](README.zh-CN.md), -[_Português_](README.pt-BR.md) - -The task is to traverse the given linked list in straight order. - -For example for the following linked list: - -![Singly linked list](https://upload.wikimedia.org/wikipedia/commons/6/6d/Singly-linked-list.svg) - -The order of traversal should be: - -```text -12 → 99 → 37 -``` - -The time complexity is `O(n)` because we visit every node only once. - -## Reference - -- [Wikipedia](https://en.wikipedia.org/wiki/Linked_list) diff --git a/src/algorithms/linked-list/traversal/README.pt-BR.md b/src/algorithms/linked-list/traversal/README.pt-BR.md deleted file mode 100644 index 0fae9ed01a..0000000000 --- a/src/algorithms/linked-list/traversal/README.pt-BR.md +++ /dev/null @@ -1,24 +0,0 @@ -# Travessia de Lista Encadeada - -_Leia isso em outros idiomas:_ -[_Русский_](README.ru-RU.md), -[_中文_](README.zh-CN.md), -[_English_](README.md) - -A tarefa é percorrer a lista encadeada fornecida em ordem direta. - -Por exemplo, para a seguinte lista vinculada: - -![Singly linked list](https://upload.wikimedia.org/wikipedia/commons/6/6d/Singly-linked-list.svg) - -A ordem de travessia deve ser: - -```texto -12 → 99 → 37 -``` - -A complexidade de tempo é `O(n)` porque visitamos cada nó apenas uma vez. - -## Referência - -- [Wikipedia](https://en.wikipedia.org/wiki/Linked_list) diff --git a/src/algorithms/linked-list/traversal/README.ru-RU.md b/src/algorithms/linked-list/traversal/README.ru-RU.md deleted file mode 100644 index fa3cfb2fb1..0000000000 --- a/src/algorithms/linked-list/traversal/README.ru-RU.md +++ /dev/null @@ -1,19 +0,0 @@ -# Обход связного списка - -Задача состоит в том, чтобы обойти связный список в прямом порядке. - -Например, для следующего связного списка: - -![Singly linked list](https://upload.wikimedia.org/wikipedia/commons/6/6d/Singly-linked-list.svg) - -Порядок обхода будет такой: - -```text -12 → 99 → 37 -``` - -Временная сложность - `O(n)`, потому что мы посещаем каждый узел только один раз. - -## Ссылки - -- [Wikipedia](https://ru.wikipedia.org/wiki/%D0%A1%D0%B2%D1%8F%D0%B7%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA) diff --git a/src/algorithms/linked-list/traversal/README.zh-CN.md b/src/algorithms/linked-list/traversal/README.zh-CN.md deleted file mode 100644 index 19a01502b5..0000000000 --- a/src/algorithms/linked-list/traversal/README.zh-CN.md +++ /dev/null @@ -1,19 +0,0 @@ -# 链表遍历 - -我们的任务是顺序遍历给定的链表 - -比如下面的链表 - -![Singly linked list](https://upload.wikimedia.org/wikipedia/commons/6/6d/Singly-linked-list.svg) - -遍历的顺序应该是 - -```text -12 → 99 → 37 -``` - -因为我们每个节点只访问一次,时间复杂度应该是`O(n)` - -## 参考 - -- [Wikipedia](https://zh.wikipedia.org/wiki/%E9%93%BE%E8%A1%A8) \ No newline at end of file diff --git a/src/algorithms/linked-list/traversal/__test__/traversal.test.js b/src/algorithms/linked-list/traversal/__test__/traversal.test.js deleted file mode 100644 index 77ce79b69f..0000000000 --- a/src/algorithms/linked-list/traversal/__test__/traversal.test.js +++ /dev/null @@ -1,22 +0,0 @@ -import LinkedList from '../../../../data-structures/linked-list/LinkedList'; -import traversal from '../traversal'; - -describe('traversal', () => { - it('should traverse linked list', () => { - const linkedList = new LinkedList(); - - linkedList - .append(1) - .append(2) - .append(3); - - const traversedNodeValues = []; - const traversalCallback = (nodeValue) => { - traversedNodeValues.push(nodeValue); - }; - - traversal(linkedList, traversalCallback); - - expect(traversedNodeValues).toEqual([1, 2, 3]); - }); -}); diff --git a/src/algorithms/linked-list/traversal/traversal.js b/src/algorithms/linked-list/traversal/traversal.js deleted file mode 100644 index cfbfe4fb59..0000000000 --- a/src/algorithms/linked-list/traversal/traversal.js +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Traversal callback function. - * @callback traversalCallback - * @param {*} nodeValue - */ - -/** - * @param {LinkedList} linkedList - * @param {traversalCallback} callback - */ -export default function traversal(linkedList, callback) { - let currentNode = linkedList.head; - - while (currentNode) { - callback(currentNode.value); - currentNode = currentNode.next; - } -} diff --git a/src/algorithms/math/binary-floating-point/README.md b/src/algorithms/math/binary-floating-point/README.md deleted file mode 100644 index d1ae72731e..0000000000 --- a/src/algorithms/math/binary-floating-point/README.md +++ /dev/null @@ -1,103 +0,0 @@ -# Binary representation of floating-point numbers - -Have you ever wondered how computers store the floating-point numbers like `3.1416` (𝝿) or `9.109 × 10⁻³¹` (the mass of the electron in kg) in the memory which is limited by a finite number of ones and zeroes (aka bits)? - -It seems pretty straightforward for integers (i.e. `17`). Let's say we have 16 bits (2 bytes) to store the number. In 16 bits we may store the integers in a range of `[0, 65535]`: - -```text -(0000000000000000)₂ = (0)₁₀ - -(0000000000010001)₂ = - (1 × 2⁴) + - (0 × 2³) + - (0 × 2²) + - (0 × 2¹) + - (1 × 2⁰) = (17)₁₀ - -(1111111111111111)₂ = - (1 × 2¹⁵) + - (1 × 2¹⁴) + - (1 × 2¹³) + - (1 × 2¹²) + - (1 × 2¹¹) + - (1 × 2¹⁰) + - (1 × 2⁹) + - (1 × 2⁸) + - (1 × 2⁷) + - (1 × 2⁶) + - (1 × 2⁵) + - (1 × 2⁴) + - (1 × 2³) + - (1 × 2²) + - (1 × 2¹) + - (1 × 2⁰) = (65535)₁₀ -``` - -If we need a signed integer we may use [two's complement](https://en.wikipedia.org/wiki/Two%27s_complement) and shift the range of `[0, 65535]` towards the negative numbers. In this case, our 16 bits would represent the numbers in a range of `[-32768, +32767]`. - -As you might have noticed, this approach won't allow you to represent the numbers like `-27.15625` (numbers after the decimal point are just being ignored). - -We're not the first ones who have noticed this issue though. Around ≈36 years ago some smart folks overcame this limitation by introducing the [IEEE 754](https://en.wikipedia.org/wiki/IEEE_754) standard for floating-point arithmetic. - -The IEEE 754 standard describes the way (the framework) of using those 16 bits (or 32, or 64 bits) to store the numbers of wider range, including the small floating numbers (smaller than 1 and closer to 0). - -To get the idea behind the standard we might recall the [scientific notation](https://en.wikipedia.org/wiki/Scientific_notation) - a way of expressing numbers that are too large or too small (usually would result in a long string of digits) to be conveniently written in decimal form. - -![Scientific number notation](images/03-scientific-notation.png) - -As you may see from the image, the number representation might be split into three parts: - -- **sign** -- **fraction (aka significand)** - the valuable digits (the meaning, the payload) of the number -- **exponent** - controls how far and in which direction to move the decimal point in the fraction - -The **base** part we may omit by just agreeing on what it will be equal to. In our case, we'll be using `2` as a base. - -Instead of using all 16 bits (or 32 bits, or 64 bits) to store the fraction of the number, we may share the bits and store a sign, exponent, and fraction at the same time. Depending on the number of bits that we're going to use to store the number we end up with the following splits: - -| Floating-point format | Total bits | Sign bits | Exponent bits | Fraction bits | Base | -| :-------------------- | :--------: | :-------: | :-----------: | :--------------: | :--: | -| [Half-precision](https://en.wikipedia.org/wiki/Half-precision_floating-point_format) | 16 | 1 | 5 | 10 | 2 | -| [Single-precision](https://en.wikipedia.org/wiki/Single-precision_floating-point_format) | 32 | 1 | 8 | 23 | 2 | -| [Double-precision](https://en.wikipedia.org/wiki/Double-precision_floating-point_format) | 64 | 1 | 11 | 52 | 2 | - -With this approach, the number of bits for the fraction has been reduced (i.e. for the 16-bits number it was reduced from 16 bits to 10 bits). It means that the fraction might take a narrower range of values now (losing some precision). However, since we also have an exponent part, it will actually increase the ultimate number range and also allow us to describe the numbers between 0 and 1 (if the exponent is negative). - -> For example, a signed 32-bit integer variable has a maximum value of 2³¹ − 1 = 2,147,483,647, whereas an IEEE 754 32-bit base-2 floating-point variable has a maximum value of ≈ 3.4028235 × 10³⁸. - -To make it possible to have a negative exponent, the IEEE 754 standard uses the [biased exponent](https://en.wikipedia.org/wiki/Exponent_bias). The idea is simple - subtract the bias from the exponent value to make it negative. For example, if the exponent has 5 bits, it might take the values from the range of `[0, 31]` (all values are positive here). But if we subtract the value of `15` from it, the range will be `[-15, 16]`. The number `15` is called bias, and it is being calculated by the following formula: - -``` -exponent_bias = 2 ^ (k−1) − 1 - -k - number of exponent bits -``` - -I've tried to describe the logic behind the converting of floating-point numbers from a binary format back to the decimal format on the image below. Hopefully, it will give you a better understanding of how the IEEE 754 standard works. The 16-bits number is being used here for simplicity, but the same approach works for 32-bits and 64-bits numbers as well. - -![Half-precision floating point number format explained in one picture](images/02-half-precision-floating-point-number-explained.png) - -> Checkout the [interactive version of this diagram](https://trekhleb.dev/blog/2021/binary-floating-point/) to play around with setting bits on and off, and seeing how it would influence the final result - -Here is the number ranges that different floating-point formats support: - -| Floating-point format | Exp min | Exp max | Range | Min positive | -| :-------------------- | :------ | :------ | :--------------- | :----------- | -| Half-precision | −14 | +15 | ±65,504 | 6.10 × 10⁻⁵ | -| Single-precision | −126 | +127 | ±3.4028235 × 10³⁸| 1.18 × 10⁻³⁸ | - -Be aware that this is by no means a complete and sufficient overview of the IEEE 754 standard. It is rather a simplified and basic overview. Several corner cases were omitted in the examples above for simplicity of presentation (i.e. `-0`, `-∞`, `+∞` and `NaN` (not a number) values) - -## Code examples - -- See the [bitsToFloat.js](bitsToFloat.js) for the example of how to convert array of bits to the floating point number (the example is a bit artificial but still it gives the overview of how the conversion is going on) -- See the [floatAsBinaryString.js](floatAsBinaryString.js) for the example of how to see the actual binary representation of the floating-point number in JavaScript - -## References - -You might also want to check out the following resources to get a deeper understanding of the binary representation of floating-point numbers: - -- [Interactive version of this article](https://trekhleb.dev/blog/2021/binary-floating-point/) (allows setting the bits manually and seeing the resulting floating number) -- [Here is what you need to know about JavaScript’s Number type](https://indepth.dev/posts/1139/here-is-what-you-need-to-know-about-javascripts-number-type) -- [Float Exposed](https://float.exposed/) -- [IEEE754 Visualization](https://bartaz.github.io/ieee754-visualization/) diff --git a/src/algorithms/math/binary-floating-point/__tests__/bitsToFloat.test.js b/src/algorithms/math/binary-floating-point/__tests__/bitsToFloat.test.js deleted file mode 100644 index 53afe691a2..0000000000 --- a/src/algorithms/math/binary-floating-point/__tests__/bitsToFloat.test.js +++ /dev/null @@ -1,32 +0,0 @@ -import { testCases16Bits, testCases32Bits, testCases64Bits } from '../testCases'; -import { bitsToFloat16, bitsToFloat32, bitsToFloat64 } from '../bitsToFloat'; - -describe('bitsToFloat16', () => { - it('should convert floating point binary bits to floating point decimal number', () => { - for (let testCaseIndex = 0; testCaseIndex < testCases16Bits.length; testCaseIndex += 1) { - const [decimal, binary] = testCases16Bits[testCaseIndex]; - const bits = binary.split('').map((bitString) => parseInt(bitString, 10)); - expect(bitsToFloat16(bits)).toBeCloseTo(decimal, 4); - } - }); -}); - -describe('bitsToFloat32', () => { - it('should convert floating point binary bits to floating point decimal number', () => { - for (let testCaseIndex = 0; testCaseIndex < testCases32Bits.length; testCaseIndex += 1) { - const [decimal, binary] = testCases32Bits[testCaseIndex]; - const bits = binary.split('').map((bitString) => parseInt(bitString, 10)); - expect(bitsToFloat32(bits)).toBeCloseTo(decimal, 7); - } - }); -}); - -describe('bitsToFloat64', () => { - it('should convert floating point binary bits to floating point decimal number', () => { - for (let testCaseIndex = 0; testCaseIndex < testCases64Bits.length; testCaseIndex += 1) { - const [decimal, binary] = testCases64Bits[testCaseIndex]; - const bits = binary.split('').map((bitString) => parseInt(bitString, 10)); - expect(bitsToFloat64(bits)).toBeCloseTo(decimal, 14); - } - }); -}); diff --git a/src/algorithms/math/binary-floating-point/__tests__/floatAsBinaryString.test.js b/src/algorithms/math/binary-floating-point/__tests__/floatAsBinaryString.test.js deleted file mode 100644 index efb8a2ba5e..0000000000 --- a/src/algorithms/math/binary-floating-point/__tests__/floatAsBinaryString.test.js +++ /dev/null @@ -1,20 +0,0 @@ -import { floatAs32BinaryString, floatAs64BinaryString } from '../floatAsBinaryString'; -import { testCases32Bits, testCases64Bits } from '../testCases'; - -describe('floatAs32Binary', () => { - it('should create a binary representation of the floating numbers', () => { - for (let testCaseIndex = 0; testCaseIndex < testCases32Bits.length; testCaseIndex += 1) { - const [decimal, binary] = testCases32Bits[testCaseIndex]; - expect(floatAs32BinaryString(decimal)).toBe(binary); - } - }); -}); - -describe('floatAs64Binary', () => { - it('should create a binary representation of the floating numbers', () => { - for (let testCaseIndex = 0; testCaseIndex < testCases64Bits.length; testCaseIndex += 1) { - const [decimal, binary] = testCases64Bits[testCaseIndex]; - expect(floatAs64BinaryString(decimal)).toBe(binary); - } - }); -}); diff --git a/src/algorithms/math/binary-floating-point/bitsToFloat.js b/src/algorithms/math/binary-floating-point/bitsToFloat.js deleted file mode 100644 index 6d1ef0d851..0000000000 --- a/src/algorithms/math/binary-floating-point/bitsToFloat.js +++ /dev/null @@ -1,119 +0,0 @@ -/** - * Sequence of 0s and 1s. - * @typedef {number[]} Bits - */ - -/** - * @typedef {{ - * signBitsCount: number, - * exponentBitsCount: number, - * fractionBitsCount: number, - * }} PrecisionConfig - */ - -/** - * @typedef {{ - * half: PrecisionConfig, - * single: PrecisionConfig, - * double: PrecisionConfig - * }} PrecisionConfigs - */ - -/** - * ┌───────────────── sign bit - * │ ┌───────────── exponent bits - * │ │ ┌───── fraction bits - * │ │ │ - * X XXXXX XXXXXXXXXX - * - * @type {PrecisionConfigs} - */ -const precisionConfigs = { - // @see: https://en.wikipedia.org/wiki/Half-precision_floating-point_format - half: { - signBitsCount: 1, - exponentBitsCount: 5, - fractionBitsCount: 10, - }, - // @see: https://en.wikipedia.org/wiki/Single-precision_floating-point_format - single: { - signBitsCount: 1, - exponentBitsCount: 8, - fractionBitsCount: 23, - }, - // @see: https://en.wikipedia.org/wiki/Double-precision_floating-point_format - double: { - signBitsCount: 1, - exponentBitsCount: 11, - fractionBitsCount: 52, - }, -}; - -/** - * Converts the binary representation of the floating point number to decimal float number. - * - * @param {Bits} bits - sequence of bits that represents the floating point number. - * @param {PrecisionConfig} precisionConfig - half/single/double precision config. - * @return {number} - floating point number decoded from its binary representation. - */ -function bitsToFloat(bits, precisionConfig) { - const { signBitsCount, exponentBitsCount } = precisionConfig; - - // Figuring out the sign. - const sign = (-1) ** bits[0]; // -1^1 = -1, -1^0 = 1 - - // Calculating the exponent value. - const exponentBias = 2 ** (exponentBitsCount - 1) - 1; - const exponentBits = bits.slice(signBitsCount, signBitsCount + exponentBitsCount); - const exponentUnbiased = exponentBits.reduce( - (exponentSoFar, currentBit, bitIndex) => { - const bitPowerOfTwo = 2 ** (exponentBitsCount - bitIndex - 1); - return exponentSoFar + currentBit * bitPowerOfTwo; - }, - 0, - ); - const exponent = exponentUnbiased - exponentBias; - - // Calculating the fraction value. - const fractionBits = bits.slice(signBitsCount + exponentBitsCount); - const fraction = fractionBits.reduce( - (fractionSoFar, currentBit, bitIndex) => { - const bitPowerOfTwo = 2 ** -(bitIndex + 1); - return fractionSoFar + currentBit * bitPowerOfTwo; - }, - 0, - ); - - // Putting all parts together to calculate the final number. - return sign * (2 ** exponent) * (1 + fraction); -} - -/** - * Converts the 16-bit binary representation of the floating point number to decimal float number. - * - * @param {Bits} bits - sequence of bits that represents the floating point number. - * @return {number} - floating point number decoded from its binary representation. - */ -export function bitsToFloat16(bits) { - return bitsToFloat(bits, precisionConfigs.half); -} - -/** - * Converts the 32-bit binary representation of the floating point number to decimal float number. - * - * @param {Bits} bits - sequence of bits that represents the floating point number. - * @return {number} - floating point number decoded from its binary representation. - */ -export function bitsToFloat32(bits) { - return bitsToFloat(bits, precisionConfigs.single); -} - -/** - * Converts the 64-bit binary representation of the floating point number to decimal float number. - * - * @param {Bits} bits - sequence of bits that represents the floating point number. - * @return {number} - floating point number decoded from its binary representation. - */ -export function bitsToFloat64(bits) { - return bitsToFloat(bits, precisionConfigs.double); -} diff --git a/src/algorithms/math/binary-floating-point/floatAsBinaryString.js b/src/algorithms/math/binary-floating-point/floatAsBinaryString.js deleted file mode 100644 index aa907ac049..0000000000 --- a/src/algorithms/math/binary-floating-point/floatAsBinaryString.js +++ /dev/null @@ -1,61 +0,0 @@ -// @see: https://en.wikipedia.org/wiki/Single-precision_floating-point_format -const singlePrecisionBytesLength = 4; // 32 bits - -// @see: https://en.wikipedia.org/wiki/Double-precision_floating-point_format -const doublePrecisionBytesLength = 8; // 64 bits - -const bitsInByte = 8; - -/** - * Converts the float number into its IEEE 754 binary representation. - * @see: https://en.wikipedia.org/wiki/IEEE_754 - * - * @param {number} floatNumber - float number in decimal format. - * @param {number} byteLength - number of bytes to use to store the float number. - * @return {string} - binary string representation of the float number. - */ -function floatAsBinaryString(floatNumber, byteLength) { - let numberAsBinaryString = ''; - - const arrayBuffer = new ArrayBuffer(byteLength); - const dataView = new DataView(arrayBuffer); - - const byteOffset = 0; - const littleEndian = false; - - if (byteLength === singlePrecisionBytesLength) { - dataView.setFloat32(byteOffset, floatNumber, littleEndian); - } else { - dataView.setFloat64(byteOffset, floatNumber, littleEndian); - } - - for (let byteIndex = 0; byteIndex < byteLength; byteIndex += 1) { - let bits = dataView.getUint8(byteIndex).toString(2); - if (bits.length < bitsInByte) { - bits = new Array(bitsInByte - bits.length).fill('0').join('') + bits; - } - numberAsBinaryString += bits; - } - - return numberAsBinaryString; -} - -/** - * Converts the float number into its IEEE 754 64-bits binary representation. - * - * @param {number} floatNumber - float number in decimal format. - * @return {string} - 64 bits binary string representation of the float number. - */ -export function floatAs64BinaryString(floatNumber) { - return floatAsBinaryString(floatNumber, doublePrecisionBytesLength); -} - -/** - * Converts the float number into its IEEE 754 32-bits binary representation. - * - * @param {number} floatNumber - float number in decimal format. - * @return {string} - 32 bits binary string representation of the float number. - */ -export function floatAs32BinaryString(floatNumber) { - return floatAsBinaryString(floatNumber, singlePrecisionBytesLength); -} diff --git a/src/algorithms/math/binary-floating-point/images/02-half-precision-floating-point-number-explained.png b/src/algorithms/math/binary-floating-point/images/02-half-precision-floating-point-number-explained.png deleted file mode 100644 index 1bc0a5b83596b9479525362d67af1dfb5168ef70..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 352613 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

&eX$vFDz3>({GKR?|8jeJ~nrYRr-g^<+j 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
!<{-7gQua#Wkb~y_nd!3&8PO!6gT$2r&M7; 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�umf(!rc@!gG^JXQ}6#U{oInvxH6DG=^nUX15 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�>M9;HiE~$9Er~yGc(j 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%0DMYGVLC&V9`*0XxFZrQ0C{rr63J7yZyC>bupF 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 c&DU>o^DHIT Voir [getBit.js](getBit.js) pour plus de détails. - -#### Mettre un bit à 1(_set_) - -Cette méthode met un bit à `1` en fonction d'un rang (`bitPosition`), -créant ainsi une valeur qui ressemble à `00100`. -Ensuite, nous effectuons l'opération `OU` qui met un bit spécifique -en `1` sans affecter les autres bits du nombre. - -> Voir [setBit.js](setBit.js) pour plus de détails. - -#### Mettre un bit à 0 (_clear_) - -Cette méthode met un bit à `1` en fonction d'un rang (`bitPosition`), -créant ainsi une valeur qui ressemble à `00100`. -Puis on inverse ce masque de bits pour obtenir un nombre ressemblant à `11011`. -Enfin, l'opération `AND` est appliquée au nombre et au masque. -Cette opération annule le bit. - -> Voir [clearBit.js](clearBit.js) pour plus de détails. - -#### Mettre à jour un Bit (_update_) - -Cette méthode est une combinaison de l'"annulation de bit" -et du "forçage de bit". - -> Voir [updateBit.js](updateBit.js) pour plus de détails. - -#### Vérifier si un nombre est pair (_isEven_) - -Cette méthode détermine si un nombre donné est pair. -Elle s'appuie sur le fait que les nombres impairs ont leur dernier -bit droit à `1`. - -```text -Nombre: 5 = 0b0101 -isEven: false - -Nombre: 4 = 0b0100 -isEven: true -``` - -> Voir [isEven.js](isEven.js) pour plus de détails. - -#### Vérifier si un nombre est positif (_isPositive_) - -Cette méthode détermine un le nombre donné est positif. -Elle s'appuie sur le fait que tous les nombres positifs -ont leur bit le plus à gauche à `0`. -Cependant, si le nombre fourni est zéro -ou zéro négatif, il doit toujours renvoyer `false`. - -```text -Nombre: 1 = 0b0001 -isPositive: true - -Nombre: -1 = -0b0001 -isPositive: false -``` - -> Voir [isPositive.js](isPositive.js) pour plus de détails. - -#### Multiplier par deux - -Cette méthode décale un nombre donné d'un bit vers la gauche. -Ainsi, toutes les composantes du nombre binaire (en puissances de deux) sont -multipliées par deux et donc le nombre lui-même est -multiplié par deux. - -``` -Avant le décalage -Nombre: 0b0101 = 5 -Puissances de deux: 0 + 2^2 + 0 + 2^0 - -Après le décalage -Nombre: 0b1010 = 10 -Puissances de deux: 2^3 + 0 + 2^1 + 0 -``` - -> Voir [multiplyByTwo.js](multiplyByTwo.js) pour plus de détails. - -#### Diviser par deux - -Cette méthode décale un nombre donné d'un bit vers la droite. -Ainsi, toutes les composantes du nombre binaire (en puissances de deux) sont -divisées par deux et donc le nombre lui-même est -divisé par deux, sans reste. - -``` -Avant le décalage -Nombre: 0b0101 = 5 -Puissances de deux: 0 + 2^2 + 0 + 2^0 - -Après le décalage -Nombre: 0b0010 = 2 -Puissances de deux: 0 + 0 + 2^1 + 0 -``` - -> Voir [divideByTwo.js](divideByTwo.js) pour plus de détails. - -#### Inverser le signe (_Switch Sign_) - -Cette méthode rend positifs les nombres négatifs, et vice-versa. -Pour ce faire, elle s'appuie sur l'approche "Complément à deux", -qui inverse tous les bits du nombre et y ajoute 1. - -``` -1101 -3 -1110 -2 -1111 -1 -0000 0 -0001 1 -0010 2 -0011 3 -``` - -> Voir [switchSign.js](switchSign.js) pour plus de détails. - -#### Multiplier deux nombres signés - -Cette méthode multiplie deux nombres entiers signés -à l'aide d'opérateurs bit à bit. -Cette méthode est basée sur les faits suivants: - -```text -a * b peut être écrit sous les formes suivantes: - 0 si a est zero ou b est zero ou les deux sont zero - 2a * (b/2) si b est pair - 2a * (b - 1)/2 + a si b est impair et positif - 2a * (b + 1)/2 - a si b est impair et negatif -``` - -L'avantage de cette approche est qu'à chaque étape de la récursion -l'un des opérandes est réduit à la moitié de sa valeur d'origine. -Par conséquent, la complexité d'exécution est `O(log(b))` -où `b` est l'opérande qui se réduit de moitié à chaque récursion. - -> Voir [multiply.js](multiply.js) pour plus de détails. - -#### Multiplier deux nombres positifs - -Cette méthode multiplie deux nombres entiers à l'aide d'opérateurs bit à bit. -Cette méthode s'appuie sur le fait que "Chaque nombre peut être lu -comme une somme de puissances de 2". - -L'idée principale de la multiplication bit à bit -est que chaque nombre peut être divisé en somme des puissances de deux: - -Ainsi - -```text -19 = 2^4 + 2^1 + 2^0 -``` - -Donc multiplier `x` par `19` est equivalent à : - -```text -x * 19 = x * 2^4 + x * 2^1 + x * 2^0 -``` - -Nous devons maintenant nous rappeler que `x * 2 ^ 4` équivaut -à déplacer`x` vers la gauche par `4` bits (`x << 4`). - -> Voir [multiplyUnsigned.js](multiplyUnsigned.js) pour plus de détails. - -#### Compter les bits à 1 - -This method counts the number of set bits in a number using bitwise operators. -The main idea is that we shift the number right by one bit at a time and check -the result of `&` operation that is `1` if bit is set and `0` otherwise. - -Cette méthode décompte les bits à `1` d'un nombre -à l'aide d'opérateurs bit à bit. -L'idée principale est de décaler le nombre vers la droite, un bit à la fois, -et de vérifier le résultat de l'opération `&` : -`1` si le bit est défini et `0` dans le cas contraire. - -```text -Nombre: 5 = 0b0101 -Décompte des bits à 1 = 2 -``` - -> Voir [countSetBits.js](countSetBits.js) pour plus de détails. - -#### Compter les bits nécessaire pour remplacer un nombre - -This methods outputs the number of bits required to convert one number to another. -This makes use of property that when numbers are `XOR`-ed the result will be number -of different bits. - -Cette méthode retourne le nombre de bits requis -pour convertir un nombre en un autre. -Elle repose sur la propriété suivante: -lorsque les nombres sont évalués via `XOR`, le résultat est le nombre -de bits différents entre les deux. - -``` -5 = 0b0101 -1 = 0b0001 -Nombre de bits pour le remplacement: 1 -``` - -> Voir [bitsDiff.js](bitsDiff.js) pour plus de détails. - -#### Calculer les bits significatifs d'un nombre - -Pour connaître les bits significatifs d'un nombre, -on peut décaler `1` d'un bit à gauche plusieurs fois d'affilée -jusqu'à ce que ce nombre soit plus grand que le nombre à comparer. - -``` -5 = 0b0101 -Décompte des bits significatifs: 3 -On décale 1 quatre fois pour dépasser 5. -``` - -> Voir [bitLength.js](bitLength.js) pour plus de détails. - -#### Vérifier si un nombre est une puissance de 2 - -Cette méthode vérifie si un nombre donné est une puissance de deux. -Elle s'appuie sur la propriété suivante. -Disons que `powerNumber` est une puissance de deux (c'est-à-dire 2, 4, 8, 16 etc.). -Si nous faisons l'opération `&` entre `powerNumber` et `powerNumber - 1`, -elle retournera`0` (dans le cas où le nombre est une puissance de deux). - -``` -Nombre: 4 = 0b0100 -Nombre: 3 = (4 - 1) = 0b0011 -4 & 3 = 0b0100 & 0b0011 = 0b0000 <-- Égal à zéro, car c'est une puissance de 2. - -Nombre: 10 = 0b01010 -Nombre: 9 = (10 - 1) = 0b01001 -10 & 9 = 0b01010 & 0b01001 = 0b01000 <-- Différent de 0, donc n'est pas une puissance de 2. -``` - -> Voir [isPowerOfTwo.js](isPowerOfTwo.js) pour plus de détails. - -#### Additionneur complet - -Cette méthode ajoute deux nombres entiers à l'aide d'opérateurs bit à bit. - -Elle implémente un [additionneur](https://fr.wikipedia.org/wiki/Additionneur) -simulant un circuit électronique logique, -pour additionner deux entiers de 32 bits, -sous la forme « complément à deux ». -Elle utilise la logique booléenne pour couvrir tous les cas possibles -d'ajout de deux bits donnés: -avec et sans retenue de l'ajout de l'étape précédente la moins significative. - -Légende: - -- `A`: Nombre `A` -- `B`: Nombre `B` -- `ai`: ième bit du nombre `A` -- `bi`: ième bit du nombre `B` -- `carryIn`: un bit retenu de la précédente étape la moins significative -- `carryOut`: un bit retenu pour la prochaine étape la plus significative -- `bitSum`: La somme de `ai`, `bi`, et `carryIn` -- `resultBin`: Le résultat complet de l'ajout de l'étape actuelle avec toutes les étapes moins significatives (en binaire) -- `resultDec`: Le résultat complet de l'ajout de l'étape actuelle avec toutes les étapes moins significatives (en decimal) - -``` -A = 3: 011 -B = 6: 110 -┌──────┬────┬────┬─────────┬──────────┬─────────┬───────────┬───────────┐ -│ bit │ ai │ bi │ carryIn │ carryOut │ bitSum │ resultBin │ resultDec │ -├──────┼────┼────┼─────────┼──────────┼─────────┼───────────┼───────────┤ -│ 0 │ 1 │ 0 │ 0 │ 0 │ 1 │ 1 │ 1 │ -│ 1 │ 1 │ 1 │ 0 │ 1 │ 0 │ 01 │ 1 │ -│ 2 │ 0 │ 1 │ 1 │ 1 │ 0 │ 001 │ 1 │ -│ 3 │ 0 │ 0 │ 1 │ 0 │ 1 │ 1001 │ 9 │ -└──────┴────┴────┴─────────┴──────────┴─────────┴───────────┴───────────┘ -``` - -> Voir [fullAdder.js](fullAdder.js) pour plus de détails. -> Voir [Full Adder on YouTube](https://www.youtube.com/watch?v=wvJc9CZcvBc&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8). - -## Références - -- [Bit Manipulation on YouTube](https://www.youtube.com/watch?v=NLKQEOgBAnw&t=0s&index=28&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) -- [Negative Numbers in binary on YouTube](https://www.youtube.com/watch?v=4qH4unVtJkE&t=0s&index=30&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) -- [Bit Hacks on stanford.edu](https://graphics.stanford.edu/~seander/bithacks.html) diff --git a/src/algorithms/math/bits/README.md b/src/algorithms/math/bits/README.md deleted file mode 100644 index 1218094287..0000000000 --- a/src/algorithms/math/bits/README.md +++ /dev/null @@ -1,274 +0,0 @@ -# Bit Manipulation - -_Read this in other languages:_ -[français](README.fr-FR.md), -[简体中文](README.zh-CN.md). - -#### Get Bit - -This method shifts the relevant bit to the zeroth position. -Then we perform `AND` operation with one which has bit -pattern like `0001`. This clears all bits from the original -number except the relevant one. If the relevant bit is one, -the result is `1`, otherwise the result is `0`. - -> See [getBit.js](getBit.js) for further details. - -#### Set Bit - -This method shifts `1` over by `bitPosition` bits, creating a -value that looks like `00100`. Then we perform `OR` operation -that sets specific bit into `1` but it does not affect on -other bits of the number. - -> See [setBit.js](setBit.js) for further details. - -#### Clear Bit - -This method shifts `1` over by `bitPosition` bits, creating a -value that looks like `00100`. Than it inverts this mask to get -the number that looks like `11011`. Then `AND` operation is -being applied to both the number and the mask. That operation -unsets the bit. - -> See [clearBit.js](clearBit.js) for further details. - -#### Update Bit - -This method is a combination of "Clear Bit" and "Set Bit" methods. - -> See [updateBit.js](updateBit.js) for further details. - -#### isEven - -This method determines if the number provided is even. -It is based on the fact that odd numbers have their last -right bit to be set to 1. - -```text -Number: 5 = 0b0101 -isEven: false - -Number: 4 = 0b0100 -isEven: true -``` - -> See [isEven.js](isEven.js) for further details. - -#### isPositive - -This method determines if the number is positive. It is based on the fact that all positive -numbers have their leftmost bit to be set to `0`. However, if the number provided is zero -or negative zero, it should still return `false`. - -```text -Number: 1 = 0b0001 -isPositive: true - -Number: -1 = -0b0001 -isPositive: false -``` - -> See [isPositive.js](isPositive.js) for further details. - -#### Multiply By Two - -This method shifts original number by one bit to the left. -Thus all binary number components (powers of two) are being -multiplying by two and thus the number itself is being -multiplied by two. - -``` -Before the shift -Number: 0b0101 = 5 -Powers of two: 0 + 2^2 + 0 + 2^0 - -After the shift -Number: 0b1010 = 10 -Powers of two: 2^3 + 0 + 2^1 + 0 -``` - -> See [multiplyByTwo.js](multiplyByTwo.js) for further details. - -#### Divide By Two - -This method shifts original number by one bit to the right. -Thus all binary number components (powers of two) are being -divided by two and thus the number itself is being -divided by two without remainder. - -``` -Before the shift -Number: 0b0101 = 5 -Powers of two: 0 + 2^2 + 0 + 2^0 - -After the shift -Number: 0b0010 = 2 -Powers of two: 0 + 0 + 2^1 + 0 -``` - -> See [divideByTwo.js](divideByTwo.js) for further details. - -#### Switch Sign - -This method make positive numbers to be negative and backwards. -To do so it uses "Twos Complement" approach which does it by -inverting all of the bits of the number and adding 1 to it. - -``` -1101 -3 -1110 -2 -1111 -1 -0000 0 -0001 1 -0010 2 -0011 3 -``` - -> See [switchSign.js](switchSign.js) for further details. - -#### Multiply Two Signed Numbers - -This method multiplies two signed integer numbers using bitwise operators. -This method is based on the following facts: - -```text -a * b can be written in the below formats: - 0 if a is zero or b is zero or both a and b are zeroes - 2a * (b/2) if b is even - 2a * (b - 1)/2 + a if b is odd and positive - 2a * (b + 1)/2 - a if b is odd and negative -``` - -The advantage of this approach is that in each recursive step one of the operands -reduces to half its original value. Hence, the run time complexity is `O(log(b))` where `b` is -the operand that reduces to half on each recursive step. - -> See [multiply.js](multiply.js) for further details. - -#### Multiply Two Unsigned Numbers - -This method multiplies two integer numbers using bitwise operators. -This method is based on that "Every number can be denoted as the sum of powers of 2". - -The main idea of bitwise multiplication is that every number may be split -to the sum of powers of two: - -I.e. - -```text -19 = 2^4 + 2^1 + 2^0 -``` - -Then multiplying number `x` by `19` is equivalent of: - -```text -x * 19 = x * 2^4 + x * 2^1 + x * 2^0 -``` - -Now we need to remember that `x * 2^4` is equivalent of shifting `x` left -by `4` bits (`x << 4`). - -> See [multiplyUnsigned.js](multiplyUnsigned.js) for further details. - -#### Count Set Bits - -This method counts the number of set bits in a number using bitwise operators. -The main idea is that we shift the number right by one bit at a time and check -the result of `&` operation that is `1` if bit is set and `0` otherwise. - -```text -Number: 5 = 0b0101 -Count of set bits = 2 -``` - -> See [countSetBits.js](countSetBits.js) for further details. - -#### Count Bits to Flip One Number to Another - -This methods outputs the number of bits required to convert one number to another. -This makes use of property that when numbers are `XOR`-ed the result will be number -of different bits. - -``` -5 = 0b0101 -1 = 0b0001 -Count of Bits to be Flipped: 1 -``` - -> See [bitsDiff.js](bitsDiff.js) for further details. - -#### Count Bits of a Number - -To calculate the number of valuable bits we need to shift `1` one bit left each -time and see if shifted number is bigger than the input number. - -``` -5 = 0b0101 -Count of valuable bits is: 3 -When we shift 1 four times it will become bigger than 5. -``` - -> See [bitLength.js](bitLength.js) for further details. - -#### Is Power of Two - -This method checks if a number provided is power of two. It uses the following -property. Let's say that `powerNumber` is a number that has been formed as a power -of two (i.e. 2, 4, 8, 16 etc.). Then if we'll do `&` operation between `powerNumber` -and `powerNumber - 1` it will return `0` (in case if number is power of two). - -``` -Number: 4 = 0b0100 -Number: 3 = (4 - 1) = 0b0011 -4 & 3 = 0b0100 & 0b0011 = 0b0000 <-- Equal to zero, is power of two. - -Number: 10 = 0b01010 -Number: 9 = (10 - 1) = 0b01001 -10 & 9 = 0b01010 & 0b01001 = 0b01000 <-- Not equal to zero, not a power of two. -``` - -> See [isPowerOfTwo.js](isPowerOfTwo.js) for further details. - -#### Full Adder - -This method adds up two integer numbers using bitwise operators. - -It implements [full adder]() -electronics circuit logic to sum two 32-bit integers in two's complement format. -It's using the boolean logic to cover all possible cases of adding two input bits: -with and without a "carry bit" from adding the previous less-significant stage. - -Legend: - -- `A`: Number `A` -- `B`: Number `B` -- `ai`: ith bit of number `A` -- `bi`: ith bit of number `B` -- `carryIn`: a bit carried in from the previous less-significant stage -- `carryOut`: a bit to carry to the next most-significant stage -- `bitSum`: The sum of `ai`, `bi`, and `carryIn` -- `resultBin`: The full result of adding current stage with all less-significant stages (in binary) -- `resultDec`: The full result of adding current stage with all less-significant stages (in decimal) - -``` -A = 3: 011 -B = 6: 110 -┌──────┬────┬────┬─────────┬──────────┬─────────┬───────────┬───────────┐ -│ bit │ ai │ bi │ carryIn │ carryOut │ bitSum │ resultBin │ resultDec │ -├──────┼────┼────┼─────────┼──────────┼─────────┼───────────┼───────────┤ -│ 0 │ 1 │ 0 │ 0 │ 0 │ 1 │ 1 │ 1 │ -│ 1 │ 1 │ 1 │ 0 │ 1 │ 0 │ 01 │ 1 │ -│ 2 │ 0 │ 1 │ 1 │ 1 │ 0 │ 001 │ 1 │ -│ 3 │ 0 │ 0 │ 1 │ 0 │ 1 │ 1001 │ 9 │ -└──────┴────┴────┴─────────┴──────────┴─────────┴───────────┴───────────┘ -``` - -> See [fullAdder.js](fullAdder.js) for further details. -> See [Full Adder on YouTube](https://www.youtube.com/watch?v=wvJc9CZcvBc&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8). - -## References - -- [Bit Manipulation on YouTube](https://www.youtube.com/watch?v=NLKQEOgBAnw&t=0s&index=28&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) -- [Negative Numbers in binary on YouTube](https://www.youtube.com/watch?v=4qH4unVtJkE&t=0s&index=30&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) -- [Bit Hacks on stanford.edu](https://graphics.stanford.edu/~seander/bithacks.html) diff --git a/src/algorithms/math/bits/README.zh-CN.md b/src/algorithms/math/bits/README.zh-CN.md deleted file mode 100644 index 9ec75069c6..0000000000 --- a/src/algorithms/math/bits/README.zh-CN.md +++ /dev/null @@ -1,236 +0,0 @@ -# 位运算 - -_Read this in other languages:_ -[français](README.fr-FR.md), -[english](README.md) - -#### Get Bit - -该方法向右移动目标位到最右边,即位数组的第0个位置上。然后在该数上与形如 `0001`的二进制形式的数进行`AND`操作。这会清理掉除了目标位的所有其它位的数据。如果目标位是1,那么结果就是`1`,反之,结果是`0`; - -> 查看[getBit.js](getBit.js)了解更多细节。 - -#### Set Bit - -该方法把`1`向左移动了`bitPosition`位,生成了一个二进制形如`00100`的值。然后我们拿该值与目标数字进行`OR`操作,就能把目标位设置位`1`而不影响其它位。 - -> 查看[setBit.js](setBit.js)了解更多细节。 - -#### Clear Bit - -该方法把`1`向左移动了`bitPosition`位,生成了一个二进制形如`00100`的值。然后反转每一位的数字,得到一个二进制形如`11011`的值。接着与目标值进行`AND`操作,就能清除掉目标位的值。 - -> 查看[clearBit.js](clearBit.js)了解更多细节。 - -#### Update Bit - -该方法组合了“Clear Bit”和“Set Bit” - -> 查看[updateBit.js](updateBit.js)了解更多细节。 - -#### isEven - -该方法检测传入的number是否是偶数。它的实现基于奇数的最右边的位永远是`1`这个事实。 - -```text -Number: 5 = 0b0101 -isEven: false - -Number: 4 = 0b0100 -isEven: true -``` - -> 查看[isEven.js](isEven.js)了解更多细节。 - -#### isPositive - -该方法检测传入的number是否是正数。它的实现基于正数最左边的位永远是`0`这个事实。然而如果传入的number是0或者-0,它也应该返回false。 - -```text -Number: 1 = 0b0001 -isPositive: true - -Number: -1 = -0b0001 -isPositive: false -``` - -> 查看[isPositive.js](isPositive.js)了解更多细节。 - -#### Multiply By Two - -该方法将原始数字向左移动一位。因此所有位都将乘以2,因此数字本身也将乘以2。 - -``` -Before the shift -Number: 0b0101 = 5 -Powers of two: 0 + 2^2 + 0 + 2^0 - -After the shift -Number: 0b1010 = 10 -Powers of two: 2^3 + 0 + 2^1 + 0 -``` - -> 查看[multiplyByTwo.js](multiplyByTwo.js)了解更多细节。 - -#### Divide By Two - -该方法将原始数字向右移动一位。因此所有位都将除以2,因此数字本身也将除以2,且不会产生余数。 - -``` -Before the shift -Number: 0b0101 = 5 -Powers of two: 0 + 2^2 + 0 + 2^0 - -After the shift -Number: 0b0010 = 2 -Powers of two: 0 + 0 + 2^1 + 0 -``` - -> 查看[divideByTwo.js](divideByTwo.js)了解更多细节。 - -#### Switch Sign - -该方法将正数变成负数,反之亦然。为了做到这一点,它使用了“二进制补码”的方法,即取反所有位然后加1. - -``` -1101 -3 -1110 -2 -1111 -1 -0000 0 -0001 1 -0010 2 -0011 3 -``` - -> 查看[switchSign.js](switchSign.js)了解更多细节。 - -#### Multiply Two Signed Numbers - -该方法使用位运算符计算两个有符号数的乘积。实现基于以下事实: - -```text -a * b 可以被改写成如下形式: - 0 a为0,b为0,或者a,b都为0 - 2a * (b/2) b是偶数 - 2a * (b - 1)/2 + a b是奇数,正数 - 2a * (b + 1)/2 - a b是奇数,负数 -``` - -这样转换的优势在于,递归的每一步,递归的操作数的值都减少了一半。因此,运行时的时间复杂度为`O(log(b))`,其中b是在每个递归步骤上减少为一半的操作数。 - - -> 查看[multiply.js](multiply.js)了解更多细节。 - -#### Multiply Two Unsigned Numbers - -该方法使用位运算符计算两个无符号数的乘积。实现基于“每个数字都可以表示为一系列2的幂的和”。 - -逐位乘法的主要思想是,每个数字都可以拆分为两个乘方的和: - -比如: - -```text -19 = 2^4 + 2^1 + 2^0 -``` - -然后`19`乘`x`就等价于: - -```text -x * 19 = x * 2^4 + x * 2^1 + x * 2^0 -``` - -接着我们应该意识到`x*2^4`是等价于`x`向左移动`4`位(`x << 4`)的; - -> 查看[multiplyUnsigned.js](multiplyUnsigned.js)了解更多细节。 - -#### Count Set Bits - -该方法使用位运算符对一个数字里设置为`1`的位进行记数。主要方法是,把数字每次向右移动1位,然后使用`&`操作符取出最右边一位的值,`1`则记数加1,`0`则不计。 - -```text -Number: 5 = 0b0101 -Count of set bits = 2 -``` - -> 查看[countSetBits.js](countSetBits.js)了解更多细节。 - -#### Count Bits to Flip One Number to Another - - -该方法输出把一个数字转换为另一个数字所需要转换的位数。这利用了以下特性:当数字进行`XOR`异或运算时,结果将是不同位数的数量(即异或的结果中所有被设置为1的位的数量)。 - -``` -5 = 0b0101 -1 = 0b0001 -Count of Bits to be Flipped: 1 -``` - -> 查看[bitsDiff.js](bitsDiff.js)了解更多细节。 - -#### Count Bits of a Number - -为了计算数字的有效位数,我们需要把`1`每次向左移动一位,然后检查产生的值是否大于输入的数字。 - -``` -5 = 0b0101 -有效位数: 3 -当我们把1向左移动4位的时候,会大于5. -``` - -> 查看[bitLength.js](bitLength.js)了解更多细节。 - -#### Is Power of Two - -该方法检测数字是否可以表示为2的幂。它使用了以下特性,我们定义`powerNumber`是可以写成2的幂的形式的数(2,4,8,16 etc.)。然后我们会把`powerNumber`和`powerNumber - 1`进行`&`操作,它会返回`0`(如果该数字可以表示为2的幂)。 - -``` -Number: 4 = 0b0100 -Number: 3 = (4 - 1) = 0b0011 -4 & 3 = 0b0100 & 0b0011 = 0b0000 <-- Equal to zero, is power of two. - -Number: 10 = 0b01010 -Number: 9 = (10 - 1) = 0b01001 -10 & 9 = 0b01010 & 0b01001 = 0b01000 <-- Not equal to zero, not a power of two. -``` - -> 查看[isPowerOfTwo.js](isPowerOfTwo.js)了解更多细节。 - -#### Full Adder - -该方法使用位运算符计算两个数的和。 - -它实现了[完整的加法器]()电子电路逻辑,以补码的形式计算两个32位数字的和。它使用布尔逻辑来覆盖了两个位相加的所有情况:从前一位相加的时候,产没产生进位“carry bit”。 - -Legend: - -- `A`: 数字 `A` -- `B`: 数字 `B` -- `ai`: 数字`A`以二进制表示时的位下标 -- `bi`: 数字`B`以二进制表示时的位下标 -- `carryIn`: 本次计算产生的进位 -- `carryOut`: 带入此次计算的进位 -- `bitSum`: `ai`, `bi`, 和 `carryIn` 的和 -- `resultBin`: 当前计算的结果(二进制形式) -- `resultDec`: 当前计算的结果(十进制形式) - -``` -A = 3: 011 -B = 6: 110 -┌──────┬────┬────┬─────────┬──────────┬─────────┬───────────┬───────────┐ -│ bit │ ai │ bi │ carryIn │ carryOut │ bitSum │ resultBin │ resultDec │ -├──────┼────┼────┼─────────┼──────────┼─────────┼───────────┼───────────┤ -│ 0 │ 1 │ 0 │ 0 │ 0 │ 1 │ 1 │ 1 │ -│ 1 │ 1 │ 1 │ 0 │ 1 │ 0 │ 01 │ 1 │ -│ 2 │ 0 │ 1 │ 1 │ 1 │ 0 │ 001 │ 1 │ -│ 3 │ 0 │ 0 │ 1 │ 0 │ 1 │ 1001 │ 9 │ -└──────┴────┴────┴─────────┴──────────┴─────────┴───────────┴───────────┘ -``` - -> 查看[fullAdder.js](fullAdder.js)了解更多细节。 -> 查看[Full Adder on YouTube](https://www.youtube.com/watch?v=wvJc9CZcvBc&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8). - -## References - -- [Bit Manipulation on YouTube](https://www.youtube.com/watch?v=NLKQEOgBAnw&t=0s&index=28&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) -- [Negative Numbers in binary on YouTube](https://www.youtube.com/watch?v=4qH4unVtJkE&t=0s&index=30&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) -- [Bit Hacks on stanford.edu](https://graphics.stanford.edu/~seander/bithacks.html) diff --git a/src/algorithms/math/bits/__test__/bitLength.test.js b/src/algorithms/math/bits/__test__/bitLength.test.js deleted file mode 100644 index 1731b5685a..0000000000 --- a/src/algorithms/math/bits/__test__/bitLength.test.js +++ /dev/null @@ -1,14 +0,0 @@ -import bitLength from '../bitLength'; - -describe('bitLength', () => { - it('should calculate number of bits that the number is consists of', () => { - expect(bitLength(0b0)).toBe(0); - expect(bitLength(0b1)).toBe(1); - expect(bitLength(0b01)).toBe(1); - expect(bitLength(0b101)).toBe(3); - expect(bitLength(0b0101)).toBe(3); - expect(bitLength(0b10101)).toBe(5); - expect(bitLength(0b11110101)).toBe(8); - expect(bitLength(0b00011110101)).toBe(8); - }); -}); diff --git a/src/algorithms/math/bits/__test__/bitsDiff.test.js b/src/algorithms/math/bits/__test__/bitsDiff.test.js deleted file mode 100644 index e1fd641647..0000000000 --- a/src/algorithms/math/bits/__test__/bitsDiff.test.js +++ /dev/null @@ -1,13 +0,0 @@ -import bitsDiff from '../bitsDiff'; - -describe('bitsDiff', () => { - it('should calculate bits difference between two numbers', () => { - expect(bitsDiff(0, 0)).toBe(0); - expect(bitsDiff(1, 1)).toBe(0); - expect(bitsDiff(124, 124)).toBe(0); - expect(bitsDiff(0, 1)).toBe(1); - expect(bitsDiff(1, 0)).toBe(1); - expect(bitsDiff(1, 2)).toBe(2); - expect(bitsDiff(1, 3)).toBe(1); - }); -}); diff --git a/src/algorithms/math/bits/__test__/clearBit.test.js b/src/algorithms/math/bits/__test__/clearBit.test.js deleted file mode 100644 index 2d758779cd..0000000000 --- a/src/algorithms/math/bits/__test__/clearBit.test.js +++ /dev/null @@ -1,15 +0,0 @@ -import clearBit from '../clearBit'; - -describe('clearBit', () => { - it('should clear bit at specific position', () => { - // 1 = 0b0001 - expect(clearBit(1, 0)).toBe(0); - expect(clearBit(1, 1)).toBe(1); - expect(clearBit(1, 2)).toBe(1); - - // 10 = 0b1010 - expect(clearBit(10, 0)).toBe(10); - expect(clearBit(10, 1)).toBe(8); - expect(clearBit(10, 3)).toBe(2); - }); -}); diff --git a/src/algorithms/math/bits/__test__/countSetBits.test.js b/src/algorithms/math/bits/__test__/countSetBits.test.js deleted file mode 100644 index a6c0fb9989..0000000000 --- a/src/algorithms/math/bits/__test__/countSetBits.test.js +++ /dev/null @@ -1,20 +0,0 @@ -import countSetBits from '../countSetBits'; - -describe('countSetBits', () => { - it('should return number of set bits', () => { - expect(countSetBits(0)).toBe(0); - expect(countSetBits(1)).toBe(1); - expect(countSetBits(2)).toBe(1); - expect(countSetBits(3)).toBe(2); - expect(countSetBits(4)).toBe(1); - expect(countSetBits(5)).toBe(2); - expect(countSetBits(21)).toBe(3); - expect(countSetBits(255)).toBe(8); - expect(countSetBits(1023)).toBe(10); - expect(countSetBits(-1)).toBe(32); - expect(countSetBits(-21)).toBe(30); - expect(countSetBits(-255)).toBe(25); - expect(countSetBits(-1023)).toBe(23); - expect(countSetBits(-4294967296)).toBe(0); - }); -}); diff --git a/src/algorithms/math/bits/__test__/divideByTwo.test.js b/src/algorithms/math/bits/__test__/divideByTwo.test.js deleted file mode 100644 index ec829367ec..0000000000 --- a/src/algorithms/math/bits/__test__/divideByTwo.test.js +++ /dev/null @@ -1,12 +0,0 @@ -import divideByTwo from '../divideByTwo'; - -describe('divideByTwo', () => { - it('should divide numbers by two using bitwise operations', () => { - expect(divideByTwo(0)).toBe(0); - expect(divideByTwo(1)).toBe(0); - expect(divideByTwo(3)).toBe(1); - expect(divideByTwo(10)).toBe(5); - expect(divideByTwo(17)).toBe(8); - expect(divideByTwo(125)).toBe(62); - }); -}); diff --git a/src/algorithms/math/bits/__test__/fullAdder.test.js b/src/algorithms/math/bits/__test__/fullAdder.test.js deleted file mode 100644 index 529187dc4f..0000000000 --- a/src/algorithms/math/bits/__test__/fullAdder.test.js +++ /dev/null @@ -1,18 +0,0 @@ -import fullAdder from '../fullAdder'; - -describe('fullAdder', () => { - it('should add up two numbers', () => { - expect(fullAdder(0, 0)).toBe(0); - expect(fullAdder(2, 0)).toBe(2); - expect(fullAdder(0, 2)).toBe(2); - expect(fullAdder(1, 2)).toBe(3); - expect(fullAdder(2, 1)).toBe(3); - expect(fullAdder(6, 6)).toBe(12); - expect(fullAdder(-2, 4)).toBe(2); - expect(fullAdder(4, -2)).toBe(2); - expect(fullAdder(-4, -4)).toBe(-8); - expect(fullAdder(4, -5)).toBe(-1); - expect(fullAdder(2, 121)).toBe(123); - expect(fullAdder(121, 2)).toBe(123); - }); -}); diff --git a/src/algorithms/math/bits/__test__/getBit.test.js b/src/algorithms/math/bits/__test__/getBit.test.js deleted file mode 100644 index 3a7026f2d9..0000000000 --- a/src/algorithms/math/bits/__test__/getBit.test.js +++ /dev/null @@ -1,23 +0,0 @@ -import getBit from '../getBit'; - -describe('getBit', () => { - it('should get bit at specific position', () => { - // 1 = 0b0001 - expect(getBit(1, 0)).toBe(1); - expect(getBit(1, 1)).toBe(0); - - // 2 = 0b0010 - expect(getBit(2, 0)).toBe(0); - expect(getBit(2, 1)).toBe(1); - - // 3 = 0b0011 - expect(getBit(3, 0)).toBe(1); - expect(getBit(3, 1)).toBe(1); - - // 10 = 0b1010 - expect(getBit(10, 0)).toBe(0); - expect(getBit(10, 1)).toBe(1); - expect(getBit(10, 2)).toBe(0); - expect(getBit(10, 3)).toBe(1); - }); -}); diff --git a/src/algorithms/math/bits/__test__/isEven.test.js b/src/algorithms/math/bits/__test__/isEven.test.js deleted file mode 100644 index b21bbfb00c..0000000000 --- a/src/algorithms/math/bits/__test__/isEven.test.js +++ /dev/null @@ -1,19 +0,0 @@ -import isEven from '../isEven'; - -describe('isEven', () => { - it('should detect if a number is even', () => { - expect(isEven(0)).toBe(true); - expect(isEven(2)).toBe(true); - expect(isEven(-2)).toBe(true); - expect(isEven(1)).toBe(false); - expect(isEven(-1)).toBe(false); - expect(isEven(-3)).toBe(false); - expect(isEven(3)).toBe(false); - expect(isEven(8)).toBe(true); - expect(isEven(9)).toBe(false); - expect(isEven(121)).toBe(false); - expect(isEven(122)).toBe(true); - expect(isEven(1201)).toBe(false); - expect(isEven(1202)).toBe(true); - }); -}); diff --git a/src/algorithms/math/bits/__test__/isPositive.test.js b/src/algorithms/math/bits/__test__/isPositive.test.js deleted file mode 100644 index 45dcca0e4e..0000000000 --- a/src/algorithms/math/bits/__test__/isPositive.test.js +++ /dev/null @@ -1,19 +0,0 @@ -import isPositive from '../isPositive'; - -describe('isPositive', () => { - it('should detect if a number is positive', () => { - expect(isPositive(1)).toBe(true); - expect(isPositive(2)).toBe(true); - expect(isPositive(3)).toBe(true); - expect(isPositive(5665)).toBe(true); - expect(isPositive(56644325)).toBe(true); - - expect(isPositive(0)).toBe(false); - expect(isPositive(-0)).toBe(false); - expect(isPositive(-1)).toBe(false); - expect(isPositive(-2)).toBe(false); - expect(isPositive(-126)).toBe(false); - expect(isPositive(-5665)).toBe(false); - expect(isPositive(-56644325)).toBe(false); - }); -}); diff --git a/src/algorithms/math/bits/__test__/isPowerOfTwo.test.js b/src/algorithms/math/bits/__test__/isPowerOfTwo.test.js deleted file mode 100644 index 3408f2c137..0000000000 --- a/src/algorithms/math/bits/__test__/isPowerOfTwo.test.js +++ /dev/null @@ -1,20 +0,0 @@ -import isPowerOfTwo from '../isPowerOfTwo'; - -describe('isPowerOfTwo', () => { - it('should detect if the number is power of two', () => { - expect(isPowerOfTwo(1)).toBe(true); - expect(isPowerOfTwo(2)).toBe(true); - expect(isPowerOfTwo(3)).toBe(false); - expect(isPowerOfTwo(4)).toBe(true); - expect(isPowerOfTwo(5)).toBe(false); - expect(isPowerOfTwo(6)).toBe(false); - expect(isPowerOfTwo(7)).toBe(false); - expect(isPowerOfTwo(8)).toBe(true); - expect(isPowerOfTwo(9)).toBe(false); - expect(isPowerOfTwo(16)).toBe(true); - expect(isPowerOfTwo(23)).toBe(false); - expect(isPowerOfTwo(32)).toBe(true); - expect(isPowerOfTwo(127)).toBe(false); - expect(isPowerOfTwo(128)).toBe(true); - }); -}); diff --git a/src/algorithms/math/bits/__test__/multiply.test.js b/src/algorithms/math/bits/__test__/multiply.test.js deleted file mode 100644 index c21957041b..0000000000 --- a/src/algorithms/math/bits/__test__/multiply.test.js +++ /dev/null @@ -1,18 +0,0 @@ -import multiply from '../multiply'; - -describe('multiply', () => { - it('should multiply two numbers', () => { - expect(multiply(0, 0)).toBe(0); - expect(multiply(2, 0)).toBe(0); - expect(multiply(0, 2)).toBe(0); - expect(multiply(1, 2)).toBe(2); - expect(multiply(2, 1)).toBe(2); - expect(multiply(6, 6)).toBe(36); - expect(multiply(-2, 4)).toBe(-8); - expect(multiply(4, -2)).toBe(-8); - expect(multiply(-4, -4)).toBe(16); - expect(multiply(4, -5)).toBe(-20); - expect(multiply(2, 121)).toBe(242); - expect(multiply(121, 2)).toBe(242); - }); -}); diff --git a/src/algorithms/math/bits/__test__/multiplyByTwo.test.js b/src/algorithms/math/bits/__test__/multiplyByTwo.test.js deleted file mode 100644 index 07934c57ba..0000000000 --- a/src/algorithms/math/bits/__test__/multiplyByTwo.test.js +++ /dev/null @@ -1,12 +0,0 @@ -import multiplyByTwo from '../multiplyByTwo'; - -describe('multiplyByTwo', () => { - it('should multiply numbers by two using bitwise operations', () => { - expect(multiplyByTwo(0)).toBe(0); - expect(multiplyByTwo(1)).toBe(2); - expect(multiplyByTwo(3)).toBe(6); - expect(multiplyByTwo(10)).toBe(20); - expect(multiplyByTwo(17)).toBe(34); - expect(multiplyByTwo(125)).toBe(250); - }); -}); diff --git a/src/algorithms/math/bits/__test__/multiplyUnsigned.test.js b/src/algorithms/math/bits/__test__/multiplyUnsigned.test.js deleted file mode 100644 index d444dc1688..0000000000 --- a/src/algorithms/math/bits/__test__/multiplyUnsigned.test.js +++ /dev/null @@ -1,15 +0,0 @@ -import multiplyUnsigned from '../multiplyUnsigned'; - -describe('multiplyUnsigned', () => { - it('should multiply two unsigned numbers', () => { - expect(multiplyUnsigned(0, 2)).toBe(0); - expect(multiplyUnsigned(2, 0)).toBe(0); - expect(multiplyUnsigned(1, 1)).toBe(1); - expect(multiplyUnsigned(1, 2)).toBe(2); - expect(multiplyUnsigned(2, 7)).toBe(14); - expect(multiplyUnsigned(7, 2)).toBe(14); - expect(multiplyUnsigned(30, 2)).toBe(60); - expect(multiplyUnsigned(17, 34)).toBe(578); - expect(multiplyUnsigned(170, 2340)).toBe(397800); - }); -}); diff --git a/src/algorithms/math/bits/__test__/setBit.test.js b/src/algorithms/math/bits/__test__/setBit.test.js deleted file mode 100644 index d53d60c746..0000000000 --- a/src/algorithms/math/bits/__test__/setBit.test.js +++ /dev/null @@ -1,15 +0,0 @@ -import setBit from '../setBit'; - -describe('setBit', () => { - it('should set bit at specific position', () => { - // 1 = 0b0001 - expect(setBit(1, 0)).toBe(1); - expect(setBit(1, 1)).toBe(3); - expect(setBit(1, 2)).toBe(5); - - // 10 = 0b1010 - expect(setBit(10, 0)).toBe(11); - expect(setBit(10, 1)).toBe(10); - expect(setBit(10, 2)).toBe(14); - }); -}); diff --git a/src/algorithms/math/bits/__test__/switchSign.test.js b/src/algorithms/math/bits/__test__/switchSign.test.js deleted file mode 100644 index af3f36df5e..0000000000 --- a/src/algorithms/math/bits/__test__/switchSign.test.js +++ /dev/null @@ -1,13 +0,0 @@ -import switchSign from '../switchSign'; - -describe('switchSign', () => { - it('should switch the sign of the number using twos complement approach', () => { - expect(switchSign(0)).toBe(0); - expect(switchSign(1)).toBe(-1); - expect(switchSign(-1)).toBe(1); - expect(switchSign(32)).toBe(-32); - expect(switchSign(-32)).toBe(32); - expect(switchSign(23)).toBe(-23); - expect(switchSign(-23)).toBe(23); - }); -}); diff --git a/src/algorithms/math/bits/__test__/updateBit.test.js b/src/algorithms/math/bits/__test__/updateBit.test.js deleted file mode 100644 index e2ac2db005..0000000000 --- a/src/algorithms/math/bits/__test__/updateBit.test.js +++ /dev/null @@ -1,19 +0,0 @@ -import updateBit from '../updateBit'; - -describe('updateBit', () => { - it('should update bit at specific position', () => { - // 1 = 0b0001 - expect(updateBit(1, 0, 1)).toBe(1); - expect(updateBit(1, 0, 0)).toBe(0); - expect(updateBit(1, 1, 1)).toBe(3); - expect(updateBit(1, 2, 1)).toBe(5); - - // 10 = 0b1010 - expect(updateBit(10, 0, 1)).toBe(11); - expect(updateBit(10, 0, 0)).toBe(10); - expect(updateBit(10, 1, 1)).toBe(10); - expect(updateBit(10, 1, 0)).toBe(8); - expect(updateBit(10, 2, 1)).toBe(14); - expect(updateBit(10, 2, 0)).toBe(10); - }); -}); diff --git a/src/algorithms/math/bits/bitLength.js b/src/algorithms/math/bits/bitLength.js deleted file mode 100644 index 0fc2727d0e..0000000000 --- a/src/algorithms/math/bits/bitLength.js +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Return the number of bits used in the binary representation of the number. - * - * @param {number} number - * @return {number} - */ -export default function bitLength(number) { - let bitsCounter = 0; - - while ((1 << bitsCounter) <= number) { - bitsCounter += 1; - } - - return bitsCounter; -} diff --git a/src/algorithms/math/bits/bitsDiff.js b/src/algorithms/math/bits/bitsDiff.js deleted file mode 100644 index dbb77b89ff..0000000000 --- a/src/algorithms/math/bits/bitsDiff.js +++ /dev/null @@ -1,13 +0,0 @@ -import countSetBits from './countSetBits'; - -/** - * Counts the number of bits that need to be change in order - * to convert numberA to numberB. - * - * @param {number} numberA - * @param {number} numberB - * @return {number} - */ -export default function bitsDiff(numberA, numberB) { - return countSetBits(numberA ^ numberB); -} diff --git a/src/algorithms/math/bits/clearBit.js b/src/algorithms/math/bits/clearBit.js deleted file mode 100644 index 0329a0476d..0000000000 --- a/src/algorithms/math/bits/clearBit.js +++ /dev/null @@ -1,10 +0,0 @@ -/** - * @param {number} number - * @param {number} bitPosition - zero based. - * @return {number} - */ -export default function clearBit(number, bitPosition) { - const mask = ~(1 << bitPosition); - - return number & mask; -} diff --git a/src/algorithms/math/bits/countSetBits.js b/src/algorithms/math/bits/countSetBits.js deleted file mode 100644 index 63839d4e68..0000000000 --- a/src/algorithms/math/bits/countSetBits.js +++ /dev/null @@ -1,18 +0,0 @@ -/** - * @param {number} originalNumber - * @return {number} - */ -export default function countSetBits(originalNumber) { - let setBitsCount = 0; - let number = originalNumber; - - while (number) { - // Add last bit of the number to the sum of set bits. - setBitsCount += number & 1; - - // Shift number right by one bit to investigate other bits. - number >>>= 1; - } - - return setBitsCount; -} diff --git a/src/algorithms/math/bits/divideByTwo.js b/src/algorithms/math/bits/divideByTwo.js deleted file mode 100644 index 359bef9d59..0000000000 --- a/src/algorithms/math/bits/divideByTwo.js +++ /dev/null @@ -1,7 +0,0 @@ -/** - * @param {number} number - * @return {number} - */ -export default function divideByTwo(number) { - return number >> 1; -} diff --git a/src/algorithms/math/bits/fullAdder.js b/src/algorithms/math/bits/fullAdder.js deleted file mode 100644 index 37d74bb911..0000000000 --- a/src/algorithms/math/bits/fullAdder.js +++ /dev/null @@ -1,70 +0,0 @@ -import getBit from './getBit'; - -/** - * Add two numbers using only binary operators. - * - * This is an implementation of full adders logic circuit. - * https://en.wikipedia.org/wiki/Adder_(electronics) - * Inspired by: https://www.youtube.com/watch?v=wvJc9CZcvBc - * - * Table(1) - * INPUT | OUT - * C Ai Bi | C Si | Row - * -------- | -----| --- - * 0 0 0 | 0 0 | 1 - * 0 0 1 | 0 1 | 2 - * 0 1 0 | 0 1 | 3 - * 0 1 1 | 1 0 | 4 - * -------- | ---- | -- - * 1 0 0 | 0 1 | 5 - * 1 0 1 | 1 0 | 6 - * 1 1 0 | 1 0 | 7 - * 1 1 1 | 1 1 | 8 - * --------------------- - * - * Legend: - * INPUT C = Carry in, from the previous less-significant stage - * INPUT Ai = ith bit of Number A - * INPUT Bi = ith bit of Number B - * OUT C = Carry out to the next most-significant stage - * OUT Si = Bit Sum, ith least significant bit of the result - * - * - * @param {number} a - * @param {number} b - * @return {number} - */ -export default function fullAdder(a, b) { - let result = 0; - let carry = 0; - - // The operands of all bitwise operators are converted to signed - // 32-bit integers in two's complement format. - // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators#Signed_32-bit_integers - for (let i = 0; i < 32; i += 1) { - const ai = getBit(a, i); - const bi = getBit(b, i); - const carryIn = carry; - - // Calculate binary Ai + Bi without carry (half adder) - // See Table(1) rows 1 - 4: Si = Ai ^ Bi - const aiPlusBi = ai ^ bi; - - // Calculate ith bit of the result by adding the carry bit to Ai + Bi - // For Table(1) rows 5 - 8 carryIn = 1: Si = Ai ^ Bi ^ 1, flip the bit - // Fpr Table(1) rows 1 - 4 carryIn = 0: Si = Ai ^ Bi ^ 0, a no-op. - const bitSum = aiPlusBi ^ carryIn; - - // Carry out one to the next most-significant stage - // when at least one of these is true: - // 1) Table(1) rows 6, 7: one of Ai OR Bi is 1 AND carryIn = 1 - // 2) Table(1) rows 4, 8: Both Ai AND Bi are 1 - const carryOut = (aiPlusBi & carryIn) | (ai & bi); - carry = carryOut; - - // Set ith least significant bit of the result to bitSum. - result |= bitSum << i; - } - - return result; -} diff --git a/src/algorithms/math/bits/getBit.js b/src/algorithms/math/bits/getBit.js deleted file mode 100644 index 5ff2132691..0000000000 --- a/src/algorithms/math/bits/getBit.js +++ /dev/null @@ -1,8 +0,0 @@ -/** - * @param {number} number - * @param {number} bitPosition - zero based. - * @return {number} - */ -export default function getBit(number, bitPosition) { - return (number >> bitPosition) & 1; -} diff --git a/src/algorithms/math/bits/isEven.js b/src/algorithms/math/bits/isEven.js deleted file mode 100644 index 843b4d281e..0000000000 --- a/src/algorithms/math/bits/isEven.js +++ /dev/null @@ -1,7 +0,0 @@ -/** - * @param {number} number - * @return {boolean} - */ -export default function isEven(number) { - return (number & 1) === 0; -} diff --git a/src/algorithms/math/bits/isPositive.js b/src/algorithms/math/bits/isPositive.js deleted file mode 100644 index 0e64e8ae92..0000000000 --- a/src/algorithms/math/bits/isPositive.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * @param {number} number - 32-bit integer. - * @return {boolean} - */ -export default function isPositive(number) { - // Zero is neither a positive nor a negative number. - if (number === 0) { - return false; - } - - // The most significant 32nd bit can be used to determine whether the number is positive. - return ((number >> 31) & 1) === 0; -} diff --git a/src/algorithms/math/bits/isPowerOfTwo.js b/src/algorithms/math/bits/isPowerOfTwo.js deleted file mode 100644 index 28e3e673d8..0000000000 --- a/src/algorithms/math/bits/isPowerOfTwo.js +++ /dev/null @@ -1,7 +0,0 @@ -/** - * @param {number} number - * @return bool - */ -export default function isPowerOfTwo(number) { - return (number & (number - 1)) === 0; -} diff --git a/src/algorithms/math/bits/multiply.js b/src/algorithms/math/bits/multiply.js deleted file mode 100644 index da952f429e..0000000000 --- a/src/algorithms/math/bits/multiply.js +++ /dev/null @@ -1,41 +0,0 @@ -import multiplyByTwo from './multiplyByTwo'; -import divideByTwo from './divideByTwo'; -import isEven from './isEven'; -import isPositive from './isPositive'; - -/** - * Multiply two signed numbers using bitwise operations. - * - * If a is zero or b is zero or if both a and b are zeros: - * multiply(a, b) = 0 - * - * If b is even: - * multiply(a, b) = multiply(2a, b/2) - * - * If b is odd and b is positive: - * multiply(a, b) = multiply(2a, (b-1)/2) + a - * - * If b is odd and b is negative: - * multiply(a, b) = multiply(2a, (b+1)/2) - a - * - * Time complexity: O(log b) - * - * @param {number} a - * @param {number} b - * @return {number} - */ -export default function multiply(a, b) { - // If a is zero or b is zero or if both a and b are zeros then the production is also zero. - if (b === 0 || a === 0) { - return 0; - } - - // Otherwise we will have four different cases that are described above. - const multiplyByOddPositive = () => multiply(multiplyByTwo(a), divideByTwo(b - 1)) + a; - const multiplyByOddNegative = () => multiply(multiplyByTwo(a), divideByTwo(b + 1)) - a; - - const multiplyByEven = () => multiply(multiplyByTwo(a), divideByTwo(b)); - const multiplyByOdd = () => (isPositive(b) ? multiplyByOddPositive() : multiplyByOddNegative()); - - return isEven(b) ? multiplyByEven() : multiplyByOdd(); -} diff --git a/src/algorithms/math/bits/multiplyByTwo.js b/src/algorithms/math/bits/multiplyByTwo.js deleted file mode 100644 index 3e52544d29..0000000000 --- a/src/algorithms/math/bits/multiplyByTwo.js +++ /dev/null @@ -1,7 +0,0 @@ -/** - * @param {number} number - * @return {number} - */ -export default function multiplyByTwo(number) { - return number << 1; -} diff --git a/src/algorithms/math/bits/multiplyUnsigned.js b/src/algorithms/math/bits/multiplyUnsigned.js deleted file mode 100644 index 17a2c95a65..0000000000 --- a/src/algorithms/math/bits/multiplyUnsigned.js +++ /dev/null @@ -1,43 +0,0 @@ -/** - * Multiply to unsigned numbers using bitwise operator. - * - * The main idea of bitwise multiplication is that every number may be split - * to the sum of powers of two: - * - * I.e. 19 = 2^4 + 2^1 + 2^0 - * - * Then multiplying number x by 19 is equivalent of: - * - * x * 19 = x * 2^4 + x * 2^1 + x * 2^0 - * - * Now we need to remember that (x * 2^4) is equivalent of shifting x left by 4 bits (x << 4). - * - * @param {number} number1 - * @param {number} number2 - * @return {number} - */ -export default function multiplyUnsigned(number1, number2) { - let result = 0; - - // Let's treat number2 as a multiplier for the number1. - let multiplier = number2; - - // Multiplier current bit index. - let bitIndex = 0; - - // Go through all bits of number2. - while (multiplier !== 0) { - // Check if current multiplier bit is set. - if (multiplier & 1) { - // In case if multiplier's bit at position bitIndex is set - // it would mean that we need to multiply number1 by the power - // of bit with index bitIndex and then add it to the result. - result += (number1 << bitIndex); - } - - bitIndex += 1; - multiplier >>= 1; - } - - return result; -} diff --git a/src/algorithms/math/bits/setBit.js b/src/algorithms/math/bits/setBit.js deleted file mode 100644 index c574ac692e..0000000000 --- a/src/algorithms/math/bits/setBit.js +++ /dev/null @@ -1,8 +0,0 @@ -/** - * @param {number} number - * @param {number} bitPosition - zero based. - * @return {number} - */ -export default function setBit(number, bitPosition) { - return number | (1 << bitPosition); -} diff --git a/src/algorithms/math/bits/switchSign.js b/src/algorithms/math/bits/switchSign.js deleted file mode 100644 index e38ec487ef..0000000000 --- a/src/algorithms/math/bits/switchSign.js +++ /dev/null @@ -1,8 +0,0 @@ -/** - * Switch the sign of the number using "Twos Complement" approach. - * @param {number} number - * @return {number} - */ -export default function switchSign(number) { - return ~number + 1; -} diff --git a/src/algorithms/math/bits/updateBit.js b/src/algorithms/math/bits/updateBit.js deleted file mode 100644 index f56834a3ea..0000000000 --- a/src/algorithms/math/bits/updateBit.js +++ /dev/null @@ -1,16 +0,0 @@ -/** - * @param {number} number - * @param {number} bitPosition - zero based. - * @param {number} bitValue - 0 or 1. - * @return {number} - */ -export default function updateBit(number, bitPosition, bitValue) { - // Normalized bit value. - const bitValueNormalized = bitValue ? 1 : 0; - - // Init clear mask. - const clearMask = ~(1 << bitPosition); - - // Clear bit value and then set it up to required value. - return (number & clearMask) | (bitValueNormalized << bitPosition); -} diff --git a/src/algorithms/math/complex-number/ComplexNumber.js b/src/algorithms/math/complex-number/ComplexNumber.js deleted file mode 100644 index 9e8ffa566b..0000000000 --- a/src/algorithms/math/complex-number/ComplexNumber.js +++ /dev/null @@ -1,160 +0,0 @@ -import radianToDegree from '../radian/radianToDegree'; - -export default class ComplexNumber { - /** - * z = re + im * i - * z = radius * e^(i * phase) - * - * @param {number} [re] - * @param {number} [im] - */ - constructor({ re = 0, im = 0 } = {}) { - this.re = re; - this.im = im; - } - - /** - * @param {ComplexNumber|number} addend - * @return {ComplexNumber} - */ - add(addend) { - // Make sure we're dealing with complex number. - const complexAddend = this.toComplexNumber(addend); - - return new ComplexNumber({ - re: this.re + complexAddend.re, - im: this.im + complexAddend.im, - }); - } - - /** - * @param {ComplexNumber|number} subtrahend - * @return {ComplexNumber} - */ - subtract(subtrahend) { - // Make sure we're dealing with complex number. - const complexSubtrahend = this.toComplexNumber(subtrahend); - - return new ComplexNumber({ - re: this.re - complexSubtrahend.re, - im: this.im - complexSubtrahend.im, - }); - } - - /** - * @param {ComplexNumber|number} multiplicand - * @return {ComplexNumber} - */ - multiply(multiplicand) { - // Make sure we're dealing with complex number. - const complexMultiplicand = this.toComplexNumber(multiplicand); - - return new ComplexNumber({ - re: this.re * complexMultiplicand.re - this.im * complexMultiplicand.im, - im: this.re * complexMultiplicand.im + this.im * complexMultiplicand.re, - }); - } - - /** - * @param {ComplexNumber|number} divider - * @return {ComplexNumber} - */ - divide(divider) { - // Make sure we're dealing with complex number. - const complexDivider = this.toComplexNumber(divider); - - // Get divider conjugate. - const dividerConjugate = this.conjugate(complexDivider); - - // Multiply dividend by divider's conjugate. - const finalDivident = this.multiply(dividerConjugate); - - // Calculating final divider using formula (a + bi)(a − bi) = a^2 + b^2 - const finalDivider = (complexDivider.re ** 2) + (complexDivider.im ** 2); - - return new ComplexNumber({ - re: finalDivident.re / finalDivider, - im: finalDivident.im / finalDivider, - }); - } - - /** - * @param {ComplexNumber|number} number - */ - conjugate(number) { - // Make sure we're dealing with complex number. - const complexNumber = this.toComplexNumber(number); - - return new ComplexNumber({ - re: complexNumber.re, - im: -1 * complexNumber.im, - }); - } - - /** - * @return {number} - */ - getRadius() { - return Math.sqrt((this.re ** 2) + (this.im ** 2)); - } - - /** - * @param {boolean} [inRadians] - * @return {number} - */ - getPhase(inRadians = true) { - let phase = Math.atan(Math.abs(this.im) / Math.abs(this.re)); - - if (this.re < 0 && this.im > 0) { - phase = Math.PI - phase; - } else if (this.re < 0 && this.im < 0) { - phase = -(Math.PI - phase); - } else if (this.re > 0 && this.im < 0) { - phase = -phase; - } else if (this.re === 0 && this.im > 0) { - phase = Math.PI / 2; - } else if (this.re === 0 && this.im < 0) { - phase = -Math.PI / 2; - } else if (this.re < 0 && this.im === 0) { - phase = Math.PI; - } else if (this.re > 0 && this.im === 0) { - phase = 0; - } else if (this.re === 0 && this.im === 0) { - // More correctly would be to set 'indeterminate'. - // But just for simplicity reasons let's set zero. - phase = 0; - } - - if (!inRadians) { - phase = radianToDegree(phase); - } - - return phase; - } - - /** - * @param {boolean} [inRadians] - * @return {{radius: number, phase: number}} - */ - getPolarForm(inRadians = true) { - return { - radius: this.getRadius(), - phase: this.getPhase(inRadians), - }; - } - - /** - * Convert real numbers to complex number. - * In case if complex number is provided then lefts it as is. - * - * @param {ComplexNumber|number} number - * @return {ComplexNumber} - */ - toComplexNumber(number) { - if (number instanceof ComplexNumber) { - return number; - } - - return new ComplexNumber({ re: number }); - } -} diff --git a/src/algorithms/math/complex-number/README.fr-FR.md b/src/algorithms/math/complex-number/README.fr-FR.md deleted file mode 100644 index 0e42a484d4..0000000000 --- a/src/algorithms/math/complex-number/README.fr-FR.md +++ /dev/null @@ -1,237 +0,0 @@ -# Nombre complexe - -_Read this in other languages:_ -[english](README.md). - -Un **nombre complexe** est un nombre qui peut s'écrire sous la forme -`a + b * i`, tels que `a` et `b` sont des nombres réels, -et `i` est la solution de l'équation `x^2 = −1`. -Du fait qu'aucun _nombre réel_ ne statisfait l'équation, -`i` est appellé _nombre imaginaire_. Étant donné le nombre complexe `a + b * i`, -`a` est appellé _partie réelle_, et `b`, _partie imaginaire_. - -![Complex Number](https://www.mathsisfun.com/numbers/images/complex-example.svg) - -Un nombre complexe est donc la combinaison -d'un nombre réel et d'un nombre imaginaire : - -![Complex Number](https://www.mathsisfun.com/numbers/images/complex-number.svg) - -En géométrie, les nombres complexes étendent le concept -de ligne de nombres sur une dimension à un _plan complexe à deux dimensions_ -en utilisant l'axe horizontal pour lepartie réelle -et l'axe vertical pour la partie imaginaire. Le nombre complexe `a + b * i` -peut être identifié avec le point `(a, b)` dans le plan complexe. - -Un nombre complexe dont la partie réelle est zéro est dit _imaginaire pur_; -les points pour ces nombres se trouvent sur l'axe vertical du plan complexe. -Un nombre complexe dont la partie imaginaire est zéro -peut être considéré comme un _nombre réel_; son point -se trouve sur l'axe horizontal du plan complexe. - -| Nombre complexe | Partie réelle | partie imaginaire | | -| :-------------- | :-----------: | :---------------: | ---------------- | -| 3 + 2i | 3 | 2 | | -| 5 | 5 | **0** | Purely Real | -| −6i | **0** | -6 | Purely Imaginary | - -A complex number can be visually represented as a pair of numbers `(a, b)` forming -a vector on a diagram called an _Argand diagram_, representing the _complex plane_. -`Re` is the real axis, `Im` is the imaginary axis, and `i` satisfies `i^2 = −1`. - -Un nombre complexe peut être représenté visuellement comme une paire de nombres -`(a, b)` formant un vecteur sur un diagramme appelé _diagramme d'Argand_, -représentant le _plan complexe_. -_Re_ est l'axe réel, _Im_ est l'axe imaginaire et `i` satisfait `i^2 = −1`. - -![Complex Number](https://upload.wikimedia.org/wikipedia/commons/a/af/Complex_number_illustration.svg) - -> Complexe ne veut pas dire compliqué. Cela signifie simplement que -> les deux types de nombres, réels et imaginaires, forment ensemble un complexe -> comme on le dirait d'un complexe de bâtiments (bâtiments réunis). - -## Forme polaire - -Une manière de définir un point `P` dans le plan complexe, autre que d'utiliser -les coordonnées x et y, consiste à utiliser la distance entre le point `O`, le point -dont les coordonnées sont `(0, 0)` (l'origine), et l'angle sous-tendu -entre l'axe réel positif et le segment de droite `OP` dans le sens antihoraire. -Cette idée conduit à la forme polaire des nombres complexes. - -![Polar Form](https://upload.wikimedia.org/wikipedia/commons/7/7a/Complex_number_illustration_modarg.svg) - -The _valeur absolue_ (ou module) d'un nombre complexe `z = x + yi` est: - -![Radius](https://wikimedia.org/api/rest_v1/media/math/render/svg/b59629c801aa0ddcdf17ee489e028fb9f8d4ea75) - -L'argument de `z` (parfois appelé « phase » ou « amplitude ») est l'angle -du rayon `OP` avec l'axe des réels positifs, et s'écrit `arg(z)`. Comme -avec le module, l'argument peut être trouvé à partir de la forme rectangulaire `x + yi`: - -![Phase](https://wikimedia.org/api/rest_v1/media/math/render/svg/7cbbdd9bb1dd5df86dd2b820b20f82995023e566) - -Ensemble, `r` et`φ` donnent une autre façon de représenter les nombres complexes, la -forme polaire, car la combinaison du module et de l'argument suffit à indiquer la -position d'un point sur le plan. Obtenir les coordonnées du rectangle d'origine -à partir de la forme polaire se fait par la formule appelée forme trigonométrique : - -![Polar Form](https://wikimedia.org/api/rest_v1/media/math/render/svg/b03de1e1b7b049880b5e4870b68a57bc180ff6ce) - -En utilisant la formule d'Euler, cela peut être écrit comme suit: - -![Euler's Form](https://wikimedia.org/api/rest_v1/media/math/render/svg/0a087c772212e7375cb321d83fc1fcc715cd0ed2) - -## Opérations de base - -### Addition - -Pour ajouter deux nombres complexes, nous ajoutons chaque partie séparément : - -```text -(a + b * i) + (c + d * i) = (a + c) + (b + d) * i -``` - -**Exemple** - -```text -(3 + 5i) + (4 − 3i) = (3 + 4) + (5 − 3)i = 7 + 2i -``` - -Dans un plan complexe, l'addition ressemblera à ceci: - -![Complex Addition](https://www.mathsisfun.com/algebra/images/complex-plane-vector-add.svg) - -### Soustraction - -Pour soustraire deux nombres complexes, on soustrait chaque partie séparément : - -```text -(a + b * i) - (c + d * i) = (a - c) + (b - d) * i -``` - -**Exemple** - -```text -(3 + 5i) - (4 − 3i) = (3 - 4) + (5 + 3)i = -1 + 8i -``` - -### Multiplication - -Pour multiplier les nombres complexes, chaque partie du premier nombre complexe est multipliée -par chaque partie du deuxième nombre complexe: - -On peut utiliser le "FOIL" (parfois traduit PEID en français), acronyme de -**F**irsts (Premiers), **O**uters (Extérieurs), **I**nners (Intérieurs), **L**asts (Derniers)" ( -voir [Binomial Multiplication](ttps://www.mathsisfun.com/algebra/polynomials-multiplying.html) pour plus de détails): - -![Complex Multiplication](https://www.mathsisfun.com/algebra/images/foil-complex.svg) - -- Firsts: `a × c` -- Outers: `a × di` -- Inners: `bi × c` -- Lasts: `bi × di` - -En général, cela ressemble à: - -```text -(a + bi)(c + di) = ac + adi + bci + bdi^2 -``` - -Mais il existe aussi un moyen plus rapide ! - -Utiliser cette loi: - -```text -(a + bi)(c + di) = (ac − bd) + (ad + bc)i -``` - -**Exemple** - -```text -(3 + 2i)(1 + 7i) -= 3×1 + 3×7i + 2i×1+ 2i×7i -= 3 + 21i + 2i + 14i^2 -= 3 + 21i + 2i − 14 (because i^2 = −1) -= −11 + 23i -``` - -```text -(3 + 2i)(1 + 7i) = (3×1 − 2×7) + (3×7 + 2×1)i = −11 + 23i -``` - -### Conjugués - -En mathématiques, le conjugué d'un nombre complexe z -est le nombre complexe formé de la même partie réelle que z -mais de partie imaginaire opposée. - -Un conjugué vois son signe changer au milieu comme suit: - -![Complex Conjugate](https://www.mathsisfun.com/numbers/images/complex-conjugate.svg) - -Un conjugué est souvent écrit avec un trait suscrit (barre au-dessus): - -```text -______ -5 − 3i = 5 + 3i -``` - -Dans un plan complexe, le nombre conjugué sera mirroir par rapport aux axes réels. - -![Complex Conjugate](https://upload.wikimedia.org/wikipedia/commons/6/69/Complex_conjugate_picture.svg) - -### Division - -Le conjugué est utiliser pour aider à la division de nombres complexes - -L'astuce est de _multiplier le haut et le bas par le conjugué du bas_. - -**Exemple** - -```text -2 + 3i ------- -4 − 5i -``` - -Multiplier le haut et le bas par le conjugué de `4 − 5i`: - -```text - (2 + 3i) * (4 + 5i) 8 + 10i + 12i + 15i^2 -= ------------------- = ---------------------- - (4 − 5i) * (4 + 5i) 16 + 20i − 20i − 25i^2 -``` - -Et puisque `i^2 = −1`, il s'ensuit que: - -```text - 8 + 10i + 12i − 15 −7 + 22i −7 22 -= ------------------- = -------- = -- + -- * i - 16 + 20i − 20i + 25 41 41 41 - -``` - -Il existe cependant un moyen plus direct. - -Dans l'exemple précédent, ce qui s'est passé en bas était intéressant: - -```text -(4 − 5i)(4 + 5i) = 16 + 20i − 20i − 25i -``` - -Les termes du milieu `(20i − 20i)` s'annule! Et pusique `i^2 = −1` on retrouve: - -```text -(4 − 5i)(4 + 5i) = 4^2 + 5^2 -``` - -Ce qui est vraiment un résultat assez simple. La règle générale est: - -```text -(a + bi)(a − bi) = a^2 + b^2 -``` - -## Références - -- [Wikipedia](https://fr.wikipedia.org/wiki/Nombre_complexe) -- [Math is Fun](https://www.mathsisfun.com/numbers/complex-numbers.html) diff --git a/src/algorithms/math/complex-number/README.md b/src/algorithms/math/complex-number/README.md deleted file mode 100644 index 7629aad3f0..0000000000 --- a/src/algorithms/math/complex-number/README.md +++ /dev/null @@ -1,228 +0,0 @@ -# Complex Number - -_Read this in other languages:_ -[français](README.fr-FR.md). - -A **complex number** is a number that can be expressed in the -form `a + b * i`, where `a` and `b` are real numbers, and `i` is a solution of -the equation `x^2 = −1`. Because no _real number_ satisfies this -equation, `i` is called an _imaginary number_. For the complex -number `a + b * i`, `a` is called the _real part_, and `b` is called -the _imaginary part_. - -![Complex Number](https://www.mathsisfun.com/numbers/images/complex-example.svg) - -A Complex Number is a combination of a Real Number and an Imaginary Number: - -![Complex Number](https://www.mathsisfun.com/numbers/images/complex-number.svg) - -Geometrically, complex numbers extend the concept of the one-dimensional number -line to the _two-dimensional complex plane_ by using the horizontal axis for the -real part and the vertical axis for the imaginary part. The complex -number `a + b * i` can be identified with the point `(a, b)` in the complex plane. - -A complex number whose real part is zero is said to be _purely imaginary_; the -points for these numbers lie on the vertical axis of the complex plane. A complex -number whose imaginary part is zero can be viewed as a _real number_; its point -lies on the horizontal axis of the complex plane. - -| Complex Number | Real Part | Imaginary Part | | -| :------------- | :-------: | :------------: | ---------------- | -| 3 + 2i | 3 | 2 | | -| 5 | 5 | **0** | Purely Real | -| −6i | **0** | -6 | Purely Imaginary | - -A complex number can be visually represented as a pair of numbers `(a, b)` forming -a vector on a diagram called an _Argand diagram_, representing the _complex plane_. -`Re` is the real axis, `Im` is the imaginary axis, and `i` satisfies `i^2 = −1`. - -![Complex Number](https://upload.wikimedia.org/wikipedia/commons/a/af/Complex_number_illustration.svg) - -> Complex does not mean complicated. It means the two types of numbers, real and -> imaginary, together form a complex, just like a building complex (buildings -> joined together). - -## Polar Form - -An alternative way of defining a point `P` in the complex plane, other than using -the x- and y-coordinates, is to use the distance of the point from `O`, the point -whose coordinates are `(0, 0)` (the origin), together with the angle subtended -between the positive real axis and the line segment `OP` in a counterclockwise -direction. This idea leads to the polar form of complex numbers. - -![Polar Form](https://upload.wikimedia.org/wikipedia/commons/7/7a/Complex_number_illustration_modarg.svg) - -The _absolute value_ (or modulus or magnitude) of a complex number `z = x + yi` is: - -![Radius](https://wikimedia.org/api/rest_v1/media/math/render/svg/b59629c801aa0ddcdf17ee489e028fb9f8d4ea75) - -The argument of `z` (in many applications referred to as the "phase") is the angle -of the radius `OP` with the positive real axis, and is written as `arg(z)`. As -with the modulus, the argument can be found from the rectangular form `x+yi`: - -![Phase](https://wikimedia.org/api/rest_v1/media/math/render/svg/7cbbdd9bb1dd5df86dd2b820b20f82995023e566) - -Together, `r` and `φ` give another way of representing complex numbers, the -polar form, as the combination of modulus and argument fully specify the -position of a point on the plane. Recovering the original rectangular -co-ordinates from the polar form is done by the formula called trigonometric -form: - -![Polar Form](https://wikimedia.org/api/rest_v1/media/math/render/svg/b03de1e1b7b049880b5e4870b68a57bc180ff6ce) - -Using Euler's formula this can be written as: - -![Euler's Form](https://wikimedia.org/api/rest_v1/media/math/render/svg/0a087c772212e7375cb321d83fc1fcc715cd0ed2) - -## Basic Operations - -### Adding - -To add two complex numbers we add each part separately: - -```text -(a + b * i) + (c + d * i) = (a + c) + (b + d) * i -``` - -**Example** - -```text -(3 + 5i) + (4 − 3i) = (3 + 4) + (5 − 3)i = 7 + 2i -``` - -On complex plane the adding operation will look like the following: - -![Complex Addition](https://www.mathsisfun.com/algebra/images/complex-plane-vector-add.svg) - -### Subtracting - -To subtract two complex numbers we subtract each part separately: - -```text -(a + b * i) - (c + d * i) = (a - c) + (b - d) * i -``` - -**Example** - -```text -(3 + 5i) - (4 − 3i) = (3 - 4) + (5 + 3)i = -1 + 8i -``` - -### Multiplying - -To multiply complex numbers each part of the first complex number gets multiplied -by each part of the second complex number: - -Just use "FOIL", which stands for "**F**irsts, **O**uters, **I**nners, **L**asts" ( -see [Binomial Multiplication](ttps://www.mathsisfun.com/algebra/polynomials-multiplying.html) for -more details): - -![Complex Multiplication](https://www.mathsisfun.com/algebra/images/foil-complex.svg) - -- Firsts: `a × c` -- Outers: `a × di` -- Inners: `bi × c` -- Lasts: `bi × di` - -In general it looks like this: - -```text -(a + bi)(c + di) = ac + adi + bci + bdi^2 -``` - -But there is also a quicker way! - -Use this rule: - -```text -(a + bi)(c + di) = (ac − bd) + (ad + bc)i -``` - -**Example** - -```text -(3 + 2i)(1 + 7i) -= 3×1 + 3×7i + 2i×1+ 2i×7i -= 3 + 21i + 2i + 14i^2 -= 3 + 21i + 2i − 14 (because i^2 = −1) -= −11 + 23i -``` - -```text -(3 + 2i)(1 + 7i) = (3×1 − 2×7) + (3×7 + 2×1)i = −11 + 23i -``` - -### Conjugates - -We will need to know about conjugates in a minute! - -A conjugate is where we change the sign in the middle like this: - -![Complex Conjugate](https://www.mathsisfun.com/numbers/images/complex-conjugate.svg) - -A conjugate is often written with a bar over it: - -```text -______ -5 − 3i = 5 + 3i -``` - -On the complex plane the conjugate number will be mirrored against real axes. - -![Complex Conjugate](https://upload.wikimedia.org/wikipedia/commons/6/69/Complex_conjugate_picture.svg) - -### Dividing - -The conjugate is used to help complex division. - -The trick is to _multiply both top and bottom by the conjugate of the bottom_. - -**Example** - -```text -2 + 3i ------- -4 − 5i -``` - -Multiply top and bottom by the conjugate of `4 − 5i`: - -```text - (2 + 3i) * (4 + 5i) 8 + 10i + 12i + 15i^2 -= ------------------- = ---------------------- - (4 − 5i) * (4 + 5i) 16 + 20i − 20i − 25i^2 -``` - -Now remember that `i^2 = −1`, so: - -```text - 8 + 10i + 12i − 15 −7 + 22i −7 22 -= ------------------- = -------- = -- + -- * i - 16 + 20i − 20i + 25 41 41 41 - -``` - -There is a faster way though. - -In the previous example, what happened on the bottom was interesting: - -```text -(4 − 5i)(4 + 5i) = 16 + 20i − 20i − 25i -``` - -The middle terms `(20i − 20i)` cancel out! Also `i^2 = −1` so we end up with this: - -```text -(4 − 5i)(4 + 5i) = 4^2 + 5^2 -``` - -Which is really quite a simple result. The general rule is: - -```text -(a + bi)(a − bi) = a^2 + b^2 -``` - -## References - -- [Wikipedia](https://en.wikipedia.org/wiki/Complex_number) -- [Math is Fun](https://www.mathsisfun.com/numbers/complex-numbers.html) diff --git a/src/algorithms/math/complex-number/__test__/ComplexNumber.test.js b/src/algorithms/math/complex-number/__test__/ComplexNumber.test.js deleted file mode 100644 index 4392103d28..0000000000 --- a/src/algorithms/math/complex-number/__test__/ComplexNumber.test.js +++ /dev/null @@ -1,181 +0,0 @@ -import ComplexNumber from '../ComplexNumber'; - -describe('ComplexNumber', () => { - it('should create complex numbers', () => { - const complexNumber = new ComplexNumber({ re: 1, im: 2 }); - - expect(complexNumber).toBeDefined(); - expect(complexNumber.re).toBe(1); - expect(complexNumber.im).toBe(2); - - const defaultComplexNumber = new ComplexNumber(); - expect(defaultComplexNumber.re).toBe(0); - expect(defaultComplexNumber.im).toBe(0); - }); - - it('should add complex numbers', () => { - const complexNumber1 = new ComplexNumber({ re: 1, im: 2 }); - const complexNumber2 = new ComplexNumber({ re: 3, im: 8 }); - - const complexNumber3 = complexNumber1.add(complexNumber2); - const complexNumber4 = complexNumber2.add(complexNumber1); - - expect(complexNumber3.re).toBe(1 + 3); - expect(complexNumber3.im).toBe(2 + 8); - - expect(complexNumber4.re).toBe(1 + 3); - expect(complexNumber4.im).toBe(2 + 8); - }); - - it('should add complex and natural numbers', () => { - const complexNumber = new ComplexNumber({ re: 1, im: 2 }); - const realNumber = new ComplexNumber({ re: 3 }); - - const complexNumber3 = complexNumber.add(realNumber); - const complexNumber4 = realNumber.add(complexNumber); - const complexNumber5 = complexNumber.add(3); - - expect(complexNumber3.re).toBe(1 + 3); - expect(complexNumber3.im).toBe(2); - - expect(complexNumber4.re).toBe(1 + 3); - expect(complexNumber4.im).toBe(2); - - expect(complexNumber5.re).toBe(1 + 3); - expect(complexNumber5.im).toBe(2); - }); - - it('should subtract complex numbers', () => { - const complexNumber1 = new ComplexNumber({ re: 1, im: 2 }); - const complexNumber2 = new ComplexNumber({ re: 3, im: 8 }); - - const complexNumber3 = complexNumber1.subtract(complexNumber2); - const complexNumber4 = complexNumber2.subtract(complexNumber1); - - expect(complexNumber3.re).toBe(1 - 3); - expect(complexNumber3.im).toBe(2 - 8); - - expect(complexNumber4.re).toBe(3 - 1); - expect(complexNumber4.im).toBe(8 - 2); - }); - - it('should subtract complex and natural numbers', () => { - const complexNumber = new ComplexNumber({ re: 1, im: 2 }); - const realNumber = new ComplexNumber({ re: 3 }); - - const complexNumber3 = complexNumber.subtract(realNumber); - const complexNumber4 = realNumber.subtract(complexNumber); - const complexNumber5 = complexNumber.subtract(3); - - expect(complexNumber3.re).toBe(1 - 3); - expect(complexNumber3.im).toBe(2); - - expect(complexNumber4.re).toBe(3 - 1); - expect(complexNumber4.im).toBe(-2); - - expect(complexNumber5.re).toBe(1 - 3); - expect(complexNumber5.im).toBe(2); - }); - - it('should multiply complex numbers', () => { - const complexNumber1 = new ComplexNumber({ re: 3, im: 2 }); - const complexNumber2 = new ComplexNumber({ re: 1, im: 7 }); - - const complexNumber3 = complexNumber1.multiply(complexNumber2); - const complexNumber4 = complexNumber2.multiply(complexNumber1); - const complexNumber5 = complexNumber1.multiply(5); - - expect(complexNumber3.re).toBe(-11); - expect(complexNumber3.im).toBe(23); - - expect(complexNumber4.re).toBe(-11); - expect(complexNumber4.im).toBe(23); - - expect(complexNumber5.re).toBe(15); - expect(complexNumber5.im).toBe(10); - }); - - it('should multiply complex numbers by themselves', () => { - const complexNumber = new ComplexNumber({ re: 1, im: 1 }); - - const result = complexNumber.multiply(complexNumber); - - expect(result.re).toBe(0); - expect(result.im).toBe(2); - }); - - it('should calculate i in power of two', () => { - const complexNumber = new ComplexNumber({ re: 0, im: 1 }); - - const result = complexNumber.multiply(complexNumber); - - expect(result.re).toBe(-1); - expect(result.im).toBe(0); - }); - - it('should divide complex numbers', () => { - const complexNumber1 = new ComplexNumber({ re: 2, im: 3 }); - const complexNumber2 = new ComplexNumber({ re: 4, im: -5 }); - - const complexNumber3 = complexNumber1.divide(complexNumber2); - const complexNumber4 = complexNumber1.divide(2); - - expect(complexNumber3.re).toBe(-7 / 41); - expect(complexNumber3.im).toBe(22 / 41); - - expect(complexNumber4.re).toBe(1); - expect(complexNumber4.im).toBe(1.5); - }); - - it('should return complex number in polar form', () => { - const complexNumber1 = new ComplexNumber({ re: 3, im: 3 }); - expect(complexNumber1.getPolarForm().radius).toBe(Math.sqrt((3 ** 2) + (3 ** 2))); - expect(complexNumber1.getPolarForm().phase).toBe(Math.PI / 4); - expect(complexNumber1.getPolarForm(false).phase).toBe(45); - - const complexNumber2 = new ComplexNumber({ re: -3, im: 3 }); - expect(complexNumber2.getPolarForm().radius).toBe(Math.sqrt((3 ** 2) + (3 ** 2))); - expect(complexNumber2.getPolarForm().phase).toBe(3 * (Math.PI / 4)); - expect(complexNumber2.getPolarForm(false).phase).toBe(135); - - const complexNumber3 = new ComplexNumber({ re: -3, im: -3 }); - expect(complexNumber3.getPolarForm().radius).toBe(Math.sqrt((3 ** 2) + (3 ** 2))); - expect(complexNumber3.getPolarForm().phase).toBe(-3 * (Math.PI / 4)); - expect(complexNumber3.getPolarForm(false).phase).toBe(-135); - - const complexNumber4 = new ComplexNumber({ re: 3, im: -3 }); - expect(complexNumber4.getPolarForm().radius).toBe(Math.sqrt((3 ** 2) + (3 ** 2))); - expect(complexNumber4.getPolarForm().phase).toBe(-1 * (Math.PI / 4)); - expect(complexNumber4.getPolarForm(false).phase).toBe(-45); - - const complexNumber5 = new ComplexNumber({ re: 5, im: 7 }); - expect(complexNumber5.getPolarForm().radius).toBeCloseTo(8.60); - expect(complexNumber5.getPolarForm().phase).toBeCloseTo(0.95); - expect(complexNumber5.getPolarForm(false).phase).toBeCloseTo(54.46); - - const complexNumber6 = new ComplexNumber({ re: 0, im: 0.25 }); - expect(complexNumber6.getPolarForm().radius).toBeCloseTo(0.25); - expect(complexNumber6.getPolarForm().phase).toBeCloseTo(1.57); - expect(complexNumber6.getPolarForm(false).phase).toBeCloseTo(90); - - const complexNumber7 = new ComplexNumber({ re: 0, im: -0.25 }); - expect(complexNumber7.getPolarForm().radius).toBeCloseTo(0.25); - expect(complexNumber7.getPolarForm().phase).toBeCloseTo(-1.57); - expect(complexNumber7.getPolarForm(false).phase).toBeCloseTo(-90); - - const complexNumber8 = new ComplexNumber(); - expect(complexNumber8.getPolarForm().radius).toBeCloseTo(0); - expect(complexNumber8.getPolarForm().phase).toBeCloseTo(0); - expect(complexNumber8.getPolarForm(false).phase).toBeCloseTo(0); - - const complexNumber9 = new ComplexNumber({ re: -0.25, im: 0 }); - expect(complexNumber9.getPolarForm().radius).toBeCloseTo(0.25); - expect(complexNumber9.getPolarForm().phase).toBeCloseTo(Math.PI); - expect(complexNumber9.getPolarForm(false).phase).toBeCloseTo(180); - - const complexNumber10 = new ComplexNumber({ re: 0.25, im: 0 }); - expect(complexNumber10.getPolarForm().radius).toBeCloseTo(0.25); - expect(complexNumber10.getPolarForm().phase).toBeCloseTo(0); - expect(complexNumber10.getPolarForm(false).phase).toBeCloseTo(0); - }); -}); diff --git a/src/algorithms/math/euclidean-algorithm/README.fr-FR.md b/src/algorithms/math/euclidean-algorithm/README.fr-FR.md deleted file mode 100644 index 75b6a90b88..0000000000 --- a/src/algorithms/math/euclidean-algorithm/README.fr-FR.md +++ /dev/null @@ -1,49 +0,0 @@ -# Algorithme d'Euclide - -_Read this in other languages:_ -[english](README.md). - -En mathématiques, l'algorithme d'Euclide est un algorithme qui calcule le plus grand commun diviseur (PGCD) de deux entiers, c'est-à-dire le plus grand entier qui divise les deux entiers, en laissant un reste nul. L'algorithme ne connaît pas la factorisation de ces deux nombres. - -Le PGCD de deux entiers relatifs est égal au PGCD de leurs valeurs absolues : de ce fait, on se restreint dans cette section aux entiers positifs. L'algorithme part du constat suivant : le PGCD de deux nombres n'est pas changé si on remplace le plus grand d'entre eux par leur différence. Autrement dit, `pgcd(a, b) = pgcd(b, a - b)`. Par exemple, le PGCD de `252` et `105` vaut `21` (en effet, `252 = 21 × 12` and `105 = 21 × 5`), mais c'est aussi le PGCD de `252 - 105 = 147` et `105`. Ainsi, comme le remplacement de ces nombres diminue strictement le plus grand d'entre eux, on peut continuer le processus, jusqu'à obtenir deux nombres égaux. - -En inversant les étapes, le PGCD peut être exprimé comme une somme de -les deux nombres originaux, chacun étant multiplié -par un entier positif ou négatif, par exemple `21 = 5 × 105 + (-2) × 252`. -Le fait que le PGCD puisse toujours être exprimé de cette manière est -connue sous le nom de Théorème de Bachet-Bézout. - -![GCD](https://upload.wikimedia.org/wikipedia/commons/3/37/Euclid%27s_algorithm_Book_VII_Proposition_2_3.png) - -La Méthode d'Euclide pour trouver le plus grand diviseur commun (PGCD) -de deux longueurs de départ`BA` et `DC`, toutes deux définies comme étant -multiples d'une longueur commune. La longueur `DC` étant -plus courte, elle est utilisée pour « mesurer » `BA`, mais une seule fois car -le reste `EA` est inférieur à `DC`. `EA` mesure maintenant (deux fois) -la longueur la plus courte `DC`, le reste `FC` étant plus court que `EA`. -Alors `FC` mesure (trois fois) la longueur `EA`. Parce qu'il y a -pas de reste, le processus se termine par `FC` étant le « PGCD ». -À droite, l'exemple de Nicomaque de Gérase avec les nombres `49` et `21` -ayan un PGCD de `7` (dérivé de Heath 1908: 300). - -![GCD](https://upload.wikimedia.org/wikipedia/commons/7/74/24x60.svg) - -Un de rectangle de dimensions `24 par 60` peux se carreler en carrés de `12 par 12`, -puisque `12` est le PGCD ed `24` et `60`. De façon générale, -un rectangle de dimension `a par b` peut se carreler en carrés -de côté `c`, seulement si `c` est un diviseur commun de `a` et `b`. - -![GCD](https://upload.wikimedia.org/wikipedia/commons/1/1c/Euclidean_algorithm_1071_462.gif) - -Animation basée sur la soustraction via l'algorithme euclidien. -Le rectangle initial a les dimensions `a = 1071` et `b = 462`. -Des carrés de taille `462 × 462` y sont placés en laissant un -rectangle de `462 × 147`. Ce rectangle est carrelé avec des -carrés de `147 × 147` jusqu'à ce qu'un rectangle de `21 × 147` soit laissé, -qui à son tour estcarrelé avec des carrés `21 × 21`, -ne laissant aucune zone non couverte. -La plus petite taille carrée, `21`, est le PGCD de `1071` et `462`. - -## References - -[Wikipedia](https://fr.wikipedia.org/wiki/Algorithme_d%27Euclide) diff --git a/src/algorithms/math/euclidean-algorithm/README.md b/src/algorithms/math/euclidean-algorithm/README.md deleted file mode 100644 index 89af03b15e..0000000000 --- a/src/algorithms/math/euclidean-algorithm/README.md +++ /dev/null @@ -1,60 +0,0 @@ -# Euclidean algorithm - -_Read this in other languages:_ -[français](README.fr-FR.md). - -In mathematics, the Euclidean algorithm, or Euclid's algorithm, -is an efficient method for computing the greatest common divisor -(GCD) of two numbers, the largest number that divides both of -them without leaving a remainder. - -The Euclidean algorithm is based on the principle that the -greatest common divisor of two numbers does not change if -the larger number is replaced by its difference with the -smaller number. For example, `21` is the GCD of `252` and -`105` (as `252 = 21 × 12` and `105 = 21 × 5`), and the same -number `21` is also the GCD of `105` and `252 − 105 = 147`. -Since this replacement reduces the larger of the two numbers, -repeating this process gives successively smaller pairs of -numbers until the two numbers become equal. -When that occurs, they are the GCD of the original two numbers. - -By reversing the steps, the GCD can be expressed as a sum of -the two original numbers each multiplied by a positive or -negative integer, e.g., `21 = 5 × 105 + (−2) × 252`. -The fact that the GCD can always be expressed in this way is -known as Bézout's identity. - -![GCD](https://upload.wikimedia.org/wikipedia/commons/3/37/Euclid%27s_algorithm_Book_VII_Proposition_2_3.png) - -Euclid's method for finding the greatest common divisor (GCD) -of two starting lengths `BA` and `DC`, both defined to be -multiples of a common "unit" length. The length `DC` being -shorter, it is used to "measure" `BA`, but only once because -remainder `EA` is less than `DC`. EA now measures (twice) -the shorter length `DC`, with remainder `FC` shorter than `EA`. -Then `FC` measures (three times) length `EA`. Because there is -no remainder, the process ends with `FC` being the `GCD`. -On the right Nicomachus' example with numbers `49` and `21` -resulting in their GCD of `7` (derived from Heath 1908:300). - -![GCD](https://upload.wikimedia.org/wikipedia/commons/7/74/24x60.svg) - -A `24-by-60` rectangle is covered with ten `12-by-12` square -tiles, where `12` is the GCD of `24` and `60`. More generally, -an `a-by-b` rectangle can be covered with square tiles of -side-length `c` only if `c` is a common divisor of `a` and `b`. - -![GCD](https://upload.wikimedia.org/wikipedia/commons/1/1c/Euclidean_algorithm_1071_462.gif) - -Subtraction-based animation of the Euclidean algorithm. -The initial rectangle has dimensions `a = 1071` and `b = 462`. -Squares of size `462×462` are placed within it leaving a -`462×147` rectangle. This rectangle is tiled with `147×147` -squares until a `21×147` rectangle is left, which in turn is -tiled with `21×21` squares, leaving no uncovered area. -The smallest square size, `21`, is the GCD of `1071` and `462`. - -## References - -[Wikipedia](https://en.wikipedia.org/wiki/Euclidean_algorithm) diff --git a/src/algorithms/math/euclidean-algorithm/__test__/euclideanAlgorithm.test.js b/src/algorithms/math/euclidean-algorithm/__test__/euclideanAlgorithm.test.js deleted file mode 100644 index bbf92b26a5..0000000000 --- a/src/algorithms/math/euclidean-algorithm/__test__/euclideanAlgorithm.test.js +++ /dev/null @@ -1,26 +0,0 @@ -import euclideanAlgorithm from '../euclideanAlgorithm'; - -describe('euclideanAlgorithm', () => { - it('should calculate GCD recursively', () => { - expect(euclideanAlgorithm(0, 0)).toBe(0); - expect(euclideanAlgorithm(2, 0)).toBe(2); - expect(euclideanAlgorithm(0, 2)).toBe(2); - expect(euclideanAlgorithm(1, 2)).toBe(1); - expect(euclideanAlgorithm(2, 1)).toBe(1); - expect(euclideanAlgorithm(6, 6)).toBe(6); - expect(euclideanAlgorithm(2, 4)).toBe(2); - expect(euclideanAlgorithm(4, 2)).toBe(2); - expect(euclideanAlgorithm(12, 4)).toBe(4); - expect(euclideanAlgorithm(4, 12)).toBe(4); - expect(euclideanAlgorithm(5, 13)).toBe(1); - expect(euclideanAlgorithm(27, 13)).toBe(1); - expect(euclideanAlgorithm(24, 60)).toBe(12); - expect(euclideanAlgorithm(60, 24)).toBe(12); - expect(euclideanAlgorithm(252, 105)).toBe(21); - expect(euclideanAlgorithm(105, 252)).toBe(21); - expect(euclideanAlgorithm(1071, 462)).toBe(21); - expect(euclideanAlgorithm(462, 1071)).toBe(21); - expect(euclideanAlgorithm(462, -1071)).toBe(21); - expect(euclideanAlgorithm(-462, -1071)).toBe(21); - }); -}); diff --git a/src/algorithms/math/euclidean-algorithm/__test__/euclideanAlgorithmIterative.test.js b/src/algorithms/math/euclidean-algorithm/__test__/euclideanAlgorithmIterative.test.js deleted file mode 100644 index 5fd0f846ea..0000000000 --- a/src/algorithms/math/euclidean-algorithm/__test__/euclideanAlgorithmIterative.test.js +++ /dev/null @@ -1,26 +0,0 @@ -import euclideanAlgorithmIterative from '../euclideanAlgorithmIterative'; - -describe('euclideanAlgorithmIterative', () => { - it('should calculate GCD iteratively', () => { - expect(euclideanAlgorithmIterative(0, 0)).toBe(0); - expect(euclideanAlgorithmIterative(2, 0)).toBe(2); - expect(euclideanAlgorithmIterative(0, 2)).toBe(2); - expect(euclideanAlgorithmIterative(1, 2)).toBe(1); - expect(euclideanAlgorithmIterative(2, 1)).toBe(1); - expect(euclideanAlgorithmIterative(6, 6)).toBe(6); - expect(euclideanAlgorithmIterative(2, 4)).toBe(2); - expect(euclideanAlgorithmIterative(4, 2)).toBe(2); - expect(euclideanAlgorithmIterative(12, 4)).toBe(4); - expect(euclideanAlgorithmIterative(4, 12)).toBe(4); - expect(euclideanAlgorithmIterative(5, 13)).toBe(1); - expect(euclideanAlgorithmIterative(27, 13)).toBe(1); - expect(euclideanAlgorithmIterative(24, 60)).toBe(12); - expect(euclideanAlgorithmIterative(60, 24)).toBe(12); - expect(euclideanAlgorithmIterative(252, 105)).toBe(21); - expect(euclideanAlgorithmIterative(105, 252)).toBe(21); - expect(euclideanAlgorithmIterative(1071, 462)).toBe(21); - expect(euclideanAlgorithmIterative(462, 1071)).toBe(21); - expect(euclideanAlgorithmIterative(462, -1071)).toBe(21); - expect(euclideanAlgorithmIterative(-462, -1071)).toBe(21); - }); -}); diff --git a/src/algorithms/math/euclidean-algorithm/euclideanAlgorithm.js b/src/algorithms/math/euclidean-algorithm/euclideanAlgorithm.js deleted file mode 100644 index b9cec97c19..0000000000 --- a/src/algorithms/math/euclidean-algorithm/euclideanAlgorithm.js +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Recursive version of Euclidean Algorithm of finding greatest common divisor (GCD). - * @param {number} originalA - * @param {number} originalB - * @return {number} - */ -export default function euclideanAlgorithm(originalA, originalB) { - // Make input numbers positive. - const a = Math.abs(originalA); - const b = Math.abs(originalB); - - // To make algorithm work faster instead of subtracting one number from the other - // we may use modulo operation. - return (b === 0) ? a : euclideanAlgorithm(b, a % b); -} diff --git a/src/algorithms/math/euclidean-algorithm/euclideanAlgorithmIterative.js b/src/algorithms/math/euclidean-algorithm/euclideanAlgorithmIterative.js deleted file mode 100644 index 302b5bffe9..0000000000 --- a/src/algorithms/math/euclidean-algorithm/euclideanAlgorithmIterative.js +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Iterative version of Euclidean Algorithm of finding greatest common divisor (GCD). - * @param {number} originalA - * @param {number} originalB - * @return {number} - */ -export default function euclideanAlgorithmIterative(originalA, originalB) { - // Make input numbers positive. - let a = Math.abs(originalA); - let b = Math.abs(originalB); - - // Subtract one number from another until both numbers would become the same. - // This will be out GCD. Also quit the loop if one of the numbers is zero. - while (a && b && a !== b) { - [a, b] = a > b ? [a - b, b] : [a, b - a]; - } - - // Return the number that is not equal to zero since the last subtraction (it will be a GCD). - return a || b; -} diff --git a/src/algorithms/math/euclidean-distance/README.md b/src/algorithms/math/euclidean-distance/README.md deleted file mode 100644 index d67c217efe..0000000000 --- a/src/algorithms/math/euclidean-distance/README.md +++ /dev/null @@ -1,36 +0,0 @@ -# Euclidean Distance - -In mathematics, the **Euclidean distance** between two points in Euclidean space is the length of a line segment between the two points. It can be calculated from the Cartesian coordinates of the points using the Pythagorean theorem, therefore occasionally being called the Pythagorean distance. - -![Euclidean distance between two points](https://upload.wikimedia.org/wikipedia/commons/5/55/Euclidean_distance_2d.svg) - -## Distance formulas - -### One dimension - -The distance between any two points on the real line is the absolute value of the numerical difference of their coordinates - -![One dimension formula](https://wikimedia.org/api/rest_v1/media/math/render/svg/7d75418dbec9482dbcb70f9063ad66e9cf7b5db9) - -### Two dimensions - -![Two dimensions formula](https://wikimedia.org/api/rest_v1/media/math/render/svg/9c0157084fd89f5f3d462efeedc47d3d7aa0b773) - -### Higher dimensions - -In three dimensions, for points given by their Cartesian coordinates, the distance is - -![Three dimensions formula](https://wikimedia.org/api/rest_v1/media/math/render/svg/d1d13a40a7b203b455ae6d4be8b3cce898bda625) - -Example: the distance between the two points `(8,2,6)` and `(3,5,7)`: - -![3-dimension example](https://www.mathsisfun.com/algebra/images/dist-2-points-3d.svg) - -In general, for points given by Cartesian coordinates in `n`-dimensional Euclidean space, the distance is - -![n-dimensional formula](https://wikimedia.org/api/rest_v1/media/math/render/svg/a0ef4fe055b2a51b4cca43a05e5d1cd93f758dcc) - -## References - -- [Euclidean Distance on MathIsFun](https://www.mathsisfun.com/algebra/distance-2-points.html) -- [Euclidean Distance on Wikipedia](https://en.wikipedia.org/wiki/Euclidean_distance) diff --git a/src/algorithms/math/euclidean-distance/__tests__/euclideanDistance.test.js b/src/algorithms/math/euclidean-distance/__tests__/euclideanDistance.test.js deleted file mode 100644 index 78d7d8dc86..0000000000 --- a/src/algorithms/math/euclidean-distance/__tests__/euclideanDistance.test.js +++ /dev/null @@ -1,23 +0,0 @@ -import euclideanDistance from '../euclideanDistance'; - -describe('euclideanDistance', () => { - it('should calculate euclidean distance between vectors', () => { - expect(euclideanDistance([[1]], [[2]])).toEqual(1); - expect(euclideanDistance([[2]], [[1]])).toEqual(1); - expect(euclideanDistance([[5, 8]], [[7, 3]])).toEqual(5.39); - expect(euclideanDistance([[5], [8]], [[7], [3]])).toEqual(5.39); - expect(euclideanDistance([[8, 2, 6]], [[3, 5, 7]])).toEqual(5.92); - expect(euclideanDistance([[8], [2], [6]], [[3], [5], [7]])).toEqual(5.92); - expect(euclideanDistance([[[8]], [[2]], [[6]]], [[[3]], [[5]], [[7]]])).toEqual(5.92); - }); - - it('should throw an error in case if two matrices are of different shapes', () => { - expect(() => euclideanDistance([[1]], [[[2]]])).toThrowError( - 'Matrices have different dimensions', - ); - - expect(() => euclideanDistance([[1]], [[2, 3]])).toThrowError( - 'Matrices have different shapes', - ); - }); -}); diff --git a/src/algorithms/math/euclidean-distance/euclideanDistance.js b/src/algorithms/math/euclidean-distance/euclideanDistance.js deleted file mode 100644 index afa5c2fece..0000000000 --- a/src/algorithms/math/euclidean-distance/euclideanDistance.js +++ /dev/null @@ -1,28 +0,0 @@ -/** - * @typedef {import('../matrix/Matrix.js').Matrix} Matrix - */ - -import * as mtrx from '../matrix/Matrix'; - -/** - * Calculates the euclidean distance between 2 matrices. - * - * @param {Matrix} a - * @param {Matrix} b - * @returns {number} - * @trows {Error} - */ -const euclideanDistance = (a, b) => { - mtrx.validateSameShape(a, b); - - let squaresTotal = 0; - - mtrx.walk(a, (indices, aCellValue) => { - const bCellValue = mtrx.getCellAtIndex(b, indices); - squaresTotal += (aCellValue - bCellValue) ** 2; - }); - - return Number(Math.sqrt(squaresTotal).toFixed(2)); -}; - -export default euclideanDistance; diff --git a/src/algorithms/math/factorial/README.fr-FR.md b/src/algorithms/math/factorial/README.fr-FR.md deleted file mode 100644 index aa092c1b78..0000000000 --- a/src/algorithms/math/factorial/README.fr-FR.md +++ /dev/null @@ -1,35 +0,0 @@ -# Factorielle - -_Lisez ceci dans d'autres langues:_ -[english](README.md), [_简体中文_](README.zh-CN.md). - -En mathématiques, la factorielle d'un entier naturel `n`, -notée avec un point d'exclamation `n!`, est le produit des nombres entiers -strictement positifs inférieurs ou égaux à n. Par exemple: - -``` -5! = 5 * 4 * 3 * 2 * 1 = 120 -``` - -| n | n! | -| --- | ----------------: | -| 0 | 1 | -| 1 | 1 | -| 2 | 2 | -| 3 | 6 | -| 4 | 24 | -| 5 | 120 | -| 6 | 720 | -| 7 | 5 040 | -| 8 | 40 320 | -| 9 | 362 880 | -| 10 | 3 628 800 | -| 11 | 39 916 800 | -| 12 | 479 001 600 | -| 13 | 6 227 020 800 | -| 14 | 87 178 291 200 | -| 15 | 1 307 674 368 000 | - -## References - -[Wikipedia](https://fr.wikipedia.org/wiki/Factorielle) diff --git a/src/algorithms/math/factorial/README.ka-GE.md b/src/algorithms/math/factorial/README.ka-GE.md deleted file mode 100644 index 1d02b9f7d3..0000000000 --- a/src/algorithms/math/factorial/README.ka-GE.md +++ /dev/null @@ -1,32 +0,0 @@ -# ფაქტორიალი - -მათემატიკაში `n` ნატურალური რიცხვის ფაქტორიალი -(აღინიშნება `n!` სიმბოლოთი) -არის ყველა ნატურალური რიცხვის ნამრავლი 1-იდან `n`-ის ჩათვლით. მაგალითად: - -``` -5! = 5 * 4 * 3 * 2 * 1 = 120 -``` - -| n | n! | -| --- | ----------------: | -| 0 | 1 | -| 1 | 1 | -| 2 | 2 | -| 3 | 6 | -| 4 | 24 | -| 5 | 120 | -| 6 | 720 | -| 7 | 5 040 | -| 8 | 40 320 | -| 9 | 362 880 | -| 10 | 3 628 800 | -| 11 | 39 916 800 | -| 12 | 479 001 600 | -| 13 | 6 227 020 800 | -| 14 | 87 178 291 200 | -| 15 | 1 307 674 368 000 | - -## სქოლიო - -[Wikipedia](https://ka.wikipedia.org/wiki/%E1%83%9B%E1%83%90%E1%83%97%E1%83%94%E1%83%9B%E1%83%90%E1%83%A2%E1%83%98%E1%83%99%E1%83%A3%E1%83%A0%E1%83%98_%E1%83%A4%E1%83%90%E1%83%A5%E1%83%A2%E1%83%9D%E1%83%A0%E1%83%98%E1%83%90%E1%83%9A%E1%83%98) diff --git a/src/algorithms/math/factorial/README.md b/src/algorithms/math/factorial/README.md deleted file mode 100644 index 9c75b41aae..0000000000 --- a/src/algorithms/math/factorial/README.md +++ /dev/null @@ -1,35 +0,0 @@ -# Factorial - -_Read this in other languages:_ -[_简体中文_](README.zh-CN.md), [_Français_](README.fr-FR.md), [_Türkçe_](README.tr-TR.md), [_ქართული_](README.ka-GE.md), [_Українська_](README.uk-UA.md). - -In mathematics, the factorial of a non-negative integer `n`, -denoted by `n!`, is the product of all positive integers less -than or equal to `n`. For example: - -``` -5! = 5 * 4 * 3 * 2 * 1 = 120 -``` - -| n | n! | -| --- | ----------------: | -| 0 | 1 | -| 1 | 1 | -| 2 | 2 | -| 3 | 6 | -| 4 | 24 | -| 5 | 120 | -| 6 | 720 | -| 7 | 5 040 | -| 8 | 40 320 | -| 9 | 362 880 | -| 10 | 3 628 800 | -| 11 | 39 916 800 | -| 12 | 479 001 600 | -| 13 | 6 227 020 800 | -| 14 | 87 178 291 200 | -| 15 | 1 307 674 368 000 | - -## References - -[Wikipedia](https://en.wikipedia.org/wiki/Factorial) diff --git a/src/algorithms/math/factorial/README.tr-TR.md b/src/algorithms/math/factorial/README.tr-TR.md deleted file mode 100644 index 68ce21a299..0000000000 --- a/src/algorithms/math/factorial/README.tr-TR.md +++ /dev/null @@ -1,38 +0,0 @@ -# Faktöriyel - -_Bunu diğer dillerde okuyun:_ -[_简体中文_](README.zh-CN.md), [français](README.fr-FR.md). - -Faktöriyel, matematikte, sağına ünlem işareti konulmuş sayıya -verilen isim, daha genel olan Gama fonksiyonunun tam sayılarla -sınırlanmış özel bir durumudur. 1'den başlayarak belirli bir -sayma sayısına kadar olan sayıların çarpımına o sayının -faktöriyeli denir. Basit bir şekilde faktöriyel, n tane ayrık -elemanın kaç farklı şekilde sıralanabileceğidir. - -``` -5! = 5 * 4 * 3 * 2 * 1 = 120 -``` - -| n | n! | -| --- | ----------------: | -| 0 | 1 | -| 1 | 1 | -| 2 | 2 | -| 3 | 6 | -| 4 | 24 | -| 5 | 120 | -| 6 | 720 | -| 7 | 5 040 | -| 8 | 40 320 | -| 9 | 362 880 | -| 10 | 3 628 800 | -| 11 | 39 916 800 | -| 12 | 479 001 600 | -| 13 | 6 227 020 800 | -| 14 | 87 178 291 200 | -| 15 | 1 307 674 368 000 | - -## Referanslar - -[Wikipedia](https://en.wikipedia.org/wiki/Factorial) diff --git a/src/algorithms/math/factorial/README.uk-UA.md b/src/algorithms/math/factorial/README.uk-UA.md deleted file mode 100644 index bf75963113..0000000000 --- a/src/algorithms/math/factorial/README.uk-UA.md +++ /dev/null @@ -1,33 +0,0 @@ -# Факторіал - -_Прочитайте це іншими мовами:_ -[_English_](README.md), [_简体中文_](README.zh-CN.md), [_Français_](README.fr-FR.md), [_Türkçe_](README.tr-TR.md), [_ქართული_](README.ka-GE.md). - -У математиці факторіал невід'ємного цілого числа `n`, позначений `n!`, є добутком усіх натуральних чисел, менших або рівних `n`. Наприклад: - -``` -5! = 5 * 4 * 3 * 2 * 1 = 120 -``` - -| n | n! | -| --- | ----------------: | -| 0 | 1 | -| 1 | 1 | -| 2 | 2 | -| 3 | 6 | -| 4 | 24 | -| 5 | 120 | -| 6 | 720 | -| 7 | 5 040 | -| 8 | 40 320 | -| 9 | 362 880 | -| 10 | 3 628 800 | -| 11 | 39 916 800 | -| 12 | 479 001 600 | -| 13 | 6 227 020 800 | -| 14 | 87 178 291 200 | -| 15 | 1 307 674 368 000 | - -## Посилання - -[Wikipedia](https://uk.wikipedia.org/wiki/%D0%A4%D0%B0%D0%BA%D1%82%D0%BE%D1%80%D1%96%D0%B0%D0%BB) diff --git a/src/algorithms/math/factorial/README.zh-CN.md b/src/algorithms/math/factorial/README.zh-CN.md deleted file mode 100644 index 89bcff1ff2..0000000000 --- a/src/algorithms/math/factorial/README.zh-CN.md +++ /dev/null @@ -1,27 +0,0 @@ -# 阶乘 - -在数学上, 一个正整数 `n` 的阶乘 (写作 `n!`), 就是所有小于等于 `n` 的正整数的乘积. 比如: - -``` -5! = 5 * 4 * 3 * 2 * 1 = 120 -``` - -| n | n! | -| ----- | --------------------------: | -| 0 | 1 | -| 1 | 1 | -| 2 | 2 | -| 3 | 6 | -| 4 | 24 | -| 5 | 120 | -| 6 | 720 | -| 7 | 5 040 | -| 8 | 40 320 | -| 9 | 362 880 | -| 10 | 3 628 800 | -| 11 | 39 916 800 | -| 12 | 479 001 600 | -| 13 | 6 227 020 800 | -| 14 | 87 178 291 200 | -| 15 | 1 307 674 368 000 | - diff --git a/src/algorithms/math/factorial/__test__/factorial.test.js b/src/algorithms/math/factorial/__test__/factorial.test.js deleted file mode 100644 index bf6aa0ecbd..0000000000 --- a/src/algorithms/math/factorial/__test__/factorial.test.js +++ /dev/null @@ -1,11 +0,0 @@ -import factorial from '../factorial'; - -describe('factorial', () => { - it('should calculate factorial', () => { - expect(factorial(0)).toBe(1); - expect(factorial(1)).toBe(1); - expect(factorial(5)).toBe(120); - expect(factorial(8)).toBe(40320); - expect(factorial(10)).toBe(3628800); - }); -}); diff --git a/src/algorithms/math/factorial/__test__/factorialRecursive.test.js b/src/algorithms/math/factorial/__test__/factorialRecursive.test.js deleted file mode 100644 index 9029faee0a..0000000000 --- a/src/algorithms/math/factorial/__test__/factorialRecursive.test.js +++ /dev/null @@ -1,11 +0,0 @@ -import factorialRecursive from '../factorialRecursive'; - -describe('factorialRecursive', () => { - it('should calculate factorial', () => { - expect(factorialRecursive(0)).toBe(1); - expect(factorialRecursive(1)).toBe(1); - expect(factorialRecursive(5)).toBe(120); - expect(factorialRecursive(8)).toBe(40320); - expect(factorialRecursive(10)).toBe(3628800); - }); -}); diff --git a/src/algorithms/math/factorial/factorial.js b/src/algorithms/math/factorial/factorial.js deleted file mode 100644 index 6c717d051f..0000000000 --- a/src/algorithms/math/factorial/factorial.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * @param {number} number - * @return {number} - */ -export default function factorial(number) { - let result = 1; - - for (let i = 2; i <= number; i += 1) { - result *= i; - } - - return result; -} diff --git a/src/algorithms/math/factorial/factorialRecursive.js b/src/algorithms/math/factorial/factorialRecursive.js deleted file mode 100644 index e2b4aec6c9..0000000000 --- a/src/algorithms/math/factorial/factorialRecursive.js +++ /dev/null @@ -1,7 +0,0 @@ -/** - * @param {number} number - * @return {number} - */ -export default function factorialRecursive(number) { - return number > 1 ? number * factorialRecursive(number - 1) : 1; -} diff --git a/src/algorithms/math/fast-powering/README.fr-FR.md b/src/algorithms/math/fast-powering/README.fr-FR.md deleted file mode 100644 index ba44244cc8..0000000000 --- a/src/algorithms/math/fast-powering/README.fr-FR.md +++ /dev/null @@ -1,73 +0,0 @@ -# Algorithme d'exponentiation rapide - -_Read this in other languages:_ -[english](README.md). - -En algèbre, une **puissance** d'un nombre est le résultat de la multiplication répétée de ce nombre avec lui-même. - -Elle est souvent notée en assortissant le nombre d'un entier, typographié en exposant, qui indique le nombre de fois qu'apparaît le nombre comme facteur dans cette multiplication. - -![Power](https://www.mathsisfun.com/algebra/images/exponent-8-2.svg) - -## Implémentation « naïve » - -Comment trouver `a` élevé à la puissance `b` ? - -On multiplie `a` avec lui-même, `b` nombre de fois. -Ainsi, `a^b = a * a * a * ... * a` (`b` occurrences de `a`). - -Cette opération aura un complexité linéaire, notée `O(n)`, -car la multiplication aura lieu exactement `n` fois. - -## Algorithme d'exponentiation rapide - -Peut-on faire mieux que cette implémentation naïve? -Oui, on peut réduire le nombre de puissance à un complexité de `O(log(n))`. - -Cet algorithme utilise l'approche « diviser pour mieux régner » -pour calculer cette puissance. -En l'état, cet algorithme fonctionne pour deux entiers positifs `X` et `Y`. - -L'idée derrière cet algorithme est basée sur l'observation suivante. - -Lorsque `Y` est **pair**: - -```text -X^Y = X^(Y/2) * X^(Y/2) -``` - -Lorsque `Y` est **impair**: - -```text -X^Y = X^(Y//2) * X^(Y//2) * X -où Y//2 est le résultat de la division entière de Y par 2. -``` - -**Par exemple** - -```text -2^4 = (2 * 2) * (2 * 2) = (2^2) * (2^2) -``` - -```text -2^5 = (2 * 2) * (2 * 2) * 2 = (2^2) * (2^2) * (2) -``` - -Ainsi, puisqu'à chaque étape on doits calculer -deux fois la même puissance `X ^ (Y / 2)`, -on peut optimiser en l'enregistrant dans une variable intermédiaire -pour éviter son calcul en double. - -**Complexité en temps** - -Comme à chaque itération nous réduisons la puissance de moitié, -nous appelons récursivement la fonction `log(n)` fois. Le complexité de temps de cet algorithme est donc réduite à: - -```text -O(log(n)) -``` - -## Références - -- [YouTube](https://www.youtube.com/watch?v=LUWavfN9zEo&index=80&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8&t=0s) -- [Wikipedia](https://fr.wikipedia.org/wiki/Exponentiation_rapide) diff --git a/src/algorithms/math/fast-powering/README.md b/src/algorithms/math/fast-powering/README.md deleted file mode 100644 index 2c2619d2ef..0000000000 --- a/src/algorithms/math/fast-powering/README.md +++ /dev/null @@ -1,71 +0,0 @@ -# Fast Powering Algorithm - -_Read this in other languages:_ -[français](README.fr-FR.md). - -**The power of a number** says how many times to use the number in a -multiplication. - -It is written as a small number to the right and above the base number. - -![Power](https://www.mathsisfun.com/algebra/images/exponent-8-2.svg) - -## Naive Algorithm Complexity - -How to find `a` raised to the power `b`? - -We multiply `a` to itself, `b` times. That -is, `a^b = a * a * a * ... * a` (`b` occurrences of `a`). - -This operation will take `O(n)` time since we need to do multiplication operation -exactly `n` times. - -## Fast Power Algorithm - -Can we do better than naive algorithm does? Yes we may solve the task of -powering in `O(log(n))` time. - -The algorithm uses divide and conquer approach to compute power. Currently the -algorithm work for two positive integers `X` and `Y`. - -The idea behind the algorithm is based on the fact that: - -For **even** `Y`: - -```text -X^Y = X^(Y/2) * X^(Y/2) -``` - -For **odd** `Y`: - -```text -X^Y = X^(Y//2) * X^(Y//2) * X -where Y//2 is result of division of Y by 2 without reminder. -``` - -**For example** - -```text -2^4 = (2 * 2) * (2 * 2) = (2^2) * (2^2) -``` - -```text -2^5 = (2 * 2) * (2 * 2) * 2 = (2^2) * (2^2) * (2) -``` - -Now, since on each step we need to compute the same `X^(Y/2)` power twice we may optimise -it by saving it to some intermediate variable to avoid its duplicate calculation. - -**Time Complexity** - -Since each iteration we split the power by half then we will call function -recursively `log(n)` times. This the time complexity of the algorithm is reduced to: - -```text -O(log(n)) -``` - -## References - -- [YouTube](https://www.youtube.com/watch?v=LUWavfN9zEo&index=80&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8&t=0s) -- [Wikipedia](https://en.wikipedia.org/wiki/Exponentiation_by_squaring) diff --git a/src/algorithms/math/fast-powering/__test__/fastPowering.test.js b/src/algorithms/math/fast-powering/__test__/fastPowering.test.js deleted file mode 100644 index 0a5da7561a..0000000000 --- a/src/algorithms/math/fast-powering/__test__/fastPowering.test.js +++ /dev/null @@ -1,23 +0,0 @@ -import fastPowering from '../fastPowering'; - -describe('fastPowering', () => { - it('should compute power in log(n) time', () => { - expect(fastPowering(1, 1)).toBe(1); - expect(fastPowering(2, 0)).toBe(1); - expect(fastPowering(2, 2)).toBe(4); - expect(fastPowering(2, 3)).toBe(8); - expect(fastPowering(2, 4)).toBe(16); - expect(fastPowering(2, 5)).toBe(32); - expect(fastPowering(2, 6)).toBe(64); - expect(fastPowering(2, 7)).toBe(128); - expect(fastPowering(2, 8)).toBe(256); - expect(fastPowering(3, 4)).toBe(81); - expect(fastPowering(190, 2)).toBe(36100); - expect(fastPowering(11, 5)).toBe(161051); - expect(fastPowering(13, 11)).toBe(1792160394037); - expect(fastPowering(9, 16)).toBe(1853020188851841); - expect(fastPowering(16, 16)).toBe(18446744073709552000); - expect(fastPowering(7, 21)).toBe(558545864083284000); - expect(fastPowering(100, 9)).toBe(1000000000000000000); - }); -}); diff --git a/src/algorithms/math/fast-powering/fastPowering.js b/src/algorithms/math/fast-powering/fastPowering.js deleted file mode 100644 index 4f4a6b3571..0000000000 --- a/src/algorithms/math/fast-powering/fastPowering.js +++ /dev/null @@ -1,30 +0,0 @@ -/** - * Fast Powering Algorithm. - * Recursive implementation to compute power. - * - * Complexity: log(n) - * - * @param {number} base - Number that will be raised to the power. - * @param {number} power - The power that number will be raised to. - * @return {number} - */ -export default function fastPowering(base, power) { - if (power === 0) { - // Anything that is raised to the power of zero is 1. - return 1; - } - - if (power % 2 === 0) { - // If the power is even... - // we may recursively redefine the result via twice smaller powers: - // x^8 = x^4 * x^4. - const multiplier = fastPowering(base, power / 2); - return multiplier * multiplier; - } - - // If the power is odd... - // we may recursively redefine the result via twice smaller powers: - // x^9 = x^4 * x^4 * x. - const multiplier = fastPowering(base, Math.floor(power / 2)); - return multiplier * multiplier * base; -} diff --git a/src/algorithms/math/fibonacci/README.fr-FR.md b/src/algorithms/math/fibonacci/README.fr-FR.md deleted file mode 100644 index 81e3549b0d..0000000000 --- a/src/algorithms/math/fibonacci/README.fr-FR.md +++ /dev/null @@ -1,24 +0,0 @@ -# Nombre de Fibonacci - -_Read this in other languages:_ -[english](README.md), -[ქართული](README.ka-GE.md). - -En mathématiques, la suite de Fibonacci est une suite d'entiers -dans laquelle chaque terme (après les deux premiers) -est la somme des deux termes qui le précèdent. -Les termes de cette suite sont appelés nombres de Fibonacci: - -`0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...` - -Les carrés de Fibonacci en spirale s'ajustent ensemble pour former une spirale d'or. - -![Fibonacci](https://upload.wikimedia.org/wikipedia/commons/d/db/34%2A21-FibonacciBlocks.png) - -La spirale de Fibonacci: approximation d'une spirale d'or créée en dessinant des arcs de cercle reliant les coins opposés de carrés dans un pavage Fibonacci[4] . Celui-ci utilise des carrés de tailles 1, 1, 2, 3, 5, 8, 13, 21, et 34. - -![Fibonacci Spiral](https://upload.wikimedia.org/wikipedia/commons/2/2e/FibonacciSpiral.svg) - -## References - -- [Wikipedia](https://fr.wikipedia.org/wiki/Suite_de_Fibonacci) diff --git a/src/algorithms/math/fibonacci/README.ka-GE.md b/src/algorithms/math/fibonacci/README.ka-GE.md deleted file mode 100644 index ae7e11218b..0000000000 --- a/src/algorithms/math/fibonacci/README.ka-GE.md +++ /dev/null @@ -1,20 +0,0 @@ -# ფიბონაჩის რიცხვი - -მათემატიკაში ფიბონაჩის მიმდევრობა წარმოადგენს მთელ რიცხვთა მიმდევრობას, -რომელშიც ყოველი რიცხვი (პირველი ორი რიცხვის შემდეგ) -მისი წინამორბედი ორი რიცხვის -ჯამის ტოლია: - -`0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...` - -კვადრატების წყობა, სადაც ყოველი კვადრატის გვერდების სიგრძე, თანმიმდევრობით, ფიბონაჩის რიცხვებს შეესაბამება - -![Fibonacci](https://upload.wikimedia.org/wikipedia/commons/d/db/34%2A21-FibonacciBlocks.png) - -ფიბონაჩის სპირალი: ოქროს სპირალის აპროქსიმაცია, რომელიც შექმნილია კვადრატების მოპირდაპირე კუთხეებს შორის შემაერთებელი რკალების გავლებით;[4] ამ შემთხვევაში, გამოყენებულ კვადრატთა [გვერდების] ზომებია: 1, 1, 2, 3, 5, 8, 13 და 21. - -![Fibonacci Spiral](https://upload.wikimedia.org/wikipedia/commons/2/2e/FibonacciSpiral.svg) - -## სქოლიო - -- [Wikipedia](https://en.wikipedia.org/wiki/Fibonacci_number) diff --git a/src/algorithms/math/fibonacci/README.md b/src/algorithms/math/fibonacci/README.md deleted file mode 100644 index 3d476c5020..0000000000 --- a/src/algorithms/math/fibonacci/README.md +++ /dev/null @@ -1,25 +0,0 @@ -# Fibonacci Number - -_Read this in other languages:_ -[français](README.fr-FR.md), -[简体中文](README.zh-CN.md), -[ქართული](README.ka-GE.md). - -In mathematics, the Fibonacci numbers are the numbers in the following -integer sequence, called the Fibonacci sequence, and characterized by -the fact that every number after the first two is the sum of the two -preceding ones: - -`0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...` - -A tiling with squares whose side lengths are successive Fibonacci numbers - -![Fibonacci](https://upload.wikimedia.org/wikipedia/commons/d/db/34%2A21-FibonacciBlocks.png) - -The Fibonacci spiral: an approximation of the golden spiral created by drawing circular arcs connecting the opposite corners of squares in the Fibonacci tiling;[4] this one uses squares of sizes 1, 1, 2, 3, 5, 8, 13 and 21. - -![Fibonacci Spiral](https://upload.wikimedia.org/wikipedia/commons/2/2e/FibonacciSpiral.svg) - -## References - -- [Wikipedia](https://en.wikipedia.org/wiki/Fibonacci_number) diff --git a/src/algorithms/math/fibonacci/README.zh-CN.md b/src/algorithms/math/fibonacci/README.zh-CN.md deleted file mode 100644 index 20378000d4..0000000000 --- a/src/algorithms/math/fibonacci/README.zh-CN.md +++ /dev/null @@ -1,23 +0,0 @@ -# 斐波那契数 - -_Read this in other languages:_ -[français](README.fr-FR.md), -[english](README.md), -[ქართული](README.ka-GE.md). - -在数学中,斐波那契数是以下整数序列(称为斐波那契数列)中的数字,其特征在于前两个数字之后的每个数字都是前两个数字的和: - -`0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...` - -边长为连续斐波纳契数的正方形平铺 - -![Fibonacci](https://upload.wikimedia.org/wikipedia/commons/d/db/34%2A21-FibonacciBlocks.png) - - -斐波那契螺旋:通过绘制连接斐波那契平铺中正方形的相对角的圆弧而创建的金色螺旋的近似值; [4]该三角形使用大小为1、1、2、3、5、8、13和21的正方形。 - -![Fibonacci Spiral](https://upload.wikimedia.org/wikipedia/commons/2/2e/FibonacciSpiral.svg) - -## References - -- [Wikipedia](https://en.wikipedia.org/wiki/Fibonacci_number) diff --git a/src/algorithms/math/fibonacci/__test__/fibonacci.test.js b/src/algorithms/math/fibonacci/__test__/fibonacci.test.js deleted file mode 100644 index ffbee8d9ea..0000000000 --- a/src/algorithms/math/fibonacci/__test__/fibonacci.test.js +++ /dev/null @@ -1,16 +0,0 @@ -import fibonacci from '../fibonacci'; - -describe('fibonacci', () => { - it('should calculate fibonacci correctly', () => { - expect(fibonacci(1)).toEqual([1]); - expect(fibonacci(2)).toEqual([1, 1]); - expect(fibonacci(3)).toEqual([1, 1, 2]); - expect(fibonacci(4)).toEqual([1, 1, 2, 3]); - expect(fibonacci(5)).toEqual([1, 1, 2, 3, 5]); - expect(fibonacci(6)).toEqual([1, 1, 2, 3, 5, 8]); - expect(fibonacci(7)).toEqual([1, 1, 2, 3, 5, 8, 13]); - expect(fibonacci(8)).toEqual([1, 1, 2, 3, 5, 8, 13, 21]); - expect(fibonacci(9)).toEqual([1, 1, 2, 3, 5, 8, 13, 21, 34]); - expect(fibonacci(10)).toEqual([1, 1, 2, 3, 5, 8, 13, 21, 34, 55]); - }); -}); diff --git a/src/algorithms/math/fibonacci/__test__/fibonacciNth.test.js b/src/algorithms/math/fibonacci/__test__/fibonacciNth.test.js deleted file mode 100644 index 4a098eba70..0000000000 --- a/src/algorithms/math/fibonacci/__test__/fibonacciNth.test.js +++ /dev/null @@ -1,23 +0,0 @@ -import fibonacciNth from '../fibonacciNth'; - -describe('fibonacciNth', () => { - it('should calculate fibonacci correctly', () => { - expect(fibonacciNth(1)).toBe(1); - expect(fibonacciNth(2)).toBe(1); - expect(fibonacciNth(3)).toBe(2); - expect(fibonacciNth(4)).toBe(3); - expect(fibonacciNth(5)).toBe(5); - expect(fibonacciNth(6)).toBe(8); - expect(fibonacciNth(7)).toBe(13); - expect(fibonacciNth(8)).toBe(21); - expect(fibonacciNth(20)).toBe(6765); - expect(fibonacciNth(30)).toBe(832040); - expect(fibonacciNth(50)).toBe(12586269025); - expect(fibonacciNth(70)).toBe(190392490709135); - expect(fibonacciNth(71)).toBe(308061521170129); - expect(fibonacciNth(72)).toBe(498454011879264); - expect(fibonacciNth(73)).toBe(806515533049393); - expect(fibonacciNth(74)).toBe(1304969544928657); - expect(fibonacciNth(75)).toBe(2111485077978050); - }); -}); diff --git a/src/algorithms/math/fibonacci/__test__/fibonacciNthClosedForm.test.js b/src/algorithms/math/fibonacci/__test__/fibonacciNthClosedForm.test.js deleted file mode 100644 index 4828ef5827..0000000000 --- a/src/algorithms/math/fibonacci/__test__/fibonacciNthClosedForm.test.js +++ /dev/null @@ -1,26 +0,0 @@ -import fibonacciNthClosedForm from '../fibonacciNthClosedForm'; - -describe('fibonacciClosedForm', () => { - it('should throw an error when trying to calculate fibonacci for not allowed positions', () => { - const calculateFibonacciForNotAllowedPosition = () => { - fibonacciNthClosedForm(76); - }; - - expect(calculateFibonacciForNotAllowedPosition).toThrow(); - }); - - it('should calculate fibonacci correctly', () => { - expect(fibonacciNthClosedForm(1)).toBe(1); - expect(fibonacciNthClosedForm(2)).toBe(1); - expect(fibonacciNthClosedForm(3)).toBe(2); - expect(fibonacciNthClosedForm(4)).toBe(3); - expect(fibonacciNthClosedForm(5)).toBe(5); - expect(fibonacciNthClosedForm(6)).toBe(8); - expect(fibonacciNthClosedForm(7)).toBe(13); - expect(fibonacciNthClosedForm(8)).toBe(21); - expect(fibonacciNthClosedForm(20)).toBe(6765); - expect(fibonacciNthClosedForm(30)).toBe(832040); - expect(fibonacciNthClosedForm(50)).toBe(12586269025); - expect(fibonacciNthClosedForm(70)).toBe(190392490709135); - }); -}); diff --git a/src/algorithms/math/fibonacci/fibonacci.js b/src/algorithms/math/fibonacci/fibonacci.js deleted file mode 100644 index 4caa1d9bd6..0000000000 --- a/src/algorithms/math/fibonacci/fibonacci.js +++ /dev/null @@ -1,29 +0,0 @@ -/** - * Return a fibonacci sequence as an array. - * - * @param n - * @return {number[]} - */ -export default function fibonacci(n) { - const fibSequence = [1]; - - let currentValue = 1; - let previousValue = 0; - - if (n === 1) { - return fibSequence; - } - - let iterationsCounter = n - 1; - - while (iterationsCounter) { - currentValue += previousValue; - previousValue = currentValue - previousValue; - - fibSequence.push(currentValue); - - iterationsCounter -= 1; - } - - return fibSequence; -} diff --git a/src/algorithms/math/fibonacci/fibonacciNth.js b/src/algorithms/math/fibonacci/fibonacciNth.js deleted file mode 100644 index 729224470a..0000000000 --- a/src/algorithms/math/fibonacci/fibonacciNth.js +++ /dev/null @@ -1,25 +0,0 @@ -/** - * Calculate fibonacci number at specific position using Dynamic Programming approach. - * - * @param n - * @return {number} - */ -export default function fibonacciNth(n) { - let currentValue = 1; - let previousValue = 0; - - if (n === 1) { - return 1; - } - - let iterationsCounter = n - 1; - - while (iterationsCounter) { - currentValue += previousValue; - previousValue = currentValue - previousValue; - - iterationsCounter -= 1; - } - - return currentValue; -} diff --git a/src/algorithms/math/fibonacci/fibonacciNthClosedForm.js b/src/algorithms/math/fibonacci/fibonacciNthClosedForm.js deleted file mode 100644 index e2a2a367cb..0000000000 --- a/src/algorithms/math/fibonacci/fibonacciNthClosedForm.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * Calculate fibonacci number at specific position using closed form function (Binet's formula). - * @see: https://en.wikipedia.org/wiki/Fibonacci_number#Closed-form_expression - * - * @param {number} position - Position number of fibonacci sequence (must be number from 1 to 75). - * @return {number} - */ -export default function fibonacciClosedForm(position) { - const topMaxValidPosition = 70; - - // Check that position is valid. - if (position < 1 || position > topMaxValidPosition) { - throw new Error(`Can't handle position smaller than 1 or greater than ${topMaxValidPosition}`); - } - - // Calculate √5 to re-use it in further formulas. - const sqrt5 = Math.sqrt(5); - // Calculate φ constant (≈ 1.61803). - const phi = (1 + sqrt5) / 2; - - // Calculate fibonacci number using Binet's formula. - return Math.floor((phi ** position) / sqrt5 + 0.5); -} diff --git a/src/algorithms/math/fourier-transform/README.fr-FR.md b/src/algorithms/math/fourier-transform/README.fr-FR.md deleted file mode 100644 index 0d345164c7..0000000000 --- a/src/algorithms/math/fourier-transform/README.fr-FR.md +++ /dev/null @@ -1,135 +0,0 @@ -# Transformation de Fourier - -_Read this in other languages:_ -[english](README.md). - -## Définitions - -La transformation de Fourier (**ℱ**) est une opération qui transforme -une fonction intégrable sur ℝ en une autre fonction, -décrivant le spectre fréquentiel de cette dernière - -La **Transformée de Fourier Discrète** (**TFD**) convertit une séquence finie d'échantillons également espacés d'une fonction, dans une séquence de même longueur d'échantillons, également espacés de la Transformée de Fourier à temps discret (TFtd), qui est une fonction complexe de la fréquence. -L'intervalle auquel le TFtd est échantillonné est l'inverse de la durée de la séquence d'entrée. -Une TFD inverse est une série de Fourier, utilisant les échantillons TFtd comme coefficients de sinusoïdes complexes aux fréquences TFtd correspondantes. Elle a les mêmes valeurs d'échantillonnage que la -séquence d'entrée originale. On dit donc que la TFD est une représentation du domaine fréquentiel -de la séquence d'entrée d'origine. Si la séquence d'origine couvre toutes les -valeurs non nulles d'une fonction, sa TFtd est continue (et périodique), et la TFD fournit -les échantillons discrets d'une fenêtre. Si la séquence d'origine est un cycle d'une fonction périodique, la TFD fournit toutes les valeurs non nulles d'une fenêtre TFtd. - -Transformée de Fourier Discrète converti une séquence de `N` nombres complexes: - -{xn} = x0, x1, x2 ..., xN-1 - -en une atre séquence de nombres complexes:: - -{Xk} = X0, X1, X2 ..., XN-1 - -décrite par: - -![DFT](https://wikimedia.org/api/rest_v1/media/math/render/svg/1af0a78dc50bbf118ab6bd4c4dcc3c4ff8502223) - -The **Transformée de Fourier à temps discret** (**TFtd**) est une forme d'analyse de Fourier -qui s'applique aux échantillons uniformément espacés d'une fonction continue. Le terme "temps discret" fait référence au fait que la transformée fonctionne sur des données discrètes -(échantillons) dont l'intervalle a souvent des unités de temps. -À partir des seuls échantillons, elle produit une fonction de fréquence qui est une somme périodique de la -Transformée de Fourier continue de la fonction continue d'origine. - -A **Transformation de Fourier rapide** (**FFT** pour Fast Fourier Transform) est un algorithme de calcul de la transformation de Fourier discrète (TFD). Il est couramment utilisé en traitement numérique du signal pour transformer des données discrètes du domaine temporel dans le domaine fréquentiel, en particulier dans les oscilloscopes numériques (les analyseurs de spectre utilisant plutôt des filtres analogiques, plus précis). Son efficacité permet de réaliser des filtrages en modifiant le spectre et en utilisant la transformation inverse (filtre à réponse impulsionnelle finie). - -Cette transformation peut être illustée par la formule suivante. Sur la période de temps mesurée -dans le diagramme, le signal contient 3 fréquences dominantes distinctes. - -Vue d'un signal dans le domaine temporel et fréquentiel: - -![FFT](https://upload.wikimedia.org/wikipedia/commons/6/61/FFT-Time-Frequency-View.png) - -An FFT algorithm computes the discrete Fourier transform (DFT) of a sequence, or -its inverse (IFFT). Fourier analysis converts a signal from its original domain -to a representation in the frequency domain and vice versa. An FFT rapidly -computes such transformations by factorizing the DFT matrix into a product of -sparse (mostly zero) factors. As a result, it manages to reduce the complexity of -computing the DFT from O(n2), which arises if one simply applies the -definition of DFT, to O(n log n), where n is the data size. - -Un algorithme FFT calcule la Transformée de Fourier discrète (TFD) d'une séquence, ou -son inverse (IFFT). L'analyse de Fourier convertit un signal de son domaine d'origine -en une représentation dans le domaine fréquentiel et vice versa. Une FFT -calcule rapidement ces transformations en factorisant la matrice TFD en un produit de -facteurs dispersés (généralement nuls). En conséquence, il parvient à réduire la complexité de -calcul de la TFD de O (n 2 ), qui survient si l'on applique simplement la -définition de TFD, à O (n log n), où n est la taille des données. - -Voici une analyse de Fourier discrète d'une somme d'ondes cosinus à 10, 20, 30, 40, -et 50 Hz: - -![FFT](https://upload.wikimedia.org/wikipedia/commons/6/64/FFT_of_Cosine_Summation_Function.png) - -## Explanation - -La Transformée de Fourier est l'une des connaissances les plus importante jamais découverte. Malheureusement, le -son sens est enfoui dans des équations denses:: - -![](https://betterexplained.com/wp-content/plugins/wp-latexrender/pictures/45c088dbb767150fc0bacfeb49dd49e5.png) - -et - -![](https://betterexplained.com/wp-content/plugins/wp-latexrender/pictures/faeb9c5bf2e60add63ae4a70b293c7b4.png) - -Plutôt que se noyer dans les symboles, faisons en premier lieu l'expérience de l'idée principale. Voici une métaphore en français simple: - -- _Que fait la transformée de Fourier ?_ A partir d'un smoothie, elle trouve sa recette. -- _Comment ?_ Elle passe le smoothie dans un filtre pour en extraire chaque ingrédient. -- _Pourquoi ?_ Les recettes sont plus faciles à analyser, comparer et modifier que le smoothie lui-même. -- _Comment récupérer le smoothie ?_ Re-mélanger les ingrédients. - -**Pensez en cercles, pas seulement en sinusoïdes** - -La transformée de Fourier concerne des trajectoires circulaires (pas les sinusoïdes 1-d) -et la formuled'Euler est une manière intelligente d'en générer une: - -![](https://betterexplained.com/wp-content/uploads/euler/equal_paths.png) - -Doit-on utiliser des exposants imaginaires pour se déplacer en cercle ? Non. Mais c'est pratique -et compact. Et bien sûr, nous pouvons décrire notre chemin comme un mouvement coordonné en deux -dimensions (réelle et imaginaire), mais n'oubliez pas la vue d'ensemble: nous sommes juste -en déplacement dans un cercle. - -**À la découverte de la transformation complète** - -L'idée générale: notre signal n'est qu'un tas de pics de temps, d'instant T ! Si nous combinons les -recettes pour chaque pic de temps, nous devrions obtenir la recette du signal complet. - -La transformée de Fourier construit cette recette fréquence par fréquence: - -![](https://betterexplained.com/wp-content/uploads/images/fourier-explained-20121219-224649.png) - -Quelques notes - -- N = nombre d'échantillons de temps dont nous disposons -- n = échantillon actuellement étudié (0 ... N-1) -- xn = valeur du signal au temps n -- k = fréquence actuellement étudiée (0 Hertz up to N-1 Hertz) -- Xk = quantité de fréquence k dans le signal (amplitude et phase, un nombre complexe) -- Le facteur 1 / N est généralement déplacé vers la transformée inverse (passant des fréquences au temps). Ceci est autorisé, bien que je préfère 1 / N dans la transformation directe car cela donne les tailles réelles des pics de temps. Vous pouvez être plus ambitieux et utiliser 1 / racine carrée de (N) sur les deux transformations (aller en avant et en arrière crée le facteur 1 / N). -- n/N est le pourcentage du temps que nous avons passé. 2 _ pi _ k est notre vitesse en radians/s. e ^ -ix est notre chemin circulaire vers l'arrière. La combinaison est la distance parcourue, pour cette vitesse et ce temps. -- Les équations brutes de la transformée de Fourier consiste simplement à "ajouter les nombres complexes". De nombreux langages de programmation ne peuvent pas gérer directement les nombres complexes, on converti donc tout en coordonnées rectangulaires, pour les ajouter. - -Stuart Riffle a une excellente interprétation de la transformée de Fourier: - -![](https://betterexplained.com/wp-content/uploads/images/DerivedDFT.png) - -## Références - -- Wikipedia - - - [TF](https://fr.wikipedia.org/wiki/Transformation_de_Fourier) - - [TFD](https://fr.wikipedia.org/wiki/Transformation_de_Fourier_discr%C3%A8te) - - [FFT](https://fr.wikipedia.org/wiki/Transformation_de_Fourier_rapide) - - [TFtd (en anglais)](https://en.wikipedia.org/wiki/Discrete-time_Fourier_transform) - -- en Anglais - - [An Interactive Guide To The Fourier Transform](https://betterexplained.com/articles/an-interactive-guide-to-the-fourier-transform/) - - [DFT on YouTube by Better Explained](https://www.youtube.com/watch?v=iN0VG9N2q0U&t=0s&index=77&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) - - [FT on YouTube by 3Blue1Brown](https://www.youtube.com/watch?v=spUNpyF58BY&t=0s&index=76&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) - - [FFT on YouTube by Simon Xu](https://www.youtube.com/watch?v=htCj9exbGo0&index=78&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8&t=0s) diff --git a/src/algorithms/math/fourier-transform/README.md b/src/algorithms/math/fourier-transform/README.md deleted file mode 100644 index f7969ddd5c..0000000000 --- a/src/algorithms/math/fourier-transform/README.md +++ /dev/null @@ -1,133 +0,0 @@ -# Fourier Transform - -_Read this in other languages:_ -[français](README.fr-FR.md). - -## Definitions - -The **Fourier Transform** (**FT**) decomposes a function of time (a signal) into -the frequencies that make it up, in a way similar to how a musical chord can be -expressed as the frequencies (or pitches) of its constituent notes. - -The **Discrete Fourier Transform** (**DFT**) converts a finite sequence of -equally-spaced samples of a function into a same-length sequence of -equally-spaced samples of the discrete-time Fourier transform (DTFT), which is a -complex-valued function of frequency. The interval at which the DTFT is sampled -is the reciprocal of the duration of the input sequence. An inverse DFT is a -Fourier series, using the DTFT samples as coefficients of complex sinusoids at -the corresponding DTFT frequencies. It has the same sample-values as the original -input sequence. The DFT is therefore said to be a frequency domain representation -of the original input sequence. If the original sequence spans all the non-zero -values of a function, its DTFT is continuous (and periodic), and the DFT provides -discrete samples of one cycle. If the original sequence is one cycle of a periodic -function, the DFT provides all the non-zero values of one DTFT cycle. - -The Discrete Fourier transform transforms a sequence of `N` complex numbers: - -{xn} = x0, x1, x2 ..., xN-1 - -into another sequence of complex numbers: - -{Xk} = X0, X1, X2 ..., XN-1 - -which is defined by: - -![DFT](https://wikimedia.org/api/rest_v1/media/math/render/svg/1af0a78dc50bbf118ab6bd4c4dcc3c4ff8502223) - -The **Discrete-Time Fourier Transform** (**DTFT**) is a form of Fourier analysis -that is applicable to the uniformly-spaced samples of a continuous function. The -term discrete-time refers to the fact that the transform operates on discrete data -(samples) whose interval often has units of time. From only the samples, it -produces a function of frequency that is a periodic summation of the continuous -Fourier transform of the original continuous function. - -A **Fast Fourier Transform** (**FFT**) is an algorithm that samples a signal over -a period of time (or space) and divides it into its frequency components. These -components are single sinusoidal oscillations at distinct frequencies each with -their own amplitude and phase. - -This transformation is illustrated in Diagram below. Over the time period measured -in the diagram, the signal contains 3 distinct dominant frequencies. - -View of a signal in the time and frequency domain: - -![FFT](https://upload.wikimedia.org/wikipedia/commons/6/61/FFT-Time-Frequency-View.png) - -An FFT algorithm computes the discrete Fourier transform (DFT) of a sequence, or -its inverse (IFFT). Fourier analysis converts a signal from its original domain -to a representation in the frequency domain and vice versa. An FFT rapidly -computes such transformations by factorizing the DFT matrix into a product of -sparse (mostly zero) factors. As a result, it manages to reduce the complexity of -computing the DFT from O(n2), which arises if one simply applies the -definition of DFT, to O(n log n), where n is the data size. - -Here a discrete Fourier analysis of a sum of cosine waves at 10, 20, 30, 40, -and 50 Hz: - -![FFT](https://upload.wikimedia.org/wikipedia/commons/6/64/FFT_of_Cosine_Summation_Function.png) - -## Explanation - -The Fourier Transform is one of deepest insights ever made. Unfortunately, the -meaning is buried within dense equations: - -![](https://betterexplained.com/wp-content/plugins/wp-latexrender/pictures/45c088dbb767150fc0bacfeb49dd49e5.png) - -and - -![](https://betterexplained.com/wp-content/plugins/wp-latexrender/pictures/faeb9c5bf2e60add63ae4a70b293c7b4.png) - -Rather than jumping into the symbols, let's experience the key idea firsthand. Here's a plain-English metaphor: - -- _What does the Fourier Transform do?_ Given a smoothie, it finds the recipe. -- _How?_ Run the smoothie through filters to extract each ingredient. -- _Why?_ Recipes are easier to analyze, compare, and modify than the smoothie itself. -- _How do we get the smoothie back?_ Blend the ingredients. - -**Think With Circles, Not Just Sinusoids** - -The Fourier Transform is about circular paths (not 1-d sinusoids) and Euler's -formula is a clever way to generate one: - -![](https://betterexplained.com/wp-content/uploads/euler/equal_paths.png) - -Must we use imaginary exponents to move in a circle? Nope. But it's convenient -and compact. And sure, we can describe our path as coordinated motion in two -dimensions (real and imaginary), but don't forget the big picture: we're just -moving in a circle. - -**Discovering The Full Transform** - -The big insight: our signal is just a bunch of time spikes! If we merge the -recipes for each time spike, we should get the recipe for the full signal. - -The Fourier Transform builds the recipe frequency-by-frequency: - -![](https://betterexplained.com/wp-content/uploads/images/fourier-explained-20121219-224649.png) - -A few notes: - -- N = number of time samples we have -- n = current sample we're considering (0 ... N-1) -- xn = value of the signal at time n -- k = current frequency we're considering (0 Hertz up to N-1 Hertz) -- Xk = amount of frequency k in the signal (amplitude and phase, a complex number) -- The 1/N factor is usually moved to the reverse transform (going from frequencies back to time). This is allowed, though I prefer 1/N in the forward transform since it gives the actual sizes for the time spikes. You can get wild and even use 1/sqrt(N) on both transforms (going forward and back creates the 1/N factor). -- n/N is the percent of the time we've gone through. 2 _ pi _ k is our speed in radians / sec. e^-ix is our backwards-moving circular path. The combination is how far we've moved, for this speed and time. -- The raw equations for the Fourier Transform just say "add the complex numbers". Many programming languages cannot handle complex numbers directly, so you convert everything to rectangular coordinates and add those. - -Stuart Riffle has a great interpretation of the Fourier Transform: - -![](https://betterexplained.com/wp-content/uploads/images/DerivedDFT.png) - -## References - -- [An Interactive Guide To The Fourier Transform](https://betterexplained.com/articles/an-interactive-guide-to-the-fourier-transform/) -- [DFT on YouTube by Better Explained](https://www.youtube.com/watch?v=iN0VG9N2q0U&t=0s&index=77&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) -- [FT on YouTube by 3Blue1Brown](https://www.youtube.com/watch?v=spUNpyF58BY&t=0s&index=76&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) -- [FFT on YouTube by Simon Xu](https://www.youtube.com/watch?v=htCj9exbGo0&index=78&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8&t=0s) -- Wikipedia - - [FT](https://en.wikipedia.org/wiki/Fourier_transform) - - [DFT](https://www.wikiwand.com/en/Discrete_Fourier_transform) - - [DTFT](https://en.wikipedia.org/wiki/Discrete-time_Fourier_transform) - - [FFT](https://www.wikiwand.com/en/Fast_Fourier_transform) diff --git a/src/algorithms/math/fourier-transform/__test__/FourierTester.js b/src/algorithms/math/fourier-transform/__test__/FourierTester.js deleted file mode 100644 index d2a2787d38..0000000000 --- a/src/algorithms/math/fourier-transform/__test__/FourierTester.js +++ /dev/null @@ -1,295 +0,0 @@ -import ComplexNumber from '../../complex-number/ComplexNumber'; - -export const fourierTestCases = [ - { - input: [ - { amplitude: 1 }, - ], - output: [ - { - frequency: 0, amplitude: 1, phase: 0, re: 1, im: 0, - }, - ], - }, - { - input: [ - { amplitude: 1 }, - { amplitude: 0 }, - ], - output: [ - { - frequency: 0, amplitude: 0.5, phase: 0, re: 0.5, im: 0, - }, - { - frequency: 1, amplitude: 0.5, phase: 0, re: 0.5, im: 0, - }, - ], - }, - { - input: [ - { amplitude: 2 }, - { amplitude: 0 }, - ], - output: [ - { - frequency: 0, amplitude: 1, phase: 0, re: 1, im: 0, - }, - { - frequency: 1, amplitude: 1, phase: 0, re: 1, im: 0, - }, - ], - }, - { - input: [ - { amplitude: 1 }, - { amplitude: 0 }, - { amplitude: 0 }, - ], - output: [ - { - frequency: 0, amplitude: 0.33333, phase: 0, re: 0.33333, im: 0, - }, - { - frequency: 1, amplitude: 0.33333, phase: 0, re: 0.33333, im: 0, - }, - { - frequency: 2, amplitude: 0.33333, phase: 0, re: 0.33333, im: 0, - }, - ], - }, - { - input: [ - { amplitude: 1 }, - { amplitude: 0 }, - { amplitude: 0 }, - { amplitude: 0 }, - ], - output: [ - { - frequency: 0, amplitude: 0.25, phase: 0, re: 0.25, im: 0, - }, - { - frequency: 1, amplitude: 0.25, phase: 0, re: 0.25, im: 0, - }, - { - frequency: 2, amplitude: 0.25, phase: 0, re: 0.25, im: 0, - }, - { - frequency: 3, amplitude: 0.25, phase: 0, re: 0.25, im: 0, - }, - ], - }, - { - input: [ - { amplitude: 0 }, - { amplitude: 1 }, - { amplitude: 0 }, - { amplitude: 0 }, - ], - output: [ - { - frequency: 0, amplitude: 0.25, phase: 0, re: 0.25, im: 0, - }, - { - frequency: 1, amplitude: 0.25, phase: -90, re: 0, im: -0.25, - }, - { - frequency: 2, amplitude: 0.25, phase: 180, re: -0.25, im: 0, - }, - { - frequency: 3, amplitude: 0.25, phase: 90, re: 0, im: 0.25, - }, - ], - }, - { - input: [ - { amplitude: 0 }, - { amplitude: 0 }, - { amplitude: 1 }, - { amplitude: 0 }, - ], - output: [ - { - frequency: 0, amplitude: 0.25, phase: 0, re: 0.25, im: 0, - }, - { - frequency: 1, amplitude: 0.25, phase: 180, re: -0.25, im: 0, - }, - { - frequency: 2, amplitude: 0.25, phase: 0, re: 0.25, im: 0, - }, - { - frequency: 3, amplitude: 0.25, phase: 180, re: -0.25, im: 0, - }, - ], - }, - { - input: [ - { amplitude: 0 }, - { amplitude: 0 }, - { amplitude: 0 }, - { amplitude: 2 }, - ], - output: [ - { - frequency: 0, amplitude: 0.5, phase: 0, re: 0.5, im: 0, - }, - { - frequency: 1, amplitude: 0.5, phase: 90, re: 0, im: 0.5, - }, - { - frequency: 2, amplitude: 0.5, phase: 180, re: -0.5, im: 0, - }, - { - frequency: 3, amplitude: 0.5, phase: -90, re: 0, im: -0.5, - }, - ], - }, - { - input: [ - { amplitude: 0 }, - { amplitude: 1 }, - { amplitude: 0 }, - { amplitude: 2 }, - ], - output: [ - { - frequency: 0, amplitude: 0.75, phase: 0, re: 0.75, im: 0, - }, - { - frequency: 1, amplitude: 0.25, phase: 90, re: 0, im: 0.25, - }, - { - frequency: 2, amplitude: 0.75, phase: 180, re: -0.75, im: 0, - }, - { - frequency: 3, amplitude: 0.25, phase: -90, re: 0, im: -0.25, - }, - ], - }, - { - input: [ - { amplitude: 4 }, - { amplitude: 1 }, - { amplitude: 0 }, - { amplitude: 2 }, - ], - output: [ - { - frequency: 0, amplitude: 1.75, phase: 0, re: 1.75, im: 0, - }, - { - frequency: 1, amplitude: 1.03077, phase: 14.03624, re: 0.99999, im: 0.25, - }, - { - frequency: 2, amplitude: 0.25, phase: 0, re: 0.25, im: 0, - }, - { - frequency: 3, amplitude: 1.03077, phase: -14.03624, re: 1, im: -0.25, - }, - ], - }, - { - input: [ - { amplitude: 4 }, - { amplitude: 1 }, - { amplitude: -3 }, - { amplitude: 2 }, - ], - output: [ - { - frequency: 0, amplitude: 1, phase: 0, re: 1, im: 0, - }, - { - frequency: 1, amplitude: 1.76776, phase: 8.13010, re: 1.75, im: 0.25, - }, - { - frequency: 2, amplitude: 0.5, phase: 180, re: -0.5, im: 0, - }, - { - frequency: 3, amplitude: 1.76776, phase: -8.13010, re: 1.75, im: -0.24999, - }, - ], - }, - { - input: [ - { amplitude: 1 }, - { amplitude: 2 }, - { amplitude: 3 }, - { amplitude: 4 }, - ], - output: [ - { - frequency: 0, amplitude: 2.5, phase: 0, re: 2.5, im: 0, - }, - { - frequency: 1, amplitude: 0.70710, phase: 135, re: -0.5, im: 0.49999, - }, - { - frequency: 2, amplitude: 0.5, phase: 180, re: -0.5, im: 0, - }, - { - frequency: 3, amplitude: 0.70710, phase: -134.99999, re: -0.49999, im: -0.5, - }, - ], - }, -]; - -export default class FourierTester { - /** - * @param {function} fourierTransform - */ - static testDirectFourierTransform(fourierTransform) { - fourierTestCases.forEach((testCase) => { - const { input, output: expectedOutput } = testCase; - - // Try to split input signal into sequence of pure sinusoids. - const formattedInput = input.map((sample) => sample.amplitude); - const currentOutput = fourierTransform(formattedInput); - - // Check the signal has been split into proper amount of sub-signals. - expect(currentOutput.length).toBeGreaterThanOrEqual(formattedInput.length); - - // Now go through all the signals and check their frequency, amplitude and phase. - expectedOutput.forEach((expectedSignal, frequency) => { - // Get template data we want to test against. - const currentSignal = currentOutput[frequency]; - const currentPolarSignal = currentSignal.getPolarForm(false); - - // Check all signal parameters. - expect(frequency).toBe(expectedSignal.frequency); - expect(currentSignal.re).toBeCloseTo(expectedSignal.re, 4); - expect(currentSignal.im).toBeCloseTo(expectedSignal.im, 4); - expect(currentPolarSignal.phase).toBeCloseTo(expectedSignal.phase, 4); - expect(currentPolarSignal.radius).toBeCloseTo(expectedSignal.amplitude, 4); - }); - }); - } - - /** - * @param {function} inverseFourierTransform - */ - static testInverseFourierTransform(inverseFourierTransform) { - fourierTestCases.forEach((testCase) => { - const { input: expectedOutput, output: inputFrequencies } = testCase; - - // Try to join frequencies into time signal. - const formattedInput = inputFrequencies.map((frequency) => { - return new ComplexNumber({ re: frequency.re, im: frequency.im }); - }); - const currentOutput = inverseFourierTransform(formattedInput); - - // Check the signal has been combined of proper amount of time samples. - expect(currentOutput.length).toBeLessThanOrEqual(formattedInput.length); - - // Now go through all the amplitudes and check their values. - expectedOutput.forEach((expectedAmplitudes, timer) => { - // Get template data we want to test against. - const currentAmplitude = currentOutput[timer]; - - // Check if current amplitude is close enough to the calculated one. - expect(currentAmplitude).toBeCloseTo(expectedAmplitudes.amplitude, 4); - }); - }); - } -} diff --git a/src/algorithms/math/fourier-transform/__test__/discreteFourierTransform.test.js b/src/algorithms/math/fourier-transform/__test__/discreteFourierTransform.test.js deleted file mode 100644 index 47da5c0b38..0000000000 --- a/src/algorithms/math/fourier-transform/__test__/discreteFourierTransform.test.js +++ /dev/null @@ -1,8 +0,0 @@ -import discreteFourierTransform from '../discreteFourierTransform'; -import FourierTester from './FourierTester'; - -describe('discreteFourierTransform', () => { - it('should split signal into frequencies', () => { - FourierTester.testDirectFourierTransform(discreteFourierTransform); - }); -}); diff --git a/src/algorithms/math/fourier-transform/__test__/fastFourierTransform.test.js b/src/algorithms/math/fourier-transform/__test__/fastFourierTransform.test.js deleted file mode 100644 index 2dcdc32f7c..0000000000 --- a/src/algorithms/math/fourier-transform/__test__/fastFourierTransform.test.js +++ /dev/null @@ -1,101 +0,0 @@ -import fastFourierTransform from '../fastFourierTransform'; -import ComplexNumber from '../../complex-number/ComplexNumber'; - -/** - * @param {ComplexNumber[]} sequence1 - * @param {ComplexNumber[]} sequence2 - * @param {Number} delta - * @return {boolean} - */ -function sequencesApproximatelyEqual(sequence1, sequence2, delta) { - if (sequence1.length !== sequence2.length) { - return false; - } - - for (let numberIndex = 0; numberIndex < sequence1.length; numberIndex += 1) { - if (Math.abs(sequence1[numberIndex].re - sequence2[numberIndex].re) > delta) { - return false; - } - - if (Math.abs(sequence1[numberIndex].im - sequence2[numberIndex].im) > delta) { - return false; - } - } - - return true; -} - -const delta = 1e-6; - -describe('fastFourierTransform', () => { - it('should calculate the radix-2 discrete fourier transform #1', () => { - const input = [new ComplexNumber({ re: 0, im: 0 })]; - const expectedOutput = [new ComplexNumber({ re: 0, im: 0 })]; - const output = fastFourierTransform(input); - const invertedOutput = fastFourierTransform(output, true); - - expect(sequencesApproximatelyEqual(expectedOutput, output, delta)).toBe(true); - expect(sequencesApproximatelyEqual(input, invertedOutput, delta)).toBe(true); - }); - - it('should calculate the radix-2 discrete fourier transform #2', () => { - const input = [ - new ComplexNumber({ re: 1, im: 2 }), - new ComplexNumber({ re: 2, im: 3 }), - new ComplexNumber({ re: 8, im: 4 }), - ]; - - const expectedOutput = [ - new ComplexNumber({ re: 11, im: 9 }), - new ComplexNumber({ re: -10, im: 0 }), - new ComplexNumber({ re: 7, im: 3 }), - new ComplexNumber({ re: -4, im: -4 }), - ]; - - const output = fastFourierTransform(input); - const invertedOutput = fastFourierTransform(output, true); - - expect(sequencesApproximatelyEqual(expectedOutput, output, delta)).toBe(true); - expect(sequencesApproximatelyEqual(input, invertedOutput, delta)).toBe(true); - }); - - it('should calculate the radix-2 discrete fourier transform #3', () => { - const input = [ - new ComplexNumber({ re: -83656.9359385182, im: 98724.08038374918 }), - new ComplexNumber({ re: -47537.415125808424, im: 88441.58381765135 }), - new ComplexNumber({ re: -24849.657029355192, im: -72621.79007878687 }), - new ComplexNumber({ re: 31451.27290052717, im: -21113.301128347346 }), - new ComplexNumber({ re: 13973.90836288876, im: -73378.36721594246 }), - new ComplexNumber({ re: 14981.520420492234, im: 63279.524958963884 }), - new ComplexNumber({ re: -9892.575367044381, im: -81748.44671677813 }), - new ComplexNumber({ re: -35933.00356823792, im: -46153.47157161784 }), - new ComplexNumber({ re: -22425.008561855735, im: -86284.24507370662 }), - new ComplexNumber({ re: -39327.43830818355, im: 30611.949874562706 }), - ]; - - const expectedOutput = [ - new ComplexNumber({ re: -203215.3322151, im: -100242.4827503 }), - new ComplexNumber({ re: 99217.0805705, im: 270646.9331932 }), - new ComplexNumber({ re: -305990.9040412, im: 68224.8435751 }), - new ComplexNumber({ re: -14135.7758282, im: 199223.9878095 }), - new ComplexNumber({ re: -306965.6350922, im: 26030.1025439 }), - new ComplexNumber({ re: -76477.6755206, im: 40781.9078990 }), - new ComplexNumber({ re: -48409.3099088, im: 54674.7959662 }), - new ComplexNumber({ re: -329683.0131713, im: 164287.7995937 }), - new ComplexNumber({ re: -50485.2048527, im: -330375.0546527 }), - new ComplexNumber({ re: 122235.7738708, im: 91091.6398019 }), - new ComplexNumber({ re: 47625.8850387, im: 73497.3981523 }), - new ComplexNumber({ re: -15619.8231136, im: 80804.8685410 }), - new ComplexNumber({ re: 192234.0276101, im: 160833.3072355 }), - new ComplexNumber({ re: -96389.4195635, im: 393408.4543872 }), - new ComplexNumber({ re: -173449.0825417, im: 146875.7724104 }), - new ComplexNumber({ re: -179002.5662573, im: 239821.0124341 }), - ]; - - const output = fastFourierTransform(input); - const invertedOutput = fastFourierTransform(output, true); - - expect(sequencesApproximatelyEqual(expectedOutput, output, delta)).toBe(true); - expect(sequencesApproximatelyEqual(input, invertedOutput, delta)).toBe(true); - }); -}); diff --git a/src/algorithms/math/fourier-transform/__test__/inverseDiscreteFourierTransform.test.js b/src/algorithms/math/fourier-transform/__test__/inverseDiscreteFourierTransform.test.js deleted file mode 100644 index 3919b3ad86..0000000000 --- a/src/algorithms/math/fourier-transform/__test__/inverseDiscreteFourierTransform.test.js +++ /dev/null @@ -1,8 +0,0 @@ -import inverseDiscreteFourierTransform from '../inverseDiscreteFourierTransform'; -import FourierTester from './FourierTester'; - -describe('inverseDiscreteFourierTransform', () => { - it('should calculate output signal out of input frequencies', () => { - FourierTester.testInverseFourierTransform(inverseDiscreteFourierTransform); - }); -}); diff --git a/src/algorithms/math/fourier-transform/discreteFourierTransform.js b/src/algorithms/math/fourier-transform/discreteFourierTransform.js deleted file mode 100644 index dcb0a014f5..0000000000 --- a/src/algorithms/math/fourier-transform/discreteFourierTransform.js +++ /dev/null @@ -1,69 +0,0 @@ -import ComplexNumber from '../complex-number/ComplexNumber'; - -const CLOSE_TO_ZERO_THRESHOLD = 1e-10; - -/** - * Discrete Fourier Transform (DFT): time to frequencies. - * - * Time complexity: O(N^2) - * - * @param {number[]} inputAmplitudes - Input signal amplitudes over time (complex - * numbers with real parts only). - * @param {number} zeroThreshold - Threshold that is used to convert real and imaginary numbers - * to zero in case if they are smaller then this. - * - * @return {ComplexNumber[]} - Array of complex number. Each of the number represents the frequency - * or signal. All signals together will form input signal over discrete time periods. Each signal's - * complex number has radius (amplitude) and phase (angle) in polar form that describes the signal. - * - * @see https://gist.github.com/anonymous/129d477ddb1c8025c9ac - * @see https://betterexplained.com/articles/an-interactive-guide-to-the-fourier-transform/ - */ -export default function dft(inputAmplitudes, zeroThreshold = CLOSE_TO_ZERO_THRESHOLD) { - const N = inputAmplitudes.length; - const signals = []; - - // Go through every discrete frequency. - for (let frequency = 0; frequency < N; frequency += 1) { - // Compound signal at current frequency that will ultimately - // take part in forming input amplitudes. - let frequencySignal = new ComplexNumber(); - - // Go through every discrete point in time. - for (let timer = 0; timer < N; timer += 1) { - const currentAmplitude = inputAmplitudes[timer]; - - // Calculate rotation angle. - const rotationAngle = -1 * (2 * Math.PI) * frequency * (timer / N); - - // Remember that e^ix = cos(x) + i * sin(x); - const dataPointContribution = new ComplexNumber({ - re: Math.cos(rotationAngle), - im: Math.sin(rotationAngle), - }).multiply(currentAmplitude); - - // Add this data point's contribution. - frequencySignal = frequencySignal.add(dataPointContribution); - } - - // Close to zero? You're zero. - if (Math.abs(frequencySignal.re) < zeroThreshold) { - frequencySignal.re = 0; - } - - if (Math.abs(frequencySignal.im) < zeroThreshold) { - frequencySignal.im = 0; - } - - // Average contribution at this frequency. - // The 1/N factor is usually moved to the reverse transform (going from frequencies - // back to time). This is allowed, though it would be nice to have 1/N in the forward - // transform since it gives the actual sizes for the time spikes. - frequencySignal = frequencySignal.divide(N); - - // Add current frequency signal to the list of compound signals. - signals[frequency] = frequencySignal; - } - - return signals; -} diff --git a/src/algorithms/math/fourier-transform/fastFourierTransform.js b/src/algorithms/math/fourier-transform/fastFourierTransform.js deleted file mode 100644 index ab51cf26e4..0000000000 --- a/src/algorithms/math/fourier-transform/fastFourierTransform.js +++ /dev/null @@ -1,77 +0,0 @@ -import ComplexNumber from '../complex-number/ComplexNumber'; -import bitLength from '../bits/bitLength'; - -/** - * Returns the number which is the flipped binary representation of input. - * - * @param {number} input - * @param {number} bitsCount - * @return {number} - */ -function reverseBits(input, bitsCount) { - let reversedBits = 0; - - for (let bitIndex = 0; bitIndex < bitsCount; bitIndex += 1) { - reversedBits *= 2; - - if (Math.floor(input / (1 << bitIndex)) % 2 === 1) { - reversedBits += 1; - } - } - - return reversedBits; -} - -/** - * Returns the radix-2 fast fourier transform of the given array. - * Optionally computes the radix-2 inverse fast fourier transform. - * - * @param {ComplexNumber[]} inputData - * @param {boolean} [inverse] - * @return {ComplexNumber[]} - */ -export default function fastFourierTransform(inputData, inverse = false) { - const bitsCount = bitLength(inputData.length - 1); - const N = 1 << bitsCount; - - while (inputData.length < N) { - inputData.push(new ComplexNumber()); - } - - const output = []; - for (let dataSampleIndex = 0; dataSampleIndex < N; dataSampleIndex += 1) { - output[dataSampleIndex] = inputData[reverseBits(dataSampleIndex, bitsCount)]; - } - - for (let blockLength = 2; blockLength <= N; blockLength *= 2) { - const imaginarySign = inverse ? -1 : 1; - const phaseStep = new ComplexNumber({ - re: Math.cos((2 * Math.PI) / blockLength), - im: imaginarySign * Math.sin((2 * Math.PI) / blockLength), - }); - - for (let blockStart = 0; blockStart < N; blockStart += blockLength) { - let phase = new ComplexNumber({ re: 1, im: 0 }); - - for (let signalId = blockStart; signalId < (blockStart + blockLength / 2); signalId += 1) { - const component = output[signalId + blockLength / 2].multiply(phase); - - const upd1 = output[signalId].add(component); - const upd2 = output[signalId].subtract(component); - - output[signalId] = upd1; - output[signalId + blockLength / 2] = upd2; - - phase = phase.multiply(phaseStep); - } - } - } - - if (inverse) { - for (let signalId = 0; signalId < N; signalId += 1) { - output[signalId] /= N; - } - } - - return output; -} diff --git a/src/algorithms/math/fourier-transform/inverseDiscreteFourierTransform.js b/src/algorithms/math/fourier-transform/inverseDiscreteFourierTransform.js deleted file mode 100644 index a9f0616351..0000000000 --- a/src/algorithms/math/fourier-transform/inverseDiscreteFourierTransform.js +++ /dev/null @@ -1,58 +0,0 @@ -import ComplexNumber from '../complex-number/ComplexNumber'; - -const CLOSE_TO_ZERO_THRESHOLD = 1e-10; - -/** - * Inverse Discrete Fourier Transform (IDFT): frequencies to time. - * - * Time complexity: O(N^2) - * - * @param {ComplexNumber[]} frequencies - Frequencies summands of the final signal. - * @param {number} zeroThreshold - Threshold that is used to convert real and imaginary numbers - * to zero in case if they are smaller then this. - * - * @return {number[]} - Discrete amplitudes distributed in time. - */ -export default function inverseDiscreteFourierTransform( - frequencies, - zeroThreshold = CLOSE_TO_ZERO_THRESHOLD, -) { - const N = frequencies.length; - const amplitudes = []; - - // Go through every discrete point of time. - for (let timer = 0; timer < N; timer += 1) { - // Compound amplitude at current time. - let amplitude = new ComplexNumber(); - - // Go through all discrete frequencies. - for (let frequency = 0; frequency < N; frequency += 1) { - const currentFrequency = frequencies[frequency]; - - // Calculate rotation angle. - const rotationAngle = (2 * Math.PI) * frequency * (timer / N); - - // Remember that e^ix = cos(x) + i * sin(x); - const frequencyContribution = new ComplexNumber({ - re: Math.cos(rotationAngle), - im: Math.sin(rotationAngle), - }).multiply(currentFrequency); - - amplitude = amplitude.add(frequencyContribution); - } - - // Close to zero? You're zero. - if (Math.abs(amplitude.re) < zeroThreshold) { - amplitude.re = 0; - } - - if (Math.abs(amplitude.im) < zeroThreshold) { - amplitude.im = 0; - } - - // Add current frequency signal to the list of compound signals. - amplitudes[timer] = amplitude.re; - } - - return amplitudes; -} diff --git a/src/algorithms/math/horner-method/README.md b/src/algorithms/math/horner-method/README.md deleted file mode 100644 index 991a674deb..0000000000 --- a/src/algorithms/math/horner-method/README.md +++ /dev/null @@ -1,20 +0,0 @@ -# Horner's Method - -In mathematics, Horner's method (or Horner's scheme) is an algorithm for polynomial evaluation. With this method, it is possible to evaluate a polynomial with only `n` additions and `n` multiplications. Hence, its storage requirements are `n` times the number of bits of `x`. - -Horner's method can be based on the following identity: - -![Horner's rule](https://wikimedia.org/api/rest_v1/media/math/render/svg/2a576e42d875496f8b0f0dda5ebff7c2415532e4) - -This identity is called _Horner's rule_. - -To solve the right part of the identity above, for a given `x`, we start by iterating through the polynomial from the inside out, accumulating each iteration result. After `n` iterations, with `n` being the order of the polynomial, the accumulated result gives us the polynomial evaluation. - -**Using the polynomial:** -`4 * x^4 + 2 * x^3 + 3 * x^2 + x^1 + 3`, a traditional approach to evaluate it at `x = 2`, could be representing it as an array `[3, 1, 3, 2, 4]` and iterate over it saving each iteration value at an accumulator, such as `acc += pow(x=2, index) * array[index]`. In essence, each power of a number (`pow`) operation is `n-1` multiplications. So, in this scenario, a total of `14` operations would have happened, composed of `4` additions, `5` multiplications, and `5` pows (we're assuming that each power is calculated by repeated multiplication). - -Now, **using the same scenario but with Horner's rule**, the polynomial can be re-written as `x * (x * (x * (4 * x + 2) + 3) + 1) + 3`, representing it as `[4, 2, 3, 1, 3]` it is possible to save the first iteration as `acc = arr[0] * (x=2) + arr[1]`, and then finish iterations for `acc *= (x=2) + arr[index]`. In the same scenario but using Horner's rule, a total of `10` operations would have happened, composed of only `4` additions and `4` multiplications. - -## References - -- [Wikipedia](https://en.wikipedia.org/wiki/Horner%27s_method) diff --git a/src/algorithms/math/horner-method/__test__/classicPolynome.test.js b/src/algorithms/math/horner-method/__test__/classicPolynome.test.js deleted file mode 100644 index 8cdf950d6e..0000000000 --- a/src/algorithms/math/horner-method/__test__/classicPolynome.test.js +++ /dev/null @@ -1,14 +0,0 @@ -import classicPolynome from '../classicPolynome'; - -describe('classicPolynome', () => { - it('should evaluate the polynomial for the specified value of x correctly', () => { - expect(classicPolynome([8], 0.1)).toBe(8); - expect(classicPolynome([2, 4, 2, 5], 0.555)).toBe(7.68400775); - expect(classicPolynome([2, 4, 2, 5], 0.75)).toBe(9.59375); - expect(classicPolynome([1, 1, 1, 1, 1], 1.75)).toBe(20.55078125); - expect(classicPolynome([15, 3.5, 0, 2, 1.42, 0.41], 0.315)).toBe(1.1367300651406251); - expect(classicPolynome([0, 0, 2.77, 1.42, 0.41], 1.35)).toBe(7.375325000000001); - expect(classicPolynome([0, 0, 2.77, 1.42, 2.3311], 1.35)).toBe(9.296425000000001); - expect(classicPolynome([2, 0, 0, 5.757, 5.31412, 12.3213], 3.141)).toBe(697.2731167035034); - }); -}); diff --git a/src/algorithms/math/horner-method/__test__/hornerMethod.test.js b/src/algorithms/math/horner-method/__test__/hornerMethod.test.js deleted file mode 100644 index 177ceb1aad..0000000000 --- a/src/algorithms/math/horner-method/__test__/hornerMethod.test.js +++ /dev/null @@ -1,21 +0,0 @@ -import hornerMethod from '../hornerMethod'; -import classicPolynome from '../classicPolynome'; - -describe('hornerMethod', () => { - it('should evaluate the polynomial for the specified value of x correctly', () => { - expect(hornerMethod([8], 0.1)).toBe(8); - expect(hornerMethod([2, 4, 2, 5], 0.555)).toBe(7.68400775); - expect(hornerMethod([2, 4, 2, 5], 0.75)).toBe(9.59375); - expect(hornerMethod([1, 1, 1, 1, 1], 1.75)).toBe(20.55078125); - expect(hornerMethod([15, 3.5, 0, 2, 1.42, 0.41], 0.315)).toBe(1.136730065140625); - expect(hornerMethod([0, 0, 2.77, 1.42, 0.41], 1.35)).toBe(7.375325000000001); - expect(hornerMethod([0, 0, 2.77, 1.42, 2.3311], 1.35)).toBe(9.296425000000001); - expect(hornerMethod([2, 0, 0, 5.757, 5.31412, 12.3213], 3.141)).toBe(697.2731167035034); - }); - - it('should evaluate the same polynomial value as classical approach', () => { - expect(hornerMethod([8], 0.1)).toBe(classicPolynome([8], 0.1)); - expect(hornerMethod([2, 4, 2, 5], 0.555)).toBe(classicPolynome([2, 4, 2, 5], 0.555)); - expect(hornerMethod([2, 4, 2, 5], 0.75)).toBe(classicPolynome([2, 4, 2, 5], 0.75)); - }); -}); diff --git a/src/algorithms/math/horner-method/classicPolynome.js b/src/algorithms/math/horner-method/classicPolynome.js deleted file mode 100644 index 1f6aa8613c..0000000000 --- a/src/algorithms/math/horner-method/classicPolynome.js +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Returns the evaluation of a polynomial function at a certain point. - * Uses straightforward approach with powers. - * - * @param {number[]} coefficients - i.e. [4, 3, 2] for (4 * x^2 + 3 * x + 2) - * @param {number} xVal - * @return {number} - */ -export default function classicPolynome(coefficients, xVal) { - return coefficients.reverse().reduce( - (accumulator, currentCoefficient, index) => { - return accumulator + currentCoefficient * (xVal ** index); - }, - 0, - ); -} diff --git a/src/algorithms/math/horner-method/hornerMethod.js b/src/algorithms/math/horner-method/hornerMethod.js deleted file mode 100644 index 2236170ed1..0000000000 --- a/src/algorithms/math/horner-method/hornerMethod.js +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Returns the evaluation of a polynomial function at a certain point. - * Uses Horner's rule. - * - * @param {number[]} coefficients - i.e. [4, 3, 2] for (4 * x^2 + 3 * x + 2) - * @param {number} xVal - * @return {number} - */ -export default function hornerMethod(coefficients, xVal) { - return coefficients.reduce( - (accumulator, currentCoefficient) => { - return accumulator * xVal + currentCoefficient; - }, - 0, - ); -} diff --git a/src/algorithms/math/integer-partition/README.md b/src/algorithms/math/integer-partition/README.md deleted file mode 100644 index 6023e1505a..0000000000 --- a/src/algorithms/math/integer-partition/README.md +++ /dev/null @@ -1,34 +0,0 @@ -# Integer Partition - -In number theory and combinatorics, a partition of a positive -integer `n`, also called an **integer partition**, is a way of -writing `n` as a sum of positive integers. - -Two sums that differ only in the order of their summands are -considered the same partition. For example, `4` can be partitioned -in five distinct ways: - -``` -4 -3 + 1 -2 + 2 -2 + 1 + 1 -1 + 1 + 1 + 1 -``` - -The order-dependent composition `1 + 3` is the same partition -as `3 + 1`, while the two distinct -compositions `1 + 2 + 1` and `1 + 1 + 2` represent the same -partition `2 + 1 + 1`. - -Young diagrams associated to the partitions of the positive -integers `1` through `8`. They are arranged so that images -under the reflection about the main diagonal of the square -are conjugate partitions. - -![Integer Partition](https://upload.wikimedia.org/wikipedia/commons/d/d8/Ferrer_partitioning_diagrams.svg) - -## References - -- [Wikipedia](https://en.wikipedia.org/wiki/Partition_(number_theory)) -- [YouTube](https://www.youtube.com/watch?v=ZaVM057DuzE&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) diff --git a/src/algorithms/math/integer-partition/__test__/integerPartition.test.js b/src/algorithms/math/integer-partition/__test__/integerPartition.test.js deleted file mode 100644 index e78b1dfd2c..0000000000 --- a/src/algorithms/math/integer-partition/__test__/integerPartition.test.js +++ /dev/null @@ -1,14 +0,0 @@ -import integerPartition from '../integerPartition'; - -describe('integerPartition', () => { - it('should partition the number', () => { - expect(integerPartition(1)).toBe(1); - expect(integerPartition(2)).toBe(2); - expect(integerPartition(3)).toBe(3); - expect(integerPartition(4)).toBe(5); - expect(integerPartition(5)).toBe(7); - expect(integerPartition(6)).toBe(11); - expect(integerPartition(7)).toBe(15); - expect(integerPartition(8)).toBe(22); - }); -}); diff --git a/src/algorithms/math/integer-partition/integerPartition.js b/src/algorithms/math/integer-partition/integerPartition.js deleted file mode 100644 index 02cb31f69f..0000000000 --- a/src/algorithms/math/integer-partition/integerPartition.js +++ /dev/null @@ -1,57 +0,0 @@ -/** - * @param {number} number - * @return {number} - */ -export default function integerPartition(number) { - // Create partition matrix for solving this task using Dynamic Programming. - const partitionMatrix = Array(number + 1).fill(null).map(() => { - return Array(number + 1).fill(null); - }); - - // Fill partition matrix with initial values. - - // Let's fill the first row that represents how many ways we would have - // to combine the numbers 1, 2, 3, ..., n with number 0. We would have zero - // ways obviously since with zero number we may form only zero. - for (let numberIndex = 1; numberIndex <= number; numberIndex += 1) { - partitionMatrix[0][numberIndex] = 0; - } - - // Let's fill the first column. It represents the number of ways we can form - // number zero out of numbers 0, 0 and 1, 0 and 1 and 2, 0 and 1 and 2 and 3, ... - // Obviously there is only one way we could form number 0 - // and it is with number 0 itself. - for (let summandIndex = 0; summandIndex <= number; summandIndex += 1) { - partitionMatrix[summandIndex][0] = 1; - } - - // Now let's go through other possible options of how we could form number m out of - // summands 0, 1, ..., m using Dynamic Programming approach. - for (let summandIndex = 1; summandIndex <= number; summandIndex += 1) { - for (let numberIndex = 1; numberIndex <= number; numberIndex += 1) { - if (summandIndex > numberIndex) { - // If summand number is bigger then current number itself then just it won't add - // any new ways of forming the number. Thus we may just copy the number from row above. - partitionMatrix[summandIndex][numberIndex] = partitionMatrix[summandIndex - 1][numberIndex]; - } else { - /* - * The number of combinations would equal to number of combinations of forming the same - * number but WITHOUT current summand number PLUS number of combinations of forming the - * number but WITH current summand. - * - * Example: - * Number of ways to form 5 using summands {0, 1, 2} would equal the SUM of: - * - number of ways to form 5 using summands {0, 1} (we've excluded summand 2) - * - number of ways to form 3 (because 5 - 2 = 3) using summands {0, 1, 2} - * (we've included summand 2) - */ - const combosWithoutSummand = partitionMatrix[summandIndex - 1][numberIndex]; - const combosWithSummand = partitionMatrix[summandIndex][numberIndex - summandIndex]; - - partitionMatrix[summandIndex][numberIndex] = combosWithoutSummand + combosWithSummand; - } - } - } - - return partitionMatrix[number][number]; -} diff --git a/src/algorithms/math/is-power-of-two/README.md b/src/algorithms/math/is-power-of-two/README.md deleted file mode 100644 index 6ed1e92568..0000000000 --- a/src/algorithms/math/is-power-of-two/README.md +++ /dev/null @@ -1,51 +0,0 @@ -# Is a power of two - -Given a positive integer, write a function to find if it is -a power of two or not. - -**Naive solution** - -In naive solution we just keep dividing the number by two -unless the number becomes `1` and every time we do so, we -check that remainder after division is always `0`. Otherwise, the number can't be a power of two. - -**Bitwise solution** - -Powers of two in binary form always have just one bit set. -The only exception is with a signed integer (e.g. an 8-bit -signed integer with a value of -128 looks like: `10000000`) - -``` -1: 0001 -2: 0010 -4: 0100 -8: 1000 -``` - -So after checking that the number is greater than zero, -we can use a bitwise hack to test that one and only one -bit is set. - -``` -number & (number - 1) -``` - -For example for number `8` that operations will look like: - -``` - 1000 -- 0001 - ---- - 0111 - - 1000 -& 0111 - ---- - 0000 -``` - -## References - -- [GeeksForGeeks](https://www.geeksforgeeks.org/program-to-find-whether-a-no-is-power-of-two/) -- [Bitwise Solution on Stanford](http://www.graphics.stanford.edu/~seander/bithacks.html#DetermineIfPowerOf2) -- [Binary number subtraction on YouTube](https://www.youtube.com/watch?v=S9LJknZTyos&t=0s&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8&index=66) diff --git a/src/algorithms/math/is-power-of-two/__test__/isPowerOfTwo.test.js b/src/algorithms/math/is-power-of-two/__test__/isPowerOfTwo.test.js deleted file mode 100644 index d1271bab1a..0000000000 --- a/src/algorithms/math/is-power-of-two/__test__/isPowerOfTwo.test.js +++ /dev/null @@ -1,23 +0,0 @@ -import isPowerOfTwo from '../isPowerOfTwo'; - -describe('isPowerOfTwo', () => { - it('should check if the number is made by multiplying twos', () => { - expect(isPowerOfTwo(-1)).toBe(false); - expect(isPowerOfTwo(0)).toBe(false); - expect(isPowerOfTwo(1)).toBe(true); - expect(isPowerOfTwo(2)).toBe(true); - expect(isPowerOfTwo(3)).toBe(false); - expect(isPowerOfTwo(4)).toBe(true); - expect(isPowerOfTwo(5)).toBe(false); - expect(isPowerOfTwo(6)).toBe(false); - expect(isPowerOfTwo(7)).toBe(false); - expect(isPowerOfTwo(8)).toBe(true); - expect(isPowerOfTwo(10)).toBe(false); - expect(isPowerOfTwo(12)).toBe(false); - expect(isPowerOfTwo(16)).toBe(true); - expect(isPowerOfTwo(31)).toBe(false); - expect(isPowerOfTwo(64)).toBe(true); - expect(isPowerOfTwo(1024)).toBe(true); - expect(isPowerOfTwo(1023)).toBe(false); - }); -}); diff --git a/src/algorithms/math/is-power-of-two/__test__/isPowerOfTwoBitwise.test.js b/src/algorithms/math/is-power-of-two/__test__/isPowerOfTwoBitwise.test.js deleted file mode 100644 index bcba3a609c..0000000000 --- a/src/algorithms/math/is-power-of-two/__test__/isPowerOfTwoBitwise.test.js +++ /dev/null @@ -1,23 +0,0 @@ -import isPowerOfTwoBitwise from '../isPowerOfTwoBitwise'; - -describe('isPowerOfTwoBitwise', () => { - it('should check if the number is made by multiplying twos', () => { - expect(isPowerOfTwoBitwise(-1)).toBe(false); - expect(isPowerOfTwoBitwise(0)).toBe(false); - expect(isPowerOfTwoBitwise(1)).toBe(true); - expect(isPowerOfTwoBitwise(2)).toBe(true); - expect(isPowerOfTwoBitwise(3)).toBe(false); - expect(isPowerOfTwoBitwise(4)).toBe(true); - expect(isPowerOfTwoBitwise(5)).toBe(false); - expect(isPowerOfTwoBitwise(6)).toBe(false); - expect(isPowerOfTwoBitwise(7)).toBe(false); - expect(isPowerOfTwoBitwise(8)).toBe(true); - expect(isPowerOfTwoBitwise(10)).toBe(false); - expect(isPowerOfTwoBitwise(12)).toBe(false); - expect(isPowerOfTwoBitwise(16)).toBe(true); - expect(isPowerOfTwoBitwise(31)).toBe(false); - expect(isPowerOfTwoBitwise(64)).toBe(true); - expect(isPowerOfTwoBitwise(1024)).toBe(true); - expect(isPowerOfTwoBitwise(1023)).toBe(false); - }); -}); diff --git a/src/algorithms/math/is-power-of-two/isPowerOfTwo.js b/src/algorithms/math/is-power-of-two/isPowerOfTwo.js deleted file mode 100644 index 6f7590dd87..0000000000 --- a/src/algorithms/math/is-power-of-two/isPowerOfTwo.js +++ /dev/null @@ -1,25 +0,0 @@ -/** - * @param {number} number - * @return {boolean} - */ -export default function isPowerOfTwo(number) { - // 1 (2^0) is the smallest power of two. - if (number < 1) { - return false; - } - - // Let's find out if we can divide the number by two - // many times without remainder. - let dividedNumber = number; - while (dividedNumber !== 1) { - if (dividedNumber % 2 !== 0) { - // For every case when remainder isn't zero we can say that this number - // couldn't be a result of power of two. - return false; - } - - dividedNumber /= 2; - } - - return true; -} diff --git a/src/algorithms/math/is-power-of-two/isPowerOfTwoBitwise.js b/src/algorithms/math/is-power-of-two/isPowerOfTwoBitwise.js deleted file mode 100644 index af1177355f..0000000000 --- a/src/algorithms/math/is-power-of-two/isPowerOfTwoBitwise.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * @param {number} number - * @return {boolean} - */ -export default function isPowerOfTwoBitwise(number) { - // 1 (2^0) is the smallest power of two. - if (number < 1) { - return false; - } - - /* - * Powers of two in binary look like this: - * 1: 0001 - * 2: 0010 - * 4: 0100 - * 8: 1000 - * - * Note that there is always exactly 1 bit set. The only exception is with a signed integer. - * e.g. An 8-bit signed integer with a value of -128 looks like: - * 10000000 - * - * So after checking that the number is greater than zero, we can use a clever little bit - * hack to test that one and only one bit is set. - */ - return (number & (number - 1)) === 0; -} diff --git a/src/algorithms/math/least-common-multiple/README.md b/src/algorithms/math/least-common-multiple/README.md deleted file mode 100644 index 3e49af9a5f..0000000000 --- a/src/algorithms/math/least-common-multiple/README.md +++ /dev/null @@ -1,62 +0,0 @@ -# Least common multiple - -In arithmetic and number theory, the least common multiple, -lowest common multiple, or smallest common multiple of -two integers `a` and `b`, usually denoted by `LCM(a, b)`, is -the smallest positive integer that is divisible by -both `a` and `b`. Since division of integers by zero is -undefined, this definition has meaning only if `a` and `b` are -both different from zero. However, some authors define `lcm(a,0)` -as `0` for all `a`, which is the result of taking the `lcm` -to be the least upper bound in the lattice of divisibility. - -## Example - -What is the LCM of 4 and 6? - -Multiples of `4` are: - -``` -4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, 64, 68, 72, 76, ... -``` - -and the multiples of `6` are: - -``` -6, 12, 18, 24, 30, 36, 42, 48, 54, 60, 66, 72, ... -``` - -Common multiples of `4` and `6` are simply the numbers -that are in both lists: - -``` -12, 24, 36, 48, 60, 72, .... -``` - -So, from this list of the first few common multiples of -the numbers `4` and `6`, their least common multiple is `12`. - -## Computing the least common multiple - -The following formula reduces the problem of computing the -least common multiple to the problem of computing the greatest -common divisor (GCD), also known as the greatest common factor: - -``` -lcm(a, b) = |a * b| / gcd(a, b) -``` - -![LCM](https://upload.wikimedia.org/wikipedia/commons/c/c9/Symmetrical_5-set_Venn_diagram_LCM_2_3_4_5_7.svg) - -A Venn diagram showing the least common multiples of -combinations of `2`, `3`, `4`, `5` and `7` (`6` is skipped as -it is `2 × 3`, both of which are already represented). - -For example, a card game which requires its cards to be -divided equally among up to `5` players requires at least `60` -cards, the number at the intersection of the `2`, `3`, `4` -and `5` sets, but not the `7` set. - -## References - -[Wikipedia](https://en.wikipedia.org/wiki/Least_common_multiple) diff --git a/src/algorithms/math/least-common-multiple/__test__/leastCommonMultiple.test.js b/src/algorithms/math/least-common-multiple/__test__/leastCommonMultiple.test.js deleted file mode 100644 index 2152e110a1..0000000000 --- a/src/algorithms/math/least-common-multiple/__test__/leastCommonMultiple.test.js +++ /dev/null @@ -1,18 +0,0 @@ -import leastCommonMultiple from '../leastCommonMultiple'; - -describe('leastCommonMultiple', () => { - it('should find least common multiple', () => { - expect(leastCommonMultiple(0, 0)).toBe(0); - expect(leastCommonMultiple(1, 0)).toBe(0); - expect(leastCommonMultiple(0, 1)).toBe(0); - expect(leastCommonMultiple(4, 6)).toBe(12); - expect(leastCommonMultiple(6, 21)).toBe(42); - expect(leastCommonMultiple(7, 2)).toBe(14); - expect(leastCommonMultiple(3, 5)).toBe(15); - expect(leastCommonMultiple(7, 3)).toBe(21); - expect(leastCommonMultiple(1000000, 2)).toBe(1000000); - expect(leastCommonMultiple(-9, -18)).toBe(18); - expect(leastCommonMultiple(-7, -9)).toBe(63); - expect(leastCommonMultiple(-7, 9)).toBe(63); - }); -}); diff --git a/src/algorithms/math/least-common-multiple/leastCommonMultiple.js b/src/algorithms/math/least-common-multiple/leastCommonMultiple.js deleted file mode 100644 index 26a7681039..0000000000 --- a/src/algorithms/math/least-common-multiple/leastCommonMultiple.js +++ /dev/null @@ -1,11 +0,0 @@ -import euclideanAlgorithm from '../euclidean-algorithm/euclideanAlgorithm'; - -/** - * @param {number} a - * @param {number} b - * @return {number} - */ - -export default function leastCommonMultiple(a, b) { - return ((a === 0) || (b === 0)) ? 0 : Math.abs(a * b) / euclideanAlgorithm(a, b); -} diff --git a/src/algorithms/math/liu-hui/README.md b/src/algorithms/math/liu-hui/README.md deleted file mode 100644 index c53257f8dd..0000000000 --- a/src/algorithms/math/liu-hui/README.md +++ /dev/null @@ -1,92 +0,0 @@ -# Liu Hui's π Algorithm - -Liu Hui remarked in his commentary to The Nine Chapters on the Mathematical Art, -that the ratio of the circumference of an inscribed hexagon to the diameter of -the circle was `three`, hence `π` must be greater than three. He went on to provide -a detailed step-by-step description of an iterative algorithm to calculate `π` to -any required accuracy based on bisecting polygons; he calculated `π` to -between `3.141024` and `3.142708` with a 96-gon; he suggested that `3.14` was -a good enough approximation, and expressed `π` as `157/50`; he admitted that -this number was a bit small. Later he invented an ingenious quick method to -improve on it, and obtained `π ≈ 3.1416` with only a 96-gon, with an accuracy -comparable to that from a 1536-gon. His most important contribution in this -area was his simple iterative `π` algorithm. - -## Area of a circle - -Liu Hui argued: - -> Multiply one side of a hexagon by the radius (of its -circumcircle), then multiply this by three, to yield the -area of a dodecagon; if we cut a hexagon into a -dodecagon, multiply its side by its radius, then again -multiply by six, we get the area of a 24-gon; the finer -we cut, the smaller the loss with respect to the area -of circle, thus with further cut after cut, the area of -the resulting polygon will coincide and become one with -the circle; there will be no loss - -![Liu Hui](https://upload.wikimedia.org/wikipedia/commons/6/69/Cutcircle2.svg) - -Liu Hui's method of calculating the area of a circle. - -Further, Liu Hui proved that the area of a circle is half of its circumference -multiplied by its radius. He said: - -> Between a polygon and a circle, there is excess radius. Multiply the excess -radius by a side of the polygon. The resulting area exceeds the boundary of -the circle - -In the diagram `d = excess radius`. Multiplying `d` by one side results in -oblong `ABCD` which exceeds the boundary of the circle. If a side of the polygon -is small (i.e. there is a very large number of sides), then the excess radius -will be small, hence excess area will be small. - -> Multiply the side of a polygon by its radius, and the area doubles; -hence multiply half the circumference by the radius to yield the area of circle. - -![Liu Hui](https://upload.wikimedia.org/wikipedia/commons/9/95/Cutcircle.svg) - -The area within a circle is equal to the radius multiplied by half the -circumference, or `A = r x C/2 = r x r x π`. - -## Iterative algorithm - -Liu Hui began with an inscribed hexagon. Let `M` be the length of one side `AB` of -hexagon, `r` is the radius of circle. - -![Liu Hui](https://upload.wikimedia.org/wikipedia/commons/4/46/Liuhui_geyuanshu.svg) - -Bisect `AB` with line `OPC`, `AC` becomes one side of dodecagon (12-gon), let -its length be `m`. Let the length of `PC` be `j` and the length of `OP` be `G`. - -`AOP`, `APC` are two right angle triangles. Liu Hui used -the [Gou Gu](https://en.wikipedia.org/wiki/Pythagorean_theorem) (Pythagorean theorem) -theorem repetitively: - -![](https://wikimedia.org/api/rest_v1/media/math/render/svg/dbfc192c78539c3901c7bad470302ededb76f813) - -![](https://wikimedia.org/api/rest_v1/media/math/render/svg/ccd12a402367c2d6614c88e75006d50bfc3a9929) - -![](https://wikimedia.org/api/rest_v1/media/math/render/svg/65d77869fc02c302d2d46d45f75ad7e79ae524fb) - -![](https://wikimedia.org/api/rest_v1/media/math/render/svg/a7a0d0d7f505a0f434e5dd80c2fef6d2b30d6100) - -![](https://wikimedia.org/api/rest_v1/media/math/render/svg/c31b9acf38f9d1a248d4023c3bf286bd03007f37) - -![](https://wikimedia.org/api/rest_v1/media/math/render/svg/0dee798efb0b1e3e64d6b3542106cb3ecaa4a383) - -![](https://wikimedia.org/api/rest_v1/media/math/render/svg/3ffeafe88d2983b364ad3442746063e3207fe842) - - -From here, there is now a technique to determine `m` from `M`, which gives the -side length for a polygon with twice the number of edges. Starting with a -hexagon, Liu Hui could determine the side length of a dodecagon using this -formula. Then continue repetitively to determine the side length of a -24-gon given the side length of a dodecagon. He could do this recursively as -many times as necessary. Knowing how to determine the area of these polygons, -Liu Hui could then approximate `π`. - -## References - -- [Wikipedia](https://en.wikipedia.org/wiki/Liu_Hui%27s_%CF%80_algorithm) diff --git a/src/algorithms/math/liu-hui/__test__/liuHui.test.js b/src/algorithms/math/liu-hui/__test__/liuHui.test.js deleted file mode 100644 index 44f7464bd3..0000000000 --- a/src/algorithms/math/liu-hui/__test__/liuHui.test.js +++ /dev/null @@ -1,19 +0,0 @@ -import liuHui from '../liuHui'; - -describe('liuHui', () => { - it('should calculate π based on 12-gon', () => { - expect(liuHui(1)).toBe(3); - }); - - it('should calculate π based on 24-gon', () => { - expect(liuHui(2)).toBe(3.105828541230249); - }); - - it('should calculate π based on 6144-gon', () => { - expect(liuHui(10)).toBe(3.1415921059992717); - }); - - it('should calculate π based on 201326592-gon', () => { - expect(liuHui(25)).toBe(3.141592653589793); - }); -}); diff --git a/src/algorithms/math/liu-hui/liuHui.js b/src/algorithms/math/liu-hui/liuHui.js deleted file mode 100644 index e289ed8113..0000000000 --- a/src/algorithms/math/liu-hui/liuHui.js +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Let circleRadius is the radius of circle. - * circleRadius is also the side length of the inscribed hexagon - */ -const circleRadius = 1; - -/** - * @param {number} sideLength - * @param {number} splitCounter - * @return {number} - */ -function getNGonSideLength(sideLength, splitCounter) { - if (splitCounter <= 0) { - return sideLength; - } - - const halfSide = sideLength / 2; - - // Liu Hui used the Gou Gu (Pythagorean theorem) theorem repetitively. - const perpendicular = Math.sqrt((circleRadius ** 2) - (halfSide ** 2)); - const excessRadius = circleRadius - perpendicular; - const splitSideLength = Math.sqrt((excessRadius ** 2) + (halfSide ** 2)); - - return getNGonSideLength(splitSideLength, splitCounter - 1); -} - -/** - * @param {number} splitCount - * @return {number} - */ -function getNGonSideCount(splitCount) { - // Liu Hui began with an inscribed hexagon (6-gon). - const hexagonSidesCount = 6; - - // On every split iteration we make N-gons: 6-gon, 12-gon, 24-gon, 48-gon and so on. - return hexagonSidesCount * (splitCount ? 2 ** splitCount : 1); -} - -/** - * Calculate the π value using Liu Hui's π algorithm - * - * @param {number} splitCount - number of times we're going to split 6-gon. - * On each split we will receive 12-gon, 24-gon and so on. - * @return {number} - */ -export default function liuHui(splitCount = 1) { - const nGonSideLength = getNGonSideLength(circleRadius, splitCount - 1); - const nGonSideCount = getNGonSideCount(splitCount - 1); - const nGonPerimeter = nGonSideLength * nGonSideCount; - const approximateCircleArea = (nGonPerimeter / 2) * circleRadius; - - // Return approximate value of pi. - return approximateCircleArea / (circleRadius ** 2); -} diff --git a/src/algorithms/math/matrix/Matrix.js b/src/algorithms/math/matrix/Matrix.js deleted file mode 100644 index 2aee126ba2..0000000000 --- a/src/algorithms/math/matrix/Matrix.js +++ /dev/null @@ -1,309 +0,0 @@ -/** - * @typedef {number} Cell - * @typedef {Cell[][]|Cell[][][]} Matrix - * @typedef {number[]} Shape - * @typedef {number[]} CellIndices - */ - -/** - * Gets the matrix's shape. - * - * @param {Matrix} m - * @returns {Shape} - */ -export const shape = (m) => { - const shapes = []; - let dimension = m; - while (dimension && Array.isArray(dimension)) { - shapes.push(dimension.length); - dimension = (dimension.length && [...dimension][0]) || null; - } - return shapes; -}; - -/** - * Checks if matrix has a correct type. - * - * @param {Matrix} m - * @throws {Error} - */ -const validateType = (m) => { - if ( - !m - || !Array.isArray(m) - || !Array.isArray(m[0]) - ) { - throw new Error('Invalid matrix format'); - } -}; - -/** - * Checks if matrix is two dimensional. - * - * @param {Matrix} m - * @throws {Error} - */ -const validate2D = (m) => { - validateType(m); - const aShape = shape(m); - if (aShape.length !== 2) { - throw new Error('Matrix is not of 2D shape'); - } -}; - -/** - * Validates that matrices are of the same shape. - * - * @param {Matrix} a - * @param {Matrix} b - * @trows {Error} - */ -export const validateSameShape = (a, b) => { - validateType(a); - validateType(b); - - const aShape = shape(a); - const bShape = shape(b); - - if (aShape.length !== bShape.length) { - throw new Error('Matrices have different dimensions'); - } - - while (aShape.length && bShape.length) { - if (aShape.pop() !== bShape.pop()) { - throw new Error('Matrices have different shapes'); - } - } -}; - -/** - * Generates the matrix of specific shape with specific values. - * - * @param {Shape} mShape - the shape of the matrix to generate - * @param {function({CellIndex}): Cell} fill - cell values of a generated matrix. - * @returns {Matrix} - */ -export const generate = (mShape, fill) => { - /** - * Generates the matrix recursively. - * - * @param {Shape} recShape - the shape of the matrix to generate - * @param {CellIndices} recIndices - * @returns {Matrix} - */ - const generateRecursively = (recShape, recIndices) => { - if (recShape.length === 1) { - return Array(recShape[0]) - .fill(null) - .map((cellValue, cellIndex) => fill([...recIndices, cellIndex])); - } - const m = []; - for (let i = 0; i < recShape[0]; i += 1) { - m.push(generateRecursively(recShape.slice(1), [...recIndices, i])); - } - return m; - }; - - return generateRecursively(mShape, []); -}; - -/** - * Generates the matrix of zeros of specified shape. - * - * @param {Shape} mShape - shape of the matrix - * @returns {Matrix} - */ -export const zeros = (mShape) => { - return generate(mShape, () => 0); -}; - -/** - * @param {Matrix} a - * @param {Matrix} b - * @return Matrix - * @throws {Error} - */ -export const dot = (a, b) => { - // Validate inputs. - validate2D(a); - validate2D(b); - - // Check dimensions. - const aShape = shape(a); - const bShape = shape(b); - if (aShape[1] !== bShape[0]) { - throw new Error('Matrices have incompatible shape for multiplication'); - } - - // Perform matrix multiplication. - const outputShape = [aShape[0], bShape[1]]; - const c = zeros(outputShape); - - for (let bCol = 0; bCol < b[0].length; bCol += 1) { - for (let aRow = 0; aRow < a.length; aRow += 1) { - let cellSum = 0; - for (let aCol = 0; aCol < a[aRow].length; aCol += 1) { - cellSum += a[aRow][aCol] * b[aCol][bCol]; - } - c[aRow][bCol] = cellSum; - } - } - - return c; -}; - -/** - * Transposes the matrix. - * - * @param {Matrix} m - * @returns Matrix - * @throws {Error} - */ -export const t = (m) => { - validate2D(m); - const mShape = shape(m); - const transposed = zeros([mShape[1], mShape[0]]); - for (let row = 0; row < m.length; row += 1) { - for (let col = 0; col < m[0].length; col += 1) { - transposed[col][row] = m[row][col]; - } - } - return transposed; -}; - -/** - * Traverses the matrix. - * - * @param {Matrix} m - * @param {function(indices: CellIndices, c: Cell)} visit - */ -export const walk = (m, visit) => { - /** - * Traverses the matrix recursively. - * - * @param {Matrix} recM - * @param {CellIndices} cellIndices - * @return {Matrix} - */ - const recWalk = (recM, cellIndices) => { - const recMShape = shape(recM); - - if (recMShape.length === 1) { - for (let i = 0; i < recM.length; i += 1) { - visit([...cellIndices, i], recM[i]); - } - } - for (let i = 0; i < recM.length; i += 1) { - recWalk(recM[i], [...cellIndices, i]); - } - }; - - recWalk(m, []); -}; - -/** - * Gets the matrix cell value at specific index. - * - * @param {Matrix} m - Matrix that contains the cell that needs to be updated - * @param {CellIndices} cellIndices - Array of cell indices - * @return {Cell} - */ -export const getCellAtIndex = (m, cellIndices) => { - // We start from the row at specific index. - let cell = m[cellIndices[0]]; - // Going deeper into the next dimensions but not to the last one to preserve - // the pointer to the last dimension array. - for (let dimIdx = 1; dimIdx < cellIndices.length - 1; dimIdx += 1) { - cell = cell[cellIndices[dimIdx]]; - } - // At this moment the cell variable points to the array at the last needed dimension. - return cell[cellIndices[cellIndices.length - 1]]; -}; - -/** - * Update the matrix cell at specific index. - * - * @param {Matrix} m - Matrix that contains the cell that needs to be updated - * @param {CellIndices} cellIndices - Array of cell indices - * @param {Cell} cellValue - New cell value - */ -export const updateCellAtIndex = (m, cellIndices, cellValue) => { - // We start from the row at specific index. - let cell = m[cellIndices[0]]; - // Going deeper into the next dimensions but not to the last one to preserve - // the pointer to the last dimension array. - for (let dimIdx = 1; dimIdx < cellIndices.length - 1; dimIdx += 1) { - cell = cell[cellIndices[dimIdx]]; - } - // At this moment the cell variable points to the array at the last needed dimension. - cell[cellIndices[cellIndices.length - 1]] = cellValue; -}; - -/** - * Adds two matrices element-wise. - * - * @param {Matrix} a - * @param {Matrix} b - * @return {Matrix} - */ -export const add = (a, b) => { - validateSameShape(a, b); - const result = zeros(shape(a)); - - walk(a, (cellIndices, cellValue) => { - updateCellAtIndex(result, cellIndices, cellValue); - }); - - walk(b, (cellIndices, cellValue) => { - const currentCellValue = getCellAtIndex(result, cellIndices); - updateCellAtIndex(result, cellIndices, currentCellValue + cellValue); - }); - - return result; -}; - -/** - * Multiplies two matrices element-wise. - * - * @param {Matrix} a - * @param {Matrix} b - * @return {Matrix} - */ -export const mul = (a, b) => { - validateSameShape(a, b); - const result = zeros(shape(a)); - - walk(a, (cellIndices, cellValue) => { - updateCellAtIndex(result, cellIndices, cellValue); - }); - - walk(b, (cellIndices, cellValue) => { - const currentCellValue = getCellAtIndex(result, cellIndices); - updateCellAtIndex(result, cellIndices, currentCellValue * cellValue); - }); - - return result; -}; - -/** - * Subtract two matrices element-wise. - * - * @param {Matrix} a - * @param {Matrix} b - * @return {Matrix} - */ -export const sub = (a, b) => { - validateSameShape(a, b); - const result = zeros(shape(a)); - - walk(a, (cellIndices, cellValue) => { - updateCellAtIndex(result, cellIndices, cellValue); - }); - - walk(b, (cellIndices, cellValue) => { - const currentCellValue = getCellAtIndex(result, cellIndices); - updateCellAtIndex(result, cellIndices, currentCellValue - cellValue); - }); - - return result; -}; diff --git a/src/algorithms/math/matrix/README.md b/src/algorithms/math/matrix/README.md deleted file mode 100644 index 8e084403b0..0000000000 --- a/src/algorithms/math/matrix/README.md +++ /dev/null @@ -1,63 +0,0 @@ -# Matrices - -In mathematics, a **matrix** (plural **matrices**) is a rectangular array or table of numbers, symbols, or expressions, arranged in rows and columns. For example, the dimension of the matrix below is `2 × 3` (read "two by three"), because there are two rows and three columns: - -``` -| 1 9 -13 | -| 20 5 -6 | -``` - -![An `m × n` matrix](https://upload.wikimedia.org/wikipedia/commons/b/bf/Matris.png) - -An `m × n` matrix: the `m` rows are horizontal, and the `n` columns are vertical. Each element of a matrix is often denoted by a variable with two subscripts. For example, a2,1 represents the element at the second row and first column of the matrix - -## Operations on matrices - -### Addition - -To add two matrices: add the numbers in the matching positions: - -![Matrices addition](https://www.mathsisfun.com/algebra/images/matrix-addition.gif) - -The two matrices must be the same size, i.e. the rows must match in size, and the columns must match in size. - -### Subtracting - -To subtract two matrices: subtract the numbers in the matching positions: - -![Matrices subtraction](https://www.mathsisfun.com/algebra/images/matrix-subtraction.gif) - -### Multiply by a Constant - -We can multiply a matrix by a constant (the value 2 in this case): - -![Matrices multiplication be a constant](https://www.mathsisfun.com/algebra/images/matrix-multiply-constant.gif) - -### Multiplying by Another Matrix - -To multiply a matrix by another matrix we need to do the [dot product](https://www.mathsisfun.com/algebra/vectors-dot-product.html) of rows and columns. - -To work out the answer for the **1st row** and **1st column**: - -![Matrices multiplication - 1st step](https://www.mathsisfun.com/algebra/images/matrix-multiply-a.svg) - -Here it is for the 1st row and 2nd column: - -![Matrices multiplication - 2st step](https://www.mathsisfun.com/algebra/images/matrix-multiply-b.svg) - -If we'll do the same for the rest of the rows and columns we'll get the following resulting matrix: - -![Matrices multiplication - Result](https://www.mathsisfun.com/algebra/images/matrix-multiply-c.svg) - -### Transposing - -To "transpose" a matrix, swap the rows and columns. - -We put a "T" in the top right-hand corner to mean transpose: - -![Transposing](https://www.mathsisfun.com/algebra/images/matrix-transpose.gif) - -## References - -- [Matrices on MathIsFun](https://www.mathsisfun.com/algebra/matrix-introduction.html) -- [Matrix on Wikipedia](https://en.wikipedia.org/wiki/Matrix_(mathematics)) diff --git a/src/algorithms/math/matrix/__tests__/Matrix.test.js b/src/algorithms/math/matrix/__tests__/Matrix.test.js deleted file mode 100644 index 37dc892b0a..0000000000 --- a/src/algorithms/math/matrix/__tests__/Matrix.test.js +++ /dev/null @@ -1,455 +0,0 @@ -import * as mtrx from '../Matrix'; - -describe('Matrix', () => { - it('should throw when trying to add matrices of invalid shapes', () => { - expect( - () => mtrx.dot([0], [1]), - ).toThrowError('Invalid matrix format'); - expect( - () => mtrx.dot([[0]], [1]), - ).toThrowError('Invalid matrix format'); - expect( - () => mtrx.dot([[[0]]], [[1]]), - ).toThrowError('Matrix is not of 2D shape'); - expect( - () => mtrx.dot([[0]], [[1], [2]]), - ).toThrowError('Matrices have incompatible shape for multiplication'); - }); - - it('should calculate matrices dimensions', () => { - expect(mtrx.shape([])).toEqual([0]); - - expect(mtrx.shape([ - [], - ])).toEqual([1, 0]); - - expect(mtrx.shape([ - [0], - ])).toEqual([1, 1]); - - expect(mtrx.shape([ - [0, 0], - ])).toEqual([1, 2]); - - expect(mtrx.shape([ - [0, 0], - [0, 0], - ])).toEqual([2, 2]); - - expect(mtrx.shape([ - [0, 0, 0], - [0, 0, 0], - ])).toEqual([2, 3]); - - expect(mtrx.shape([ - [0, 0], - [0, 0], - [0, 0], - ])).toEqual([3, 2]); - - expect(mtrx.shape([ - [0, 0, 0], - [0, 0, 0], - [0, 0, 0], - ])).toEqual([3, 3]); - - expect(mtrx.shape([ - [0], - [0], - [0], - ])).toEqual([3, 1]); - - expect(mtrx.shape([ - [[0], [0], [0]], - [[0], [0], [0]], - [[0], [0], [0]], - ])).toEqual([3, 3, 1]); - - expect(mtrx.shape([ - [[0, 0, 0], [0, 0, 0], [0, 0, 0]], - [[0, 0, 0], [0, 0, 0], [0, 0, 0]], - [[0, 0, 0], [0, 0, 0], [0, 0, 0]], - ])).toEqual([3, 3, 3]); - }); - - it('should generate the matrix of zeros', () => { - expect(mtrx.zeros([1, 0])).toEqual([ - [], - ]); - - expect(mtrx.zeros([1, 1])).toEqual([ - [0], - ]); - - expect(mtrx.zeros([1, 3])).toEqual([ - [0, 0, 0], - ]); - - expect(mtrx.zeros([3, 3])).toEqual([ - [0, 0, 0], - [0, 0, 0], - [0, 0, 0], - ]); - - expect(mtrx.zeros([3, 3, 1])).toEqual([ - [[0], [0], [0]], - [[0], [0], [0]], - [[0], [0], [0]], - ]); - }); - - it('should generate the matrix with custom values', () => { - expect(mtrx.generate([1, 0], () => 1)).toEqual([ - [], - ]); - - expect(mtrx.generate([1, 1], () => 1)).toEqual([ - [1], - ]); - - expect(mtrx.generate([1, 3], () => 1)).toEqual([ - [1, 1, 1], - ]); - - expect(mtrx.generate([3, 3], () => 1)).toEqual([ - [1, 1, 1], - [1, 1, 1], - [1, 1, 1], - ]); - - expect(mtrx.generate([3, 3, 1], () => 1)).toEqual([ - [[1], [1], [1]], - [[1], [1], [1]], - [[1], [1], [1]], - ]); - }); - - it('should generate a custom matrix based on specific cell indices', () => { - const indicesCallback = jest.fn((indices) => { - return indices[0] * 10 + indices[1]; - }); - const m = mtrx.generate([3, 3], indicesCallback); - - expect(indicesCallback).toHaveBeenCalledTimes(3 * 3); - expect(indicesCallback.mock.calls[0][0]).toEqual([0, 0]); - expect(indicesCallback.mock.calls[1][0]).toEqual([0, 1]); - expect(indicesCallback.mock.calls[2][0]).toEqual([0, 2]); - expect(indicesCallback.mock.calls[3][0]).toEqual([1, 0]); - expect(indicesCallback.mock.calls[4][0]).toEqual([1, 1]); - expect(indicesCallback.mock.calls[5][0]).toEqual([1, 2]); - expect(indicesCallback.mock.calls[6][0]).toEqual([2, 0]); - expect(indicesCallback.mock.calls[7][0]).toEqual([2, 1]); - expect(indicesCallback.mock.calls[8][0]).toEqual([2, 2]); - expect(m).toEqual([ - [0, 1, 2], - [10, 11, 12], - [20, 21, 22], - ]); - }); - - it('should multiply two matrices', () => { - let c; - c = mtrx.dot( - [ - [1, 2], - [3, 4], - ], - [ - [5, 6], - [7, 8], - ], - ); - expect(mtrx.shape(c)).toEqual([2, 2]); - expect(c).toEqual([ - [19, 22], - [43, 50], - ]); - - c = mtrx.dot( - [ - [1, 2], - [3, 4], - ], - [ - [5], - [6], - ], - ); - expect(mtrx.shape(c)).toEqual([2, 1]); - expect(c).toEqual([ - [17], - [39], - ]); - - c = mtrx.dot( - [ - [1, 2, 3], - [4, 5, 6], - ], - [ - [7, 8], - [9, 10], - [11, 12], - ], - ); - expect(mtrx.shape(c)).toEqual([2, 2]); - expect(c).toEqual([ - [58, 64], - [139, 154], - ]); - - c = mtrx.dot( - [ - [3, 4, 2], - ], - [ - [13, 9, 7, 5], - [8, 7, 4, 6], - [6, 4, 0, 3], - ], - ); - expect(mtrx.shape(c)).toEqual([1, 4]); - expect(c).toEqual([ - [83, 63, 37, 45], - ]); - }); - - it('should transpose matrices', () => { - expect(mtrx.t([[1, 2, 3]])).toEqual([ - [1], - [2], - [3], - ]); - - expect(mtrx.t([ - [1], - [2], - [3], - ])).toEqual([ - [1, 2, 3], - ]); - - expect(mtrx.t([ - [1, 2, 3], - [4, 5, 6], - ])).toEqual([ - [1, 4], - [2, 5], - [3, 6], - ]); - - expect(mtrx.t([ - [1, 2, 3], - [4, 5, 6], - [7, 8, 9], - ])).toEqual([ - [1, 4, 7], - [2, 5, 8], - [3, 6, 9], - ]); - }); - - it('should throw when trying to transpose non 2D matrix', () => { - expect(() => { - mtrx.t([[[1]]]); - }).toThrowError('Matrix is not of 2D shape'); - }); - - it('should add two matrices', () => { - expect(mtrx.add([[1]], [[2]])).toEqual([[3]]); - - expect(mtrx.add( - [[1, 2, 3]], - [[4, 5, 6]], - )) - .toEqual( - [[5, 7, 9]], - ); - - expect(mtrx.add( - [[1], [2], [3]], - [[4], [5], [6]], - )) - .toEqual( - [[5], [7], [9]], - ); - - expect(mtrx.add( - [ - [1, 2, 3], - [4, 5, 6], - [7, 8, 9], - ], - [ - [10, 11, 12], - [13, 14, 15], - [16, 17, 18], - ], - )) - .toEqual( - [ - [11, 13, 15], - [17, 19, 21], - [23, 25, 27], - ], - ); - - expect(mtrx.add( - [ - [[1], [2], [3]], - [[4], [5], [6]], - [[7], [8], [9]], - ], - [ - [[10], [11], [12]], - [[13], [14], [15]], - [[16], [17], [18]], - ], - )) - .toEqual( - [ - [[11], [13], [15]], - [[17], [19], [21]], - [[23], [25], [27]], - ], - ); - }); - - it('should throw when trying to add matrices of different shape', () => { - expect(() => mtrx.add([[0]], [[[0]]])).toThrowError( - 'Matrices have different dimensions', - ); - - expect(() => mtrx.add([[0]], [[0, 0]])).toThrowError( - 'Matrices have different shapes', - ); - }); - - it('should do element wise multiplication two matrices', () => { - expect(mtrx.mul([[2]], [[3]])).toEqual([[6]]); - - expect(mtrx.mul( - [[1, 2, 3]], - [[4, 5, 6]], - )) - .toEqual( - [[4, 10, 18]], - ); - - expect(mtrx.mul( - [[1], [2], [3]], - [[4], [5], [6]], - )) - .toEqual( - [[4], [10], [18]], - ); - - expect(mtrx.mul( - [ - [1, 2], - [3, 4], - ], - [ - [5, 6], - [7, 8], - ], - )) - .toEqual( - [ - [5, 12], - [21, 32], - ], - ); - - expect(mtrx.mul( - [ - [[1], [2]], - [[3], [4]], - ], - [ - [[5], [6]], - [[7], [8]], - ], - )) - .toEqual( - [ - [[5], [12]], - [[21], [32]], - ], - ); - }); - - it('should throw when trying to multiply matrices element-wise of different shape', () => { - expect(() => mtrx.mul([[0]], [[[0]]])).toThrowError( - 'Matrices have different dimensions', - ); - - expect(() => mtrx.mul([[0]], [[0, 0]])).toThrowError( - 'Matrices have different shapes', - ); - }); - - it('should do element wise subtraction two matrices', () => { - expect(mtrx.sub([[3]], [[2]])).toEqual([[1]]); - - expect(mtrx.sub( - [[10, 12, 14]], - [[4, 5, 6]], - )) - .toEqual( - [[6, 7, 8]], - ); - - expect(mtrx.sub( - [[[10], [12], [14]]], - [[[4], [5], [6]]], - )) - .toEqual( - [[[6], [7], [8]]], - ); - - expect(mtrx.sub( - [ - [10, 20], - [30, 40], - ], - [ - [5, 6], - [7, 8], - ], - )) - .toEqual( - [ - [5, 14], - [23, 32], - ], - ); - - expect(mtrx.sub( - [ - [[10], [20]], - [[30], [40]], - ], - [ - [[5], [6]], - [[7], [8]], - ], - )) - .toEqual( - [ - [[5], [14]], - [[23], [32]], - ], - ); - }); - - it('should throw when trying to subtract matrices element-wise of different shape', () => { - expect(() => mtrx.sub([[0]], [[[0]]])).toThrowError( - 'Matrices have different dimensions', - ); - - expect(() => mtrx.sub([[0]], [[0, 0]])).toThrowError( - 'Matrices have different shapes', - ); - }); -}); diff --git a/src/algorithms/math/pascal-triangle/README.md b/src/algorithms/math/pascal-triangle/README.md deleted file mode 100644 index ff5075414c..0000000000 --- a/src/algorithms/math/pascal-triangle/README.md +++ /dev/null @@ -1,64 +0,0 @@ -# Pascal's Triangle - -In mathematics, **Pascal's triangle** is a triangular array of -the [binomial coefficients](https://en.wikipedia.org/wiki/Binomial_coefficient). - -The rows of Pascal's triangle are conventionally enumerated -starting with row `n = 0` at the top (the `0th` row). The -entries in each row are numbered from the left beginning -with `k = 0` and are usually staggered relative to the -numbers in the adjacent rows. The triangle may be constructed -in the following manner: In row `0` (the topmost row), there -is a unique nonzero entry `1`. Each entry of each subsequent -row is constructed by adding the number above and to the -left with the number above and to the right, treating blank -entries as `0`. For example, the initial number in the -first (or any other) row is `1` (the sum of `0` and `1`), -whereas the numbers `1` and `3` in the third row are added -to produce the number `4` in the fourth row. - -![Pascal's Triangle](https://upload.wikimedia.org/wikipedia/commons/0/0d/PascalTriangleAnimated2.gif) - -## Formula - -The entry in the `nth` row and `kth` column of Pascal's -triangle is denoted ![Formula](https://wikimedia.org/api/rest_v1/media/math/render/svg/206415d3742167e319b2e52c2ca7563b799abad7). -For example, the unique nonzero entry in the topmost -row is ![Formula example](https://wikimedia.org/api/rest_v1/media/math/render/svg/b7e35f86368d5978b46c07fd6dddca86bd6e635c). - -With this notation, the construction of the previous -paragraph may be written as follows: - -![Formula](https://wikimedia.org/api/rest_v1/media/math/render/svg/203b128a098e18cbb8cf36d004bd7282b28461bf) - -for any non-negative integer `n` and any -integer `k` between `0` and `n`, inclusive. - -![Binomial Coefficient](https://wikimedia.org/api/rest_v1/media/math/render/svg/a2457a7ef3c77831e34e06a1fe17a80b84a03181) - -## Calculating triangle entries in O(n) time - -We know that `i`-th entry in a line number `lineNumber` is -Binomial Coefficient `C(lineNumber, i)` and all lines start -with value `1`. The idea is to -calculate `C(lineNumber, i)` using `C(lineNumber, i-1)`. It -can be calculated in `O(1)` time using the following: - -``` -C(lineNumber, i) = lineNumber! / ((lineNumber - i)! * i!) -C(lineNumber, i - 1) = lineNumber! / ((lineNumber - i + 1)! * (i - 1)!) -``` - -We can derive following expression from above two expressions: - -``` -C(lineNumber, i) = C(lineNumber, i - 1) * (lineNumber - i + 1) / i -``` - -So `C(lineNumber, i)` can be calculated -from `C(lineNumber, i - 1)` in `O(1)` time. - -## References - -- [Wikipedia](https://en.wikipedia.org/wiki/Pascal%27s_triangle) -- [GeeksForGeeks](https://www.geeksforgeeks.org/pascal-triangle/) diff --git a/src/algorithms/math/pascal-triangle/__test__/pascalTriangle.test.js b/src/algorithms/math/pascal-triangle/__test__/pascalTriangle.test.js deleted file mode 100644 index 152fc8ea35..0000000000 --- a/src/algorithms/math/pascal-triangle/__test__/pascalTriangle.test.js +++ /dev/null @@ -1,14 +0,0 @@ -import pascalTriangle from '../pascalTriangle'; - -describe('pascalTriangle', () => { - it('should calculate Pascal Triangle coefficients for specific line number', () => { - expect(pascalTriangle(0)).toEqual([1]); - expect(pascalTriangle(1)).toEqual([1, 1]); - expect(pascalTriangle(2)).toEqual([1, 2, 1]); - expect(pascalTriangle(3)).toEqual([1, 3, 3, 1]); - expect(pascalTriangle(4)).toEqual([1, 4, 6, 4, 1]); - expect(pascalTriangle(5)).toEqual([1, 5, 10, 10, 5, 1]); - expect(pascalTriangle(6)).toEqual([1, 6, 15, 20, 15, 6, 1]); - expect(pascalTriangle(7)).toEqual([1, 7, 21, 35, 35, 21, 7, 1]); - }); -}); diff --git a/src/algorithms/math/pascal-triangle/__test__/pascalTriangleRecursive.test.js b/src/algorithms/math/pascal-triangle/__test__/pascalTriangleRecursive.test.js deleted file mode 100644 index 2dfdad6bd3..0000000000 --- a/src/algorithms/math/pascal-triangle/__test__/pascalTriangleRecursive.test.js +++ /dev/null @@ -1,14 +0,0 @@ -import pascalTriangleRecursive from '../pascalTriangleRecursive'; - -describe('pascalTriangleRecursive', () => { - it('should calculate Pascal Triangle coefficients for specific line number', () => { - expect(pascalTriangleRecursive(0)).toEqual([1]); - expect(pascalTriangleRecursive(1)).toEqual([1, 1]); - expect(pascalTriangleRecursive(2)).toEqual([1, 2, 1]); - expect(pascalTriangleRecursive(3)).toEqual([1, 3, 3, 1]); - expect(pascalTriangleRecursive(4)).toEqual([1, 4, 6, 4, 1]); - expect(pascalTriangleRecursive(5)).toEqual([1, 5, 10, 10, 5, 1]); - expect(pascalTriangleRecursive(6)).toEqual([1, 6, 15, 20, 15, 6, 1]); - expect(pascalTriangleRecursive(7)).toEqual([1, 7, 21, 35, 35, 21, 7, 1]); - }); -}); diff --git a/src/algorithms/math/pascal-triangle/pascalTriangle.js b/src/algorithms/math/pascal-triangle/pascalTriangle.js deleted file mode 100644 index 35686fa5b0..0000000000 --- a/src/algorithms/math/pascal-triangle/pascalTriangle.js +++ /dev/null @@ -1,16 +0,0 @@ -/** - * @param {number} lineNumber - zero based. - * @return {number[]} - */ -export default function pascalTriangle(lineNumber) { - const currentLine = [1]; - - const currentLineSize = lineNumber + 1; - - for (let numIndex = 1; numIndex < currentLineSize; numIndex += 1) { - // See explanation of this formula in README. - currentLine[numIndex] = (currentLine[numIndex - 1] * (lineNumber - numIndex + 1)) / numIndex; - } - - return currentLine; -} diff --git a/src/algorithms/math/pascal-triangle/pascalTriangleRecursive.js b/src/algorithms/math/pascal-triangle/pascalTriangleRecursive.js deleted file mode 100644 index 120fe25199..0000000000 --- a/src/algorithms/math/pascal-triangle/pascalTriangleRecursive.js +++ /dev/null @@ -1,30 +0,0 @@ -/** - * @param {number} lineNumber - zero based. - * @return {number[]} - */ -export default function pascalTriangleRecursive(lineNumber) { - if (lineNumber === 0) { - return [1]; - } - - const currentLineSize = lineNumber + 1; - const previousLineSize = currentLineSize - 1; - - // Create container for current line values. - const currentLine = []; - - // We'll calculate current line based on previous one. - const previousLine = pascalTriangleRecursive(lineNumber - 1); - - // Let's go through all elements of current line except the first and - // last one (since they were and will be filled with 1's) and calculate - // current coefficient based on previous line. - for (let numIndex = 0; numIndex < currentLineSize; numIndex += 1) { - const leftCoefficient = (numIndex - 1) >= 0 ? previousLine[numIndex - 1] : 0; - const rightCoefficient = numIndex < previousLineSize ? previousLine[numIndex] : 0; - - currentLine[numIndex] = leftCoefficient + rightCoefficient; - } - - return currentLine; -} diff --git a/src/algorithms/math/primality-test/README.md b/src/algorithms/math/primality-test/README.md deleted file mode 100644 index 8a9852dc31..0000000000 --- a/src/algorithms/math/primality-test/README.md +++ /dev/null @@ -1,25 +0,0 @@ -# Primality Test - -A **prime number** (or a **prime**) is a natural number greater than `1` that -cannot be formed by multiplying two smaller natural numbers. A natural number -greater than `1` that is not prime is called a composite number. For -example, `5` is prime because the only ways of writing it as a -product, `1 × 5` or `5 × 1`, involve `5` itself. However, `6` is -composite because it is the product of two numbers `(2 × 3)` that are -both smaller than `6`. - -![Prime Numbers](https://upload.wikimedia.org/wikipedia/commons/f/f0/Primes-vs-composites.svg) - -A **primality test** is an algorithm for determining whether an input -number is prime. Among other fields of mathematics, it is used -for cryptography. Unlike integer factorization, primality tests -do not generally give prime factors, only stating whether the -input number is prime or not. Factorization is thought to be -a computationally difficult problem, whereas primality testing -is comparatively easy (its running time is polynomial in the -size of the input). - -## References - -- [Prime Numbers on Wikipedia](https://en.wikipedia.org/wiki/Prime_number) -- [Primality Test on Wikipedia](https://en.wikipedia.org/wiki/Primality_test) diff --git a/src/algorithms/math/primality-test/__test__/trialDivision.test.js b/src/algorithms/math/primality-test/__test__/trialDivision.test.js deleted file mode 100644 index 224e840ffc..0000000000 --- a/src/algorithms/math/primality-test/__test__/trialDivision.test.js +++ /dev/null @@ -1,37 +0,0 @@ -import trialDivision from '../trialDivision'; - -/** - * @param {function(n: number)} testFunction - */ -function primalityTest(testFunction) { - expect(testFunction(1)).toBe(false); - expect(testFunction(2)).toBe(true); - expect(testFunction(3)).toBe(true); - expect(testFunction(5)).toBe(true); - expect(testFunction(11)).toBe(true); - expect(testFunction(191)).toBe(true); - expect(testFunction(191)).toBe(true); - expect(testFunction(199)).toBe(true); - - expect(testFunction(-1)).toBe(false); - expect(testFunction(0)).toBe(false); - expect(testFunction(4)).toBe(false); - expect(testFunction(6)).toBe(false); - expect(testFunction(12)).toBe(false); - expect(testFunction(14)).toBe(false); - expect(testFunction(25)).toBe(false); - expect(testFunction(192)).toBe(false); - expect(testFunction(200)).toBe(false); - expect(testFunction(400)).toBe(false); - - // It should also deal with floats. - expect(testFunction(0.5)).toBe(false); - expect(testFunction(1.3)).toBe(false); - expect(testFunction(10.5)).toBe(false); -} - -describe('trialDivision', () => { - it('should detect prime numbers', () => { - primalityTest(trialDivision); - }); -}); diff --git a/src/algorithms/math/primality-test/trialDivision.js b/src/algorithms/math/primality-test/trialDivision.js deleted file mode 100644 index c347e05cad..0000000000 --- a/src/algorithms/math/primality-test/trialDivision.js +++ /dev/null @@ -1,35 +0,0 @@ -/** - * @param {number} number - * @return {boolean} - */ -export default function trialDivision(number) { - // Check if number is integer. - if (number % 1 !== 0) { - return false; - } - - if (number <= 1) { - // If number is less than one then it isn't prime by definition. - return false; - } - - if (number <= 3) { - // All numbers from 2 to 3 are prime. - return true; - } - - // If the number is not divided by 2 then we may eliminate all further even dividers. - if (number % 2 === 0) { - return false; - } - - // If there is no dividers up to square root of n then there is no higher dividers as well. - const dividerLimit = Math.sqrt(number); - for (let divider = 3; divider <= dividerLimit; divider += 2) { - if (number % divider === 0) { - return false; - } - } - - return true; -} diff --git a/src/algorithms/math/prime-factors/README.md b/src/algorithms/math/prime-factors/README.md deleted file mode 100644 index d8e0f96e3f..0000000000 --- a/src/algorithms/math/prime-factors/README.md +++ /dev/null @@ -1,37 +0,0 @@ -# Prime Factors - -_Read this in other languages:_ -[简体中文](README.zh-CN.md). - -**Prime number** is a whole number greater than `1` that **cannot** be made by multiplying other whole numbers. The first few prime numbers are: `2`, `3`, `5`, `7`, `11`, `13`, `17`, `19` and so on. - -If we **can** make it by multiplying other whole numbers it is a **Composite Number**. - -![Composite numbers](https://www.mathsisfun.com/numbers/images/prime-composite.svg) - -_Image source: [Math is Fun](https://www.mathsisfun.com/prime-factorization.html)_ - -**Prime factors** are those [prime numbers](https://en.wikipedia.org/wiki/Prime_number) which multiply together to give the original number. For example `39` will have prime factors of `3` and `13` which are also prime numbers. Another example is `15` whose prime factors are `3` and `5`. - -![Factors](https://www.mathsisfun.com/numbers/images/factor-2x3.svg) - -_Image source: [Math is Fun](https://www.mathsisfun.com/prime-factorization.html)_ - -## Finding the prime factors and their count accurately - -The approach is to keep on dividing the natural number `n` by indexes from `i = 2` to `i = n` (by prime indexes only). The value of `n` is being overridden by `(n / i)` on each iteration. - -The time complexity till now is `O(n)` in the worst case scenario since the loop runs from index `i = 2` to `i = n`. This time complexity can be reduced from `O(n)` to `O(sqrt(n))`. The optimisation is achievable when loop runs from `i = 2` to `i = sqrt(n)`. Now, we go only till `O(sqrt(n))` because when `i` becomes greater than `sqrt(n)`, we have the confirmation that there is no index `i` left which can divide `n` completely other than `n` itself. - -## Hardy-Ramanujan formula for approximate calculation of prime-factor count - -In 1917, a theorem was formulated by G.H Hardy and Srinivasa Ramanujan which states that the normal order of the number `ω(n)` of distinct prime factors of a number `n` is `log(log(n))`. - -Roughly speaking, this means that most numbers have about this number of distinct prime factors. - -## References - -- [Prime numbers on Math is Fun](https://www.mathsisfun.com/prime-factorization.html) -- [Prime numbers on Wikipedia](https://en.wikipedia.org/wiki/Prime_number) -- [Hardy–Ramanujan theorem on Wikipedia](https://en.wikipedia.org/wiki/Hardy%E2%80%93Ramanujan_theorem) -- [Prime factorization of a number on Youtube](https://www.youtube.com/watch?v=6PDtgHhpCHo&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8&index=82) diff --git a/src/algorithms/math/prime-factors/README.zh-CN.md b/src/algorithms/math/prime-factors/README.zh-CN.md deleted file mode 100644 index c6ab82e39b..0000000000 --- a/src/algorithms/math/prime-factors/README.zh-CN.md +++ /dev/null @@ -1,38 +0,0 @@ -# 质数因子 - -_Read this in other languages:_ -[english](README.md). - -**质数** 是一个比 `1` 大的整数,且 **不能**由其它整数相乘得出。前几个质数是: `2`, `3`, `5`, `7`, `11`, `13`, `17`, `19`,依此类推。 - -如果我们**能**通过其它整数相乘得出,我们则称它为**合数** - -![Composite numbers](https://www.mathsisfun.com/numbers/images/prime-composite.svg) - -_Image source: [Math is Fun](https://www.mathsisfun.com/prime-factorization.html)_ - - -**质数因子**是那些相乘得到原始数的[质数](https://en.wikipedia.org/wiki/Prime_number)。例如`39`的质数因子是`3`和`13`,`15`的质数因子是`3`和`5`。 - -![Factors](https://www.mathsisfun.com/numbers/images/factor-2x3.svg) - -_Image source: [Math is Fun](https://www.mathsisfun.com/prime-factorization.html)_ - -## 正确计算所有的质数因子及其数量 - -这个方法将自然数`n`从`i = 2`除到`i = n`(仅按质数索引)。且每次循环后`n`的值被`(n / i)`的值替换。 - -在最坏的情况下,即循环从`i = 2`执行到 `i = n`,上述方法的时间复杂度为`O(n)`。时间复杂度其实可以从`O(n)`减少到`O(sqrt(n))`,通过减少循环的执行次数,从`i = 2`执行到 `i = sqrt(n)`。因为可以确认,当`i`大于`sqrt(n)`时,除了`n`本身,再没有数可以被整除了。 - -## Hardy-Ramanujan公式用于计算质数因子的个数 - -1917年,G.H Hardy和Srinivasa Ramanujan提出了一个定理,该定理指出,自然数 `n` 的不同素数的数 `ω(n)` 的正态次序是`log(log(n))`。 - -粗略地讲,这意味着大多数数字具有这个数量的质数因子。 - -## References - -- [Prime numbers on Math is Fun](https://www.mathsisfun.com/prime-factorization.html) -- [Prime numbers on Wikipedia](https://en.wikipedia.org/wiki/Prime_number) -- [Hardy–Ramanujan theorem on Wikipedia](https://en.wikipedia.org/wiki/Hardy%E2%80%93Ramanujan_theorem) -- [Prime factorization of a number on Youtube](https://www.youtube.com/watch?v=6PDtgHhpCHo&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8&index=82) diff --git a/src/algorithms/math/prime-factors/__test__/primeFactors.test.js b/src/algorithms/math/prime-factors/__test__/primeFactors.test.js deleted file mode 100644 index 92c94d1f6f..0000000000 --- a/src/algorithms/math/prime-factors/__test__/primeFactors.test.js +++ /dev/null @@ -1,87 +0,0 @@ -import { - primeFactors, - hardyRamanujan, -} from '../primeFactors'; - -/** - * Calculates the error between exact and approximate prime factor counts. - * @param {number} exactCount - * @param {number} approximateCount - * @returns {number} - approximation error (percentage). - */ -function approximationError(exactCount, approximateCount) { - return (Math.abs((exactCount - approximateCount) / exactCount) * 100); -} - -describe('primeFactors', () => { - it('should find prime factors', () => { - expect(primeFactors(1)).toEqual([]); - expect(primeFactors(2)).toEqual([2]); - expect(primeFactors(3)).toEqual([3]); - expect(primeFactors(4)).toEqual([2, 2]); - expect(primeFactors(14)).toEqual([2, 7]); - expect(primeFactors(40)).toEqual([2, 2, 2, 5]); - expect(primeFactors(54)).toEqual([2, 3, 3, 3]); - expect(primeFactors(100)).toEqual([2, 2, 5, 5]); - expect(primeFactors(156)).toEqual([2, 2, 3, 13]); - expect(primeFactors(273)).toEqual([3, 7, 13]); - expect(primeFactors(300)).toEqual([2, 2, 3, 5, 5]); - expect(primeFactors(980)).toEqual([2, 2, 5, 7, 7]); - expect(primeFactors(1000)).toEqual([2, 2, 2, 5, 5, 5]); - expect(primeFactors(52734)).toEqual([2, 3, 11, 17, 47]); - expect(primeFactors(343434)).toEqual([2, 3, 7, 13, 17, 37]); - expect(primeFactors(456745)).toEqual([5, 167, 547]); - expect(primeFactors(510510)).toEqual([2, 3, 5, 7, 11, 13, 17]); - expect(primeFactors(8735463)).toEqual([3, 3, 11, 88237]); - expect(primeFactors(873452453)).toEqual([149, 1637, 3581]); - }); - - it('should give approximate prime factors count using Hardy-Ramanujan theorem', () => { - expect(hardyRamanujan(2)).toBeCloseTo(-0.366, 2); - expect(hardyRamanujan(4)).toBeCloseTo(0.326, 2); - expect(hardyRamanujan(40)).toBeCloseTo(1.305, 2); - expect(hardyRamanujan(156)).toBeCloseTo(1.6193, 2); - expect(hardyRamanujan(980)).toBeCloseTo(1.929, 2); - expect(hardyRamanujan(52734)).toBeCloseTo(2.386, 2); - expect(hardyRamanujan(343434)).toBeCloseTo(2.545, 2); - expect(hardyRamanujan(456745)).toBeCloseTo(2.567, 2); - expect(hardyRamanujan(510510)).toBeCloseTo(2.575, 2); - expect(hardyRamanujan(8735463)).toBeCloseTo(2.771, 2); - expect(hardyRamanujan(873452453)).toBeCloseTo(3.024, 2); - }); - - it('should give correct deviation between exact and approx counts', () => { - expect(approximationError(primeFactors(2).length, hardyRamanujan(2))) - .toBeCloseTo(136.651, 2); - - expect(approximationError(primeFactors(4).length, hardyRamanujan(2))) - .toBeCloseTo(118.325, 2); - - expect(approximationError(primeFactors(40).length, hardyRamanujan(2))) - .toBeCloseTo(109.162, 2); - - expect(approximationError(primeFactors(156).length, hardyRamanujan(2))) - .toBeCloseTo(109.162, 2); - - expect(approximationError(primeFactors(980).length, hardyRamanujan(2))) - .toBeCloseTo(107.330, 2); - - expect(approximationError(primeFactors(52734).length, hardyRamanujan(52734))) - .toBeCloseTo(52.274, 2); - - expect(approximationError(primeFactors(343434).length, hardyRamanujan(343434))) - .toBeCloseTo(57.578, 2); - - expect(approximationError(primeFactors(456745).length, hardyRamanujan(456745))) - .toBeCloseTo(14.420, 2); - - expect(approximationError(primeFactors(510510).length, hardyRamanujan(510510))) - .toBeCloseTo(63.201, 2); - - expect(approximationError(primeFactors(8735463).length, hardyRamanujan(8735463))) - .toBeCloseTo(30.712, 2); - - expect(approximationError(primeFactors(873452453).length, hardyRamanujan(873452453))) - .toBeCloseTo(0.823, 2); - }); -}); diff --git a/src/algorithms/math/prime-factors/primeFactors.js b/src/algorithms/math/prime-factors/primeFactors.js deleted file mode 100644 index 691436c49e..0000000000 --- a/src/algorithms/math/prime-factors/primeFactors.js +++ /dev/null @@ -1,42 +0,0 @@ -/** - * Finds prime factors of a number. - * - * @param {number} n - the number that is going to be split into prime factors. - * @returns {number[]} - array of prime factors. - */ -export function primeFactors(n) { - // Clone n to avoid function arguments override. - let nn = n; - - // Array that stores the all the prime factors. - const factors = []; - - // Running the loop till sqrt(n) instead of n to optimise time complexity from O(n) to O(sqrt(n)). - for (let factor = 2; factor <= Math.sqrt(nn); factor += 1) { - // Check that factor divides n without a reminder. - while (nn % factor === 0) { - // Overriding the value of n. - nn /= factor; - // Saving the factor. - factors.push(factor); - } - } - - // The ultimate reminder should be a last prime factor, - // unless it is not 1 (since 1 is not a prime number). - if (nn !== 1) { - factors.push(nn); - } - - return factors; -} - -/** - * Hardy-Ramanujan approximation of prime factors count. - * - * @param {number} n - * @returns {number} - approximate number of prime factors. - */ -export function hardyRamanujan(n) { - return Math.log(Math.log(n)); -} diff --git a/src/algorithms/math/radian/README.md b/src/algorithms/math/radian/README.md deleted file mode 100644 index 2de4655e7d..0000000000 --- a/src/algorithms/math/radian/README.md +++ /dev/null @@ -1,36 +0,0 @@ -# Radian - -The **radian** (symbol **rad**) is the unit for measuring angles, and is the -standard unit of angular measure used in many areas of mathematics. - -The length of an arc of a unit circle is numerically equal to the measurement -in radians of the angle that it subtends; one radian is just under `57.3` degrees. - -An arc of a circle with the same length as the radius of that circle subtends an -angle of `1 radian`. The circumference subtends an angle of `2π radians`. - -![Radian](https://upload.wikimedia.org/wikipedia/commons/4/4e/Circle_radians.gif) - -A complete revolution is 2π radians (shown here with a circle of radius one and -thus circumference `2π`). - -![2 pi Radian](https://upload.wikimedia.org/wikipedia/commons/6/67/2pi-unrolled.gif) - -**Conversions** - -| Radians | Degrees | -| :-----: | :-----: | -| 0 | 0° | -| π/12 | 15° | -| π/6 | 30° | -| π/4 | 45° | -| 1 | 57.3° | -| π/3 | 60° | -| π/2 | 90° | -| π | 180° | -| 2π | 360° | - - -## References - -- [Wikipedia](https://en.wikipedia.org/wiki/Radian) diff --git a/src/algorithms/math/radian/__test__/degreeToRadian.test.js b/src/algorithms/math/radian/__test__/degreeToRadian.test.js deleted file mode 100644 index dbf775168f..0000000000 --- a/src/algorithms/math/radian/__test__/degreeToRadian.test.js +++ /dev/null @@ -1,12 +0,0 @@ -import degreeToRadian from '../degreeToRadian'; - -describe('degreeToRadian', () => { - it('should convert degree to radian', () => { - expect(degreeToRadian(0)).toBe(0); - expect(degreeToRadian(45)).toBe(Math.PI / 4); - expect(degreeToRadian(90)).toBe(Math.PI / 2); - expect(degreeToRadian(180)).toBe(Math.PI); - expect(degreeToRadian(270)).toBe((3 * Math.PI) / 2); - expect(degreeToRadian(360)).toBe(2 * Math.PI); - }); -}); diff --git a/src/algorithms/math/radian/__test__/radianToDegree.test.js b/src/algorithms/math/radian/__test__/radianToDegree.test.js deleted file mode 100644 index 92f8b906d3..0000000000 --- a/src/algorithms/math/radian/__test__/radianToDegree.test.js +++ /dev/null @@ -1,12 +0,0 @@ -import radianToDegree from '../radianToDegree'; - -describe('radianToDegree', () => { - it('should convert radian to degree', () => { - expect(radianToDegree(0)).toBe(0); - expect(radianToDegree(Math.PI / 4)).toBe(45); - expect(radianToDegree(Math.PI / 2)).toBe(90); - expect(radianToDegree(Math.PI)).toBe(180); - expect(radianToDegree((3 * Math.PI) / 2)).toBe(270); - expect(radianToDegree(2 * Math.PI)).toBe(360); - }); -}); diff --git a/src/algorithms/math/radian/degreeToRadian.js b/src/algorithms/math/radian/degreeToRadian.js deleted file mode 100644 index fb3836cd41..0000000000 --- a/src/algorithms/math/radian/degreeToRadian.js +++ /dev/null @@ -1,7 +0,0 @@ -/** - * @param {number} degree - * @return {number} - */ -export default function degreeToRadian(degree) { - return degree * (Math.PI / 180); -} diff --git a/src/algorithms/math/radian/radianToDegree.js b/src/algorithms/math/radian/radianToDegree.js deleted file mode 100644 index e733f4152a..0000000000 --- a/src/algorithms/math/radian/radianToDegree.js +++ /dev/null @@ -1,7 +0,0 @@ -/** - * @param {number} radian - * @return {number} - */ -export default function radianToDegree(radian) { - return radian * (180 / Math.PI); -} diff --git a/src/algorithms/math/sieve-of-eratosthenes/README.md b/src/algorithms/math/sieve-of-eratosthenes/README.md deleted file mode 100644 index 876379a006..0000000000 --- a/src/algorithms/math/sieve-of-eratosthenes/README.md +++ /dev/null @@ -1,32 +0,0 @@ -# Sieve of Eratosthenes - -The Sieve of Eratosthenes is an algorithm for finding all prime numbers up to some limit `n`. - -It is attributed to Eratosthenes of Cyrene, an ancient Greek mathematician. - -## How it works - -1. Create a boolean array of `n + 1` positions (to represent the numbers `0` through `n`) -2. Set positions `0` and `1` to `false`, and the rest to `true` -3. Start at position `p = 2` (the first prime number) -4. Mark as `false` all the multiples of `p` (that is, positions `2 * p`, `3 * p`, `4 * p`... until you reach the end of the array) -5. Find the first position greater than `p` that is `true` in the array. If there is no such position, stop. Otherwise, let `p` equal this new number (which is the next prime), and repeat from step 4 - -When the algorithm terminates, the numbers remaining `true` in the array are all -the primes below `n`. - -An improvement of this algorithm is, in step 4, start marking multiples -of `p` from `p * p`, and not from `2 * p`. The reason why this works is because, -at that point, smaller multiples of `p` will have already been marked `false`. - -## Example - -![Sieve](https://upload.wikimedia.org/wikipedia/commons/b/b9/Sieve_of_Eratosthenes_animation.gif) - -## Complexity - -The algorithm has a complexity of `O(n log(log n))`. - -## References - -- [Wikipedia](https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes) diff --git a/src/algorithms/math/sieve-of-eratosthenes/__test__/sieveOfEratosthenes.test.js b/src/algorithms/math/sieve-of-eratosthenes/__test__/sieveOfEratosthenes.test.js deleted file mode 100644 index f2bce60d63..0000000000 --- a/src/algorithms/math/sieve-of-eratosthenes/__test__/sieveOfEratosthenes.test.js +++ /dev/null @@ -1,12 +0,0 @@ -import sieveOfEratosthenes from '../sieveOfEratosthenes'; - -describe('sieveOfEratosthenes', () => { - it('should find all primes less than or equal to n', () => { - expect(sieveOfEratosthenes(5)).toEqual([2, 3, 5]); - expect(sieveOfEratosthenes(10)).toEqual([2, 3, 5, 7]); - expect(sieveOfEratosthenes(100)).toEqual([ - 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, - 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, - ]); - }); -}); diff --git a/src/algorithms/math/sieve-of-eratosthenes/sieveOfEratosthenes.js b/src/algorithms/math/sieve-of-eratosthenes/sieveOfEratosthenes.js deleted file mode 100644 index 6b96583be6..0000000000 --- a/src/algorithms/math/sieve-of-eratosthenes/sieveOfEratosthenes.js +++ /dev/null @@ -1,36 +0,0 @@ -/** - * @param {number} maxNumber - * @return {number[]} - */ -export default function sieveOfEratosthenes(maxNumber) { - const isPrime = new Array(maxNumber + 1).fill(true); - isPrime[0] = false; - isPrime[1] = false; - - const primes = []; - - for (let number = 2; number <= maxNumber; number += 1) { - if (isPrime[number] === true) { - primes.push(number); - - /* - * Optimisation. - * Start marking multiples of `p` from `p * p`, and not from `2 * p`. - * The reason why this works is because, at that point, smaller multiples - * of `p` will have already been marked `false`. - * - * Warning: When working with really big numbers, the following line may cause overflow - * In that case, it can be changed to: - * let nextNumber = 2 * number; - */ - let nextNumber = number * number; - - while (nextNumber <= maxNumber) { - isPrime[nextNumber] = false; - nextNumber += number; - } - } - } - - return primes; -} diff --git a/src/algorithms/math/square-root/README.md b/src/algorithms/math/square-root/README.md deleted file mode 100644 index 7f9713b5f6..0000000000 --- a/src/algorithms/math/square-root/README.md +++ /dev/null @@ -1,62 +0,0 @@ -# Square Root (Newton's Method) - -In numerical analysis, a branch of mathematics, there are several square root -algorithms or methods of computing the principal square root of a non-negative real -number. As, generally, the roots of a function cannot be computed exactly. -The root-finding algorithms provide approximations to roots expressed as floating -point numbers. - -Finding ![](https://wikimedia.org/api/rest_v1/media/math/render/svg/bff86975b0e7944720b3e635c53c22c032a7a6f1) is -the same as solving the equation ![](https://wikimedia.org/api/rest_v1/media/math/render/svg/6cf57722151ef19ba1ca918d702b95c335e21cad) for a -positive `x`. Therefore, any general numerical root-finding algorithm can be used. - -**Newton's method** (also known as the Newton–Raphson method), named after -_Isaac Newton_ and _Joseph Raphson_, is one example of a root-finding algorithm. It is a -method for finding successively better approximations to the roots of a real-valued function. - -Let's start by explaining the general idea of Newton's method and then apply it to our particular -case with finding a square root of the number. - -## Newton's Method General Idea - -The Newton–Raphson method in one variable is implemented as follows: - -The method starts with a function `f` defined over the real numbers `x`, the function's derivative `f'`, and an -initial guess `x0` for a root of the function `f`. If the function satisfies the assumptions made in the derivation -of the formula and the initial guess is close, then a better approximation `x1` is: - -![](https://wikimedia.org/api/rest_v1/media/math/render/svg/52c50eca0b7c4d64ef2fdca678665b73e944cb84) - -Geometrically, `(x1, 0)` is the intersection of the `x`-axis and the tangent of -the graph of `f` at `(x0, f (x0))`. - -The process is repeated as: - -![](https://wikimedia.org/api/rest_v1/media/math/render/svg/710c11b9ec4568d1cfff49b7c7d41e0a7829a736) - -until a sufficiently accurate value is reached. - -![](https://upload.wikimedia.org/wikipedia/commons/e/e0/NewtonIteration_Ani.gif) - -## Newton's Method of Finding a Square Root - -As it was mentioned above, finding ![](https://wikimedia.org/api/rest_v1/media/math/render/svg/bff86975b0e7944720b3e635c53c22c032a7a6f1) is -the same as solving the equation ![](https://wikimedia.org/api/rest_v1/media/math/render/svg/6cf57722151ef19ba1ca918d702b95c335e21cad) for a -positive `x`. - -The derivative of the function `f(x)` in case of square root problem is `2x`. - -After applying the Newton's formula (see above) we get the following equation for our algorithm iterations: - -```text -x := x - (x² - S) / (2x) -``` - -The `x² − S` above is how far away `x²` is from where it needs to be, and the -division by `2x` is the derivative of `x²`, to scale how much we adjust `x` by how -quickly `x²` is changing. - -## References - -- [Methods of computing square roots on Wikipedia](https://en.wikipedia.org/wiki/Methods_of_computing_square_roots) -- [Newton's method on Wikipedia](https://en.wikipedia.org/wiki/Newton%27s_method) diff --git a/src/algorithms/math/square-root/__test__/squareRoot.test.js b/src/algorithms/math/square-root/__test__/squareRoot.test.js deleted file mode 100644 index 9679d1a1c5..0000000000 --- a/src/algorithms/math/square-root/__test__/squareRoot.test.js +++ /dev/null @@ -1,69 +0,0 @@ -import squareRoot from '../squareRoot'; - -describe('squareRoot', () => { - it('should throw for negative numbers', () => { - function failingSquareRoot() { - squareRoot(-5); - } - expect(failingSquareRoot).toThrow(); - }); - - it('should correctly calculate square root with default tolerance', () => { - expect(squareRoot(0)).toBe(0); - expect(squareRoot(1)).toBe(1); - expect(squareRoot(2)).toBe(1); - expect(squareRoot(3)).toBe(2); - expect(squareRoot(4)).toBe(2); - expect(squareRoot(15)).toBe(4); - expect(squareRoot(16)).toBe(4); - expect(squareRoot(256)).toBe(16); - expect(squareRoot(473)).toBe(22); - expect(squareRoot(14723)).toBe(121); - }); - - it('should correctly calculate square root for integers with custom tolerance', () => { - let tolerance = 1; - - expect(squareRoot(0, tolerance)).toBe(0); - expect(squareRoot(1, tolerance)).toBe(1); - expect(squareRoot(2, tolerance)).toBe(1.4); - expect(squareRoot(3, tolerance)).toBe(1.8); - expect(squareRoot(4, tolerance)).toBe(2); - expect(squareRoot(15, tolerance)).toBe(3.9); - expect(squareRoot(16, tolerance)).toBe(4); - expect(squareRoot(256, tolerance)).toBe(16); - expect(squareRoot(473, tolerance)).toBe(21.7); - expect(squareRoot(14723, tolerance)).toBe(121.3); - - tolerance = 3; - - expect(squareRoot(0, tolerance)).toBe(0); - expect(squareRoot(1, tolerance)).toBe(1); - expect(squareRoot(2, tolerance)).toBe(1.414); - expect(squareRoot(3, tolerance)).toBe(1.732); - expect(squareRoot(4, tolerance)).toBe(2); - expect(squareRoot(15, tolerance)).toBe(3.873); - expect(squareRoot(16, tolerance)).toBe(4); - expect(squareRoot(256, tolerance)).toBe(16); - expect(squareRoot(473, tolerance)).toBe(21.749); - expect(squareRoot(14723, tolerance)).toBe(121.338); - - tolerance = 10; - - expect(squareRoot(0, tolerance)).toBe(0); - expect(squareRoot(1, tolerance)).toBe(1); - expect(squareRoot(2, tolerance)).toBe(1.4142135624); - expect(squareRoot(3, tolerance)).toBe(1.7320508076); - expect(squareRoot(4, tolerance)).toBe(2); - expect(squareRoot(15, tolerance)).toBe(3.8729833462); - expect(squareRoot(16, tolerance)).toBe(4); - expect(squareRoot(256, tolerance)).toBe(16); - expect(squareRoot(473, tolerance)).toBe(21.7485631709); - expect(squareRoot(14723, tolerance)).toBe(121.3383698588); - }); - - it('should correctly calculate square root for integers with custom tolerance', () => { - expect(squareRoot(4.5, 10)).toBe(2.1213203436); - expect(squareRoot(217.534, 10)).toBe(14.7490338667); - }); -}); diff --git a/src/algorithms/math/square-root/squareRoot.js b/src/algorithms/math/square-root/squareRoot.js deleted file mode 100644 index 19779bf34c..0000000000 --- a/src/algorithms/math/square-root/squareRoot.js +++ /dev/null @@ -1,40 +0,0 @@ -/** - * Calculates the square root of the number with given tolerance (precision) - * by using Newton's method. - * - * @param number - the number we want to find a square root for. - * @param [tolerance] - how many precise numbers after the floating point we want to get. - * @return {number} - */ -export default function squareRoot(number, tolerance = 0) { - // For now we won't support operations that involves manipulation with complex numbers. - if (number < 0) { - throw new Error('The method supports only positive integers'); - } - - // Handle edge case with finding the square root of zero. - if (number === 0) { - return 0; - } - - // We will start approximation from value 1. - let root = 1; - - // Delta is a desired distance between the number and the square of the root. - // - if tolerance=0 then delta=1 - // - if tolerance=1 then delta=0.1 - // - if tolerance=2 then delta=0.01 - // - and so on... - const requiredDelta = 1 / (10 ** tolerance); - - // Approximating the root value to the point when we get a desired precision. - while (Math.abs(number - (root ** 2)) > requiredDelta) { - // Newton's method reduces in this case to the so-called Babylonian method. - // These methods generally yield approximate results, but can be made arbitrarily - // precise by increasing the number of calculation steps. - root -= ((root ** 2) - number) / (2 * root); - } - - // Cut off undesired floating digits and return the root value. - return Math.round(root * (10 ** tolerance)) / (10 ** tolerance); -} diff --git a/src/algorithms/ml/k-means/README.md b/src/algorithms/ml/k-means/README.md deleted file mode 100644 index fb58c1bfa4..0000000000 --- a/src/algorithms/ml/k-means/README.md +++ /dev/null @@ -1,40 +0,0 @@ -# k-Means Algorithm - -_Read this in other languages:_ -[_Português_](README.pt-BR.md) - -The **k-Means algorithm** is an unsupervised Machine Learning algorithm. It's a clustering algorithm, which groups the sample data on the basis of similarity between dimensions of vectors. - -In k-Means classification, the output is a set of classes assigned to each vector. Each cluster location is continuously optimized in order to get the accurate locations of each cluster such that they represent each group clearly. - -The idea is to calculate the similarity between cluster location and data vectors, and reassign clusters based on it. [Euclidean distance](https://github.com/trekhleb/javascript-algorithms/tree/master/src/algorithms/math/euclidean-distance) is used mostly for this task. - -![Euclidean distance between two points](https://upload.wikimedia.org/wikipedia/commons/5/55/Euclidean_distance_2d.svg) - -_Image source: [Wikipedia](https://en.wikipedia.org/wiki/Euclidean_distance)_ - -The algorithm is as follows: - -1. Check for errors like invalid/inconsistent data -2. Initialize the `k` cluster locations with initial/random `k` points -3. Calculate the distance of each data point from each cluster -4. Assign the cluster label of each data point equal to that of the cluster at its minimum distance -5. Calculate the centroid of each cluster based on the data points it contains -6. Repeat each of the above steps until the centroid locations are varying - -Here is a visualization of k-Means clustering for better understanding: - -![KNN Visualization 1](https://upload.wikimedia.org/wikipedia/commons/e/ea/K-means_convergence.gif) - -_Image source: [Wikipedia](https://en.wikipedia.org/wiki/K-means_clustering)_ - -The centroids are moving continuously in order to create better distinction between the different set of data points. As we can see, after a few iterations, the difference in centroids is quite low between iterations. For example between iterations `13` and `14` the difference is quite small because there the optimizer is tuning boundary cases. - -## Code Examples - -- [kMeans.js](./kMeans.js) -- [kMeans.test.js](./__test__/kMeans.test.js) (test cases) - -## References - -- [k-Means neighbors algorithm on Wikipedia](https://en.wikipedia.org/wiki/K-means_clustering) diff --git a/src/algorithms/ml/k-means/README.pt-BR.md b/src/algorithms/ml/k-means/README.pt-BR.md deleted file mode 100644 index d814ac19bc..0000000000 --- a/src/algorithms/ml/k-means/README.pt-BR.md +++ /dev/null @@ -1,35 +0,0 @@ -# Algoritmo k-Means - -_Leia isso em outros idiomas:_ -[_English_](README.md) - -O **algoritmo k-Means** é um algoritmo de aprendizado de máquina não supervisionado. É um algoritmo de agrupamento, que agrupa os dados da amostra com base na semelhança entre as dimensões dos vetores. - -Na classificação k-Means, a saída é um conjunto de classes atribuídas a cada vetor. Cada localização de cluster é continuamente otimizada para obter as localizações precisas de cada cluster de forma que representem cada grupo claramente. - -A ideia é calcular a similaridade entre a localização do cluster e os vetores de dados e reatribuir os clusters com base nela. [Distância Euclidiana](https://github.com/trekhleb/javascript-algorithms/tree/master/src/algorithms/math/euclidean-distance) é usado principalmente para esta tarefa. - -![Distância Euclidiana entre dois pontos](https://upload.wikimedia.org/wikipedia/commons/5/55/Euclidean_distance_2d.svg) - -_Fonte: [Wikipedia](https://en.wikipedia.org/wiki/Euclidean_distance)_ - -O algoritmo é o seguinte: - -1. Verifique se há erros como dados inválidos/inconsistentes -2. Inicialize os locais do cluster `k` com pontos `k` iniciais/aleatórios -3. Calcule a distância de cada ponto de dados de cada cluster -4. Atribua o rótulo do cluster de cada ponto de dados igual ao do cluster em sua distância mínima -5. Calcule o centroide de cada cluster com base nos pontos de dados que ele contém -6. Repita cada uma das etapas acima até que as localizações do centroide estejam variando - -Aqui está uma visualização do agrupamento k-Means para melhor compreensão: - -![KNN Visualization 1](https://upload.wikimedia.org/wikipedia/commons/e/ea/K-means_convergence.gif) - -_Fonte: [Wikipedia](https://en.wikipedia.org/wiki/K-means_clustering)_ - -Os centroides estão se movendo continuamente para criar uma melhor distinção entre os diferentes conjuntos de pontos de dados. Como podemos ver, após algumas iterações, a diferença de centroides é bastante baixa entre as iterações. Por exemplo, entre as iterações `13` e `14` a diferença é bem pequena porque o otimizador está ajustando os casos limite. - -## Referências - -- [k-Means neighbors algorithm on Wikipedia](https://en.wikipedia.org/wiki/K-means_clustering) diff --git a/src/algorithms/ml/k-means/__test__/kMeans.test.js b/src/algorithms/ml/k-means/__test__/kMeans.test.js deleted file mode 100644 index 44a6f538e2..0000000000 --- a/src/algorithms/ml/k-means/__test__/kMeans.test.js +++ /dev/null @@ -1,40 +0,0 @@ -import KMeans from '../kMeans'; - -describe('kMeans', () => { - it('should throw an error on invalid data', () => { - expect(() => { - KMeans(); - }).toThrowError('The data is empty'); - }); - - it('should throw an error on inconsistent data', () => { - expect(() => { - KMeans([[1, 2], [1]], 2); - }).toThrowError('Matrices have different shapes'); - }); - - it('should find the nearest neighbour', () => { - const data = [[1, 1], [6, 2], [3, 3], [4, 5], [9, 2], [2, 4], [8, 7]]; - const k = 2; - const expectedClusters = [0, 1, 0, 1, 1, 0, 1]; - expect(KMeans(data, k)).toEqual(expectedClusters); - - expect(KMeans([[0, 0], [0, 1], [10, 10]], 2)).toEqual( - [0, 0, 1], - ); - }); - - it('should find the clusters with equal distances', () => { - const dataSet = [[0, 0], [1, 1], [2, 2]]; - const k = 3; - const expectedCluster = [0, 1, 2]; - expect(KMeans(dataSet, k)).toEqual(expectedCluster); - }); - - it('should find the nearest neighbour in 3D space', () => { - const dataSet = [[0, 0, 0], [0, 1, 0], [2, 0, 2]]; - const k = 2; - const expectedCluster = [1, 1, 0]; - expect(KMeans(dataSet, k)).toEqual(expectedCluster); - }); -}); diff --git a/src/algorithms/ml/k-means/kMeans.js b/src/algorithms/ml/k-means/kMeans.js deleted file mode 100644 index 4361eed689..0000000000 --- a/src/algorithms/ml/k-means/kMeans.js +++ /dev/null @@ -1,85 +0,0 @@ -import * as mtrx from '../../math/matrix/Matrix'; -import euclideanDistance from '../../math/euclidean-distance/euclideanDistance'; - -/** - * Classifies the point in space based on k-Means algorithm. - * - * @param {number[][]} data - array of dataSet points, i.e. [[0, 1], [3, 4], [5, 7]] - * @param {number} k - number of clusters - * @return {number[]} - the class of the point - */ -export default function KMeans( - data, - k = 1, -) { - if (!data) { - throw new Error('The data is empty'); - } - - // Assign k clusters locations equal to the location of initial k points. - const dataDim = data[0].length; - const clusterCenters = data.slice(0, k); - - // Continue optimization till convergence. - // Centroids should not be moving once optimized. - // Calculate distance of each candidate vector from each cluster center. - // Assign cluster number to each data vector according to minimum distance. - - // Matrix of distance from each data point to each cluster centroid. - const distances = mtrx.zeros([data.length, k]); - - // Vector data points' classes. The value of -1 means that no class has bee assigned yet. - const classes = Array(data.length).fill(-1); - - let iterate = true; - while (iterate) { - iterate = false; - - // Calculate and store the distance of each data point from each cluster. - for (let dataIndex = 0; dataIndex < data.length; dataIndex += 1) { - for (let clusterIndex = 0; clusterIndex < k; clusterIndex += 1) { - distances[dataIndex][clusterIndex] = euclideanDistance( - [clusterCenters[clusterIndex]], - [data[dataIndex]], - ); - } - // Assign the closest cluster number to each dataSet point. - const closestClusterIdx = distances[dataIndex].indexOf( - Math.min(...distances[dataIndex]), - ); - - // Check if data point class has been changed and we still need to re-iterate. - if (classes[dataIndex] !== closestClusterIdx) { - iterate = true; - } - - classes[dataIndex] = closestClusterIdx; - } - - // Recalculate cluster centroid values via all dimensions of the points under it. - for (let clusterIndex = 0; clusterIndex < k; clusterIndex += 1) { - // Reset cluster center coordinates since we need to recalculate them. - clusterCenters[clusterIndex] = Array(dataDim).fill(0); - let clusterSize = 0; - for (let dataIndex = 0; dataIndex < data.length; dataIndex += 1) { - if (classes[dataIndex] === clusterIndex) { - // Register one more data point of current cluster. - clusterSize += 1; - for (let dimensionIndex = 0; dimensionIndex < dataDim; dimensionIndex += 1) { - // Add data point coordinates to the cluster center coordinates. - clusterCenters[clusterIndex][dimensionIndex] += data[dataIndex][dimensionIndex]; - } - } - } - // Calculate the average for each cluster center coordinate. - for (let dimensionIndex = 0; dimensionIndex < dataDim; dimensionIndex += 1) { - clusterCenters[clusterIndex][dimensionIndex] = parseFloat(Number( - clusterCenters[clusterIndex][dimensionIndex] / clusterSize, - ).toFixed(2)); - } - } - } - - // Return the clusters assigned. - return classes; -} diff --git a/src/algorithms/ml/knn/README.md b/src/algorithms/ml/knn/README.md deleted file mode 100644 index 1fc168eaf2..0000000000 --- a/src/algorithms/ml/knn/README.md +++ /dev/null @@ -1,44 +0,0 @@ -# k-Nearest Neighbors Algorithm - -_Read this in other languages:_ -[_Português_](README.pt-BR.md) - -The **k-nearest neighbors algorithm (k-NN)** is a supervised Machine Learning algorithm. It's a classification algorithm, determining the class of a sample vector using a sample data. - -In k-NN classification, the output is a class membership. An object is classified by a plurality vote of its neighbors, with the object being assigned to the class most common among its `k` nearest neighbors (`k` is a positive integer, typically small). If `k = 1`, then the object is simply assigned to the class of that single nearest neighbor. - -The idea is to calculate the similarity between two data points on the basis of a distance metric. [Euclidean distance](https://en.wikipedia.org/wiki/Euclidean_distance) is used mostly for this task. - -![Euclidean distance between two points](https://upload.wikimedia.org/wikipedia/commons/5/55/Euclidean_distance_2d.svg) - -_Image source: [Wikipedia](https://en.wikipedia.org/wiki/Euclidean_distance)_ - -The algorithm is as follows: - -1. Check for errors like invalid data/labels. -2. Calculate the euclidean distance of all the data points in training data with the classification point -3. Sort the distances of points along with their classes in ascending order -4. Take the initial `K` classes and find the mode to get the most similar class -5. Report the most similar class - -Here is a visualization of k-NN classification for better understanding: - -![KNN Visualization 1](https://upload.wikimedia.org/wikipedia/commons/e/e7/KnnClassification.svg) - -_Image source: [Wikipedia](https://en.wikipedia.org/wiki/K-nearest_neighbors_algorithm)_ - -The test sample (green dot) should be classified either to blue squares or to red triangles. If `k = 3` (solid line circle) it is assigned to the red triangles because there are `2` triangles and only `1` square inside the inner circle. If `k = 5` (dashed line circle) it is assigned to the blue squares (`3` squares vs. `2` triangles inside the outer circle). - -Another k-NN classification example: - -![KNN Visualization 2](https://media.geeksforgeeks.org/wp-content/uploads/graph2-2.png) - -_Image source: [GeeksForGeeks](https://media.geeksforgeeks.org/wp-content/uploads/graph2-2.png)_ - -Here, as we can see, the classification of unknown points will be judged by their proximity to other points. - -It is important to note that `K` is preferred to have odd values in order to break ties. Usually `K` is taken as `3` or `5`. - -## References - -- [k-nearest neighbors algorithm on Wikipedia](https://en.wikipedia.org/wiki/K-nearest_neighbors_algorithm) diff --git a/src/algorithms/ml/knn/README.pt-BR.md b/src/algorithms/ml/knn/README.pt-BR.md deleted file mode 100644 index b2abdd784f..0000000000 --- a/src/algorithms/ml/knn/README.pt-BR.md +++ /dev/null @@ -1,44 +0,0 @@ -# Algoritmo de k-vizinhos mais próximos - -_Leia isso em outros idiomas:_ -[_English_](README.md) - -O **algoritmo de k-vizinhos mais próximos (k-NN)** é um algoritmo de aprendizado de máquina supervisionado. É um algoritmo de classificação, determinando a classe de um vetor de amostra usando dados de amostra. - -Na classificação k-NN, a saída é uma associação de classe. Um objeto é classificado por uma pluralidade de votos de seus vizinhos, com o objeto sendo atribuído à classe mais comum entre seus `k` vizinhos mais próximos (`k` é um inteiro positivo, tipicamente pequeno). Se `k = 1`, então o objeto é simplesmente atribuído à classe daquele único vizinho mais próximo. - -The idea is to calculate the similarity between two data points on the basis of a distance metric. [Distância Euclidiana](https://github.com/trekhleb/javascript-algorithms/tree/master/src/algorithms/math/euclidean-distance) é usado principalmente para esta tarefa. - -![Distância Euclidiana entre dois pontos](https://upload.wikimedia.org/wikipedia/commons/5/55/Euclidean_distance_2d.svg) - -_Fonte: [Wikipedia](https://en.wikipedia.org/wiki/Euclidean_distance)_ - -O algoritmo é o seguinte: - -1. Verifique se há erros como dados/rótulos inválidos. -2. Calcule a distância euclidiana de todos os pontos de dados nos dados de treinamento com o ponto de classificação -3. Classifique as distâncias dos pontos junto com suas classes em ordem crescente -4. Pegue as classes iniciais `K` e encontre o modo para obter a classe mais semelhante -5. Informe a classe mais semelhante - -Aqui está uma visualização da classificação k-NN para melhor compreensão: - -![KNN Visualization 1](https://upload.wikimedia.org/wikipedia/commons/e/e7/KnnClassification.svg) - -_Fonte: [Wikipedia](https://en.wikipedia.org/wiki/K-nearest_neighbors_algorithm)_ - -A amostra de teste (ponto verde) deve ser classificada em quadrados azuis ou em triângulos vermelhos. Se `k = 3` (círculo de linha sólida) é atribuído aos triângulos vermelhos porque existem `2` triângulos e apenas `1` quadrado dentro do círculo interno. Se `k = 5` (círculo de linha tracejada) é atribuído aos quadrados azuis (`3` quadrados vs. `2` triângulos dentro do círculo externo). - -Outro exemplo de classificação k-NN: - -![KNN Visualization 2](https://media.geeksforgeeks.org/wp-content/uploads/graph2-2.png) - -_Fonte: [GeeksForGeeks](https://media.geeksforgeeks.org/wp-content/uploads/graph2-2.png)_ - -Aqui, como podemos ver, a classificação dos pontos desconhecidos será julgada pela proximidade com outros pontos. - -É importante notar que `K` é preferível ter valores ímpares para desempate. Normalmente `K` é tomado como `3` ou `5`. - -## Referências - -- [k-nearest neighbors algorithm on Wikipedia](https://en.wikipedia.org/wiki/K-nearest_neighbors_algorithm) diff --git a/src/algorithms/ml/knn/__test__/knn.test.js b/src/algorithms/ml/knn/__test__/knn.test.js deleted file mode 100644 index 302bf3b7a9..0000000000 --- a/src/algorithms/ml/knn/__test__/knn.test.js +++ /dev/null @@ -1,71 +0,0 @@ -import kNN from '../kNN'; - -describe('kNN', () => { - it('should throw an error on invalid data', () => { - expect(() => { - kNN(); - }).toThrowError('Either dataSet or labels or toClassify were not set'); - }); - - it('should throw an error on invalid labels', () => { - const noLabels = () => { - kNN([[1, 1]]); - }; - expect(noLabels).toThrowError('Either dataSet or labels or toClassify were not set'); - }); - - it('should throw an error on not giving classification vector', () => { - const noClassification = () => { - kNN([[1, 1]], [1]); - }; - expect(noClassification).toThrowError('Either dataSet or labels or toClassify were not set'); - }); - - it('should throw an error on not giving classification vector', () => { - const inconsistent = () => { - kNN([[1, 1]], [1], [1]); - }; - expect(inconsistent).toThrowError('Matrices have different shapes'); - }); - - it('should find the nearest neighbour', () => { - let dataSet; - let labels; - let toClassify; - let expectedClass; - - dataSet = [[1, 1], [2, 2]]; - labels = [1, 2]; - toClassify = [1, 1]; - expectedClass = 1; - expect(kNN(dataSet, labels, toClassify)).toBe(expectedClass); - - dataSet = [[1, 1], [6, 2], [3, 3], [4, 5], [9, 2], [2, 4], [8, 7]]; - labels = [1, 2, 1, 2, 1, 2, 1]; - toClassify = [1.25, 1.25]; - expectedClass = 1; - expect(kNN(dataSet, labels, toClassify)).toBe(expectedClass); - - dataSet = [[1, 1], [6, 2], [3, 3], [4, 5], [9, 2], [2, 4], [8, 7]]; - labels = [1, 2, 1, 2, 1, 2, 1]; - toClassify = [1.25, 1.25]; - expectedClass = 2; - expect(kNN(dataSet, labels, toClassify, 5)).toBe(expectedClass); - }); - - it('should find the nearest neighbour with equal distances', () => { - const dataSet = [[0, 0], [1, 1], [0, 2]]; - const labels = [1, 3, 3]; - const toClassify = [0, 1]; - const expectedClass = 3; - expect(kNN(dataSet, labels, toClassify)).toBe(expectedClass); - }); - - it('should find the nearest neighbour in 3D space', () => { - const dataSet = [[0, 0, 0], [0, 1, 1], [0, 0, 2]]; - const labels = [1, 3, 3]; - const toClassify = [0, 0, 1]; - const expectedClass = 3; - expect(kNN(dataSet, labels, toClassify)).toBe(expectedClass); - }); -}); diff --git a/src/algorithms/ml/knn/kNN.js b/src/algorithms/ml/knn/kNN.js deleted file mode 100644 index 350e7ce176..0000000000 --- a/src/algorithms/ml/knn/kNN.js +++ /dev/null @@ -1,60 +0,0 @@ -/** - * Classifies the point in space based on k-nearest neighbors algorithm. - * - * @param {number[][]} dataSet - array of data points, i.e. [[0, 1], [3, 4], [5, 7]] - * @param {number[]} labels - array of classes (labels), i.e. [1, 1, 2] - * @param {number[]} toClassify - the point in space that needs to be classified, i.e. [5, 4] - * @param {number} k - number of nearest neighbors which will be taken into account (preferably odd) - * @return {number} - the class of the point - */ - -import euclideanDistance from '../../math/euclidean-distance/euclideanDistance'; - -export default function kNN( - dataSet, - labels, - toClassify, - k = 3, -) { - if (!dataSet || !labels || !toClassify) { - throw new Error('Either dataSet or labels or toClassify were not set'); - } - - // Calculate distance from toClassify to each point for all dimensions in dataSet. - // Store distance and point's label into distances list. - const distances = []; - for (let i = 0; i < dataSet.length; i += 1) { - distances.push({ - dist: euclideanDistance([dataSet[i]], [toClassify]), - label: labels[i], - }); - } - - // Sort distances list (from closer point to further ones). - // Take initial k values, count with class index - const kNearest = distances.sort((a, b) => { - if (a.dist === b.dist) { - return 0; - } - return a.dist < b.dist ? -1 : 1; - }).slice(0, k); - - // Count the number of instances of each class in top k members. - const labelsCounter = {}; - let topClass = 0; - let topClassCount = 0; - for (let i = 0; i < kNearest.length; i += 1) { - if (kNearest[i].label in labelsCounter) { - labelsCounter[kNearest[i].label] += 1; - } else { - labelsCounter[kNearest[i].label] = 1; - } - if (labelsCounter[kNearest[i].label] > topClassCount) { - topClassCount = labelsCounter[kNearest[i].label]; - topClass = kNearest[i].label; - } - } - - // Return the class with highest count. - return topClass; -} diff --git a/src/algorithms/search/binary-search/README.es-ES.md b/src/algorithms/search/binary-search/README.es-ES.md deleted file mode 100644 index f14aef985f..0000000000 --- a/src/algorithms/search/binary-search/README.es-ES.md +++ /dev/null @@ -1,27 +0,0 @@ -# Búsqueda binaria - -_Lea esto en otros idiomas:_ -[English](README.md) -[Português brasileiro](README.pt-BR.md). - -En informática, la búsqueda binaria, también conocida como búsqueda de medio intervalo -búsqueda, búsqueda logarítmica, o corte binario, es un algoritmo de búsqueda -que encuentra la posición de un valor objetivo dentro de una matriz -ordenada. La búsqueda binaria compara el valor objetivo con el elemento central -de la matriz; si son desiguales, se elimina la mitad en la que -la mitad en la que no puede estar el objetivo se elimina y la búsqueda continúa -en la mitad restante hasta que tenga éxito. Si la búsqueda -termina con la mitad restante vacía, el objetivo no está -en la matriz. - -![Búsqueda binaria](https://upload.wikimedia.org/wikipedia/commons/8/83/Binary_Search_Depiction.svg) - -## Complejidad - -**Complejidad de tiempo**: `O(log(n))` - ya que dividimos el área de búsqueda en dos para cada -siguiente iteración. - -## Referencias - -- [Wikipedia](https://en.wikipedia.org/wiki/Binary_search_algorithm) -- [YouTube](https://www.youtube.com/watch?v=P3YID7liBug&index=29&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) diff --git a/src/algorithms/search/binary-search/README.md b/src/algorithms/search/binary-search/README.md deleted file mode 100644 index 34d1bd7a40..0000000000 --- a/src/algorithms/search/binary-search/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# Binary Search - -_Read this in other languages:_ -[Português brasileiro](README.pt-BR.md). -[Español](README.es-ES.md). - -In computer science, binary search, also known as half-interval -search, logarithmic search, or binary chop, is a search algorithm -that finds the position of a target value within a sorted -array. Binary search compares the target value to the middle -element of the array; if they are unequal, the half in which -the target cannot lie is eliminated and the search continues -on the remaining half until it is successful. If the search -ends with the remaining half being empty, the target is not -in the array. - -![Binary Search](https://upload.wikimedia.org/wikipedia/commons/8/83/Binary_Search_Depiction.svg) - -## Complexity - -**Time Complexity**: `O(log(n))` - since we split search area by two for every -next iteration. - -## References - -- [Wikipedia](https://en.wikipedia.org/wiki/Binary_search_algorithm) -- [YouTube](https://www.youtube.com/watch?v=P3YID7liBug&index=29&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) diff --git a/src/algorithms/search/binary-search/README.pt-BR.md b/src/algorithms/search/binary-search/README.pt-BR.md deleted file mode 100644 index 4f9de9f199..0000000000 --- a/src/algorithms/search/binary-search/README.pt-BR.md +++ /dev/null @@ -1,23 +0,0 @@ -# Busca Binária - -_Leia isso em outras línguas:_ -[english](README.md). -[Español](README.es-ES.md). - -Em ciência da computação, busca binária, também conhecida como busca de meio-intervalo, busca logarítmica ou corte binário, é um algoritmo de pesquisa -que encontra a posição de um elemento alvo dentro de um -vetor ordenado. O algoritmo compara o elemento alvo com o elemento central do vetor; se eles são diferentes, a metade em que -o elemento alvo não pode estar é eliminada e a busca continua -na metade remanescente até que o elemento alvo seja encontrado. Se a busca -terminar com a metade remanescente vazia, o elemento alvo não está presente no vetor. - -![Busca Binária](https://upload.wikimedia.org/wikipedia/commons/8/83/Binary_Search_Depiction.svg) - -## Complexidade - -**Complexidade de Tempo**: `O(log(n))` - pois a área de busca é dividida por dois a cada iteração. - -## Referências - -- [Wikipedia](https://en.wikipedia.org/wiki/Binary_search_algorithm) -- [YouTube](https://www.youtube.com/watch?v=P3YID7liBug&index=29&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) diff --git a/src/algorithms/search/binary-search/__test__/binarySearch.test.js b/src/algorithms/search/binary-search/__test__/binarySearch.test.js deleted file mode 100644 index 72c2b344f5..0000000000 --- a/src/algorithms/search/binary-search/__test__/binarySearch.test.js +++ /dev/null @@ -1,34 +0,0 @@ -import binarySearch from '../binarySearch'; - -describe('binarySearch', () => { - it('should search number in sorted array', () => { - expect(binarySearch([], 1)).toBe(-1); - expect(binarySearch([1], 1)).toBe(0); - expect(binarySearch([1, 2], 1)).toBe(0); - expect(binarySearch([1, 2], 2)).toBe(1); - expect(binarySearch([1, 5, 10, 12], 1)).toBe(0); - expect(binarySearch([1, 5, 10, 12, 14, 17, 22, 100], 17)).toBe(5); - expect(binarySearch([1, 5, 10, 12, 14, 17, 22, 100], 1)).toBe(0); - expect(binarySearch([1, 5, 10, 12, 14, 17, 22, 100], 100)).toBe(7); - expect(binarySearch([1, 5, 10, 12, 14, 17, 22, 100], 0)).toBe(-1); - }); - - it('should search object in sorted array', () => { - const sortedArrayOfObjects = [ - { key: 1, value: 'value1' }, - { key: 2, value: 'value2' }, - { key: 3, value: 'value3' }, - ]; - - const comparator = (a, b) => { - if (a.key === b.key) return 0; - return a.key < b.key ? -1 : 1; - }; - - expect(binarySearch([], { key: 1 }, comparator)).toBe(-1); - expect(binarySearch(sortedArrayOfObjects, { key: 4 }, comparator)).toBe(-1); - expect(binarySearch(sortedArrayOfObjects, { key: 1 }, comparator)).toBe(0); - expect(binarySearch(sortedArrayOfObjects, { key: 2 }, comparator)).toBe(1); - expect(binarySearch(sortedArrayOfObjects, { key: 3 }, comparator)).toBe(2); - }); -}); diff --git a/src/algorithms/search/binary-search/binarySearch.js b/src/algorithms/search/binary-search/binarySearch.js deleted file mode 100644 index 5c8d48fbea..0000000000 --- a/src/algorithms/search/binary-search/binarySearch.js +++ /dev/null @@ -1,44 +0,0 @@ -import Comparator from '../../../utils/comparator/Comparator'; - -/** - * Binary search implementation. - * - * @param {*[]} sortedArray - * @param {*} seekElement - * @param {function(a, b)} [comparatorCallback] - * @return {number} - */ - -export default function binarySearch(sortedArray, seekElement, comparatorCallback) { - // Let's create comparator from the comparatorCallback function. - // Comparator object will give us common comparison methods like equal() and lessThan(). - const comparator = new Comparator(comparatorCallback); - - // These two indices will contain current array (sub-array) boundaries. - let startIndex = 0; - let endIndex = sortedArray.length - 1; - - // Let's continue to split array until boundaries are collapsed - // and there is nothing to split anymore. - while (startIndex <= endIndex) { - // Let's calculate the index of the middle element. - const middleIndex = startIndex + Math.floor((endIndex - startIndex) / 2); - - // If we've found the element just return its position. - if (comparator.equal(sortedArray[middleIndex], seekElement)) { - return middleIndex; - } - - // Decide which half to choose for seeking next: left or right one. - if (comparator.lessThan(sortedArray[middleIndex], seekElement)) { - // Go to the right half of the array. - startIndex = middleIndex + 1; - } else { - // Go to the left half of the array. - endIndex = middleIndex - 1; - } - } - - // Return -1 if we have not found anything. - return -1; -} diff --git a/src/algorithms/search/interpolation-search/README.md b/src/algorithms/search/interpolation-search/README.md deleted file mode 100644 index e91154a8ff..0000000000 --- a/src/algorithms/search/interpolation-search/README.md +++ /dev/null @@ -1,40 +0,0 @@ -# Interpolation Search - -**Interpolation search** is an algorithm for searching for a key in an array that -has been ordered by numerical values assigned to the keys (key values). - -For example we have a sorted array of `n` uniformly distributed values `arr[]`, -and we need to write a function to search for a particular element `x` in the array. - -**Linear Search** finds the element in `O(n)` time, **Jump Search** takes `O(√ n)` time -and **Binary Search** take `O(Log n)` time. - -The **Interpolation Search** is an improvement over Binary Search for instances, -where the values in a sorted array are _uniformly_ distributed. Binary Search -always goes to the middle element to check. On the other hand, interpolation -search may go to different locations according to the value of the key being -searched. For example, if the value of the key is closer to the last element, -interpolation search is likely to start search toward the end side. - -To find the position to be searched, it uses following formula: - -``` -// The idea of formula is to return higher value of pos -// when element to be searched is closer to arr[hi]. And -// smaller value when closer to arr[lo] -pos = lo + ((x - arr[lo]) * (hi - lo) / (arr[hi] - arr[Lo])) - -arr[] - Array where elements need to be searched -x - Element to be searched -lo - Starting index in arr[] -hi - Ending index in arr[] -``` - -## Complexity - -**Time complexity**: `O(log(log(n))` - -## References - -- [GeeksForGeeks](https://www.geeksforgeeks.org/interpolation-search/) -- [Wikipedia](https://en.wikipedia.org/wiki/Interpolation_search) diff --git a/src/algorithms/search/interpolation-search/__test__/interpolationSearch.test.js b/src/algorithms/search/interpolation-search/__test__/interpolationSearch.test.js deleted file mode 100644 index 7ddc548b63..0000000000 --- a/src/algorithms/search/interpolation-search/__test__/interpolationSearch.test.js +++ /dev/null @@ -1,24 +0,0 @@ -import interpolationSearch from '../interpolationSearch'; - -describe('interpolationSearch', () => { - it('should search elements in sorted array of numbers', () => { - expect(interpolationSearch([], 1)).toBe(-1); - expect(interpolationSearch([1], 1)).toBe(0); - expect(interpolationSearch([1], 0)).toBe(-1); - expect(interpolationSearch([1, 1], 1)).toBe(0); - expect(interpolationSearch([1, 2], 1)).toBe(0); - expect(interpolationSearch([1, 2], 2)).toBe(1); - expect(interpolationSearch([10, 20, 30, 40, 50], 40)).toBe(3); - expect(interpolationSearch([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], 14)).toBe(13); - expect(interpolationSearch([1, 6, 7, 8, 12, 13, 14, 19, 21, 23, 24, 24, 24, 300], 24)).toBe(10); - expect(interpolationSearch([1, 2, 3, 700, 800, 1200, 1300, 1400, 1900], 600)).toBe(-1); - expect(interpolationSearch([1, 2, 3, 700, 800, 1200, 1300, 1400, 1900], 1)).toBe(0); - expect(interpolationSearch([1, 2, 3, 700, 800, 1200, 1300, 1400, 1900], 2)).toBe(1); - expect(interpolationSearch([1, 2, 3, 700, 800, 1200, 1300, 1400, 1900], 3)).toBe(2); - expect(interpolationSearch([1, 2, 3, 700, 800, 1200, 1300, 1400, 1900], 700)).toBe(3); - expect(interpolationSearch([1, 2, 3, 700, 800, 1200, 1300, 1400, 1900], 800)).toBe(4); - expect(interpolationSearch([0, 2, 3, 700, 800, 1200, 1300, 1400, 1900], 1200)).toBe(5); - expect(interpolationSearch([1, 2, 3, 700, 800, 1200, 1300, 1400, 19000], 800)).toBe(4); - expect(interpolationSearch([0, 10, 11, 12, 13, 14, 15], 10)).toBe(1); - }); -}); diff --git a/src/algorithms/search/interpolation-search/interpolationSearch.js b/src/algorithms/search/interpolation-search/interpolationSearch.js deleted file mode 100644 index 8546c5be3b..0000000000 --- a/src/algorithms/search/interpolation-search/interpolationSearch.js +++ /dev/null @@ -1,52 +0,0 @@ -/** - * Interpolation search implementation. - * - * @param {*[]} sortedArray - sorted array with uniformly distributed values - * @param {*} seekElement - * @return {number} - */ -export default function interpolationSearch(sortedArray, seekElement) { - let leftIndex = 0; - let rightIndex = sortedArray.length - 1; - - while (leftIndex <= rightIndex) { - const rangeDelta = sortedArray[rightIndex] - sortedArray[leftIndex]; - const indexDelta = rightIndex - leftIndex; - const valueDelta = seekElement - sortedArray[leftIndex]; - - // If valueDelta is less then zero it means that there is no seek element - // exists in array since the lowest element from the range is already higher - // then seek element. - if (valueDelta < 0) { - return -1; - } - - // If range delta is zero then subarray contains all the same numbers - // and thus there is nothing to search for unless this range is all - // consists of seek number. - if (!rangeDelta) { - // By doing this we're also avoiding division by zero while - // calculating the middleIndex later. - return sortedArray[leftIndex] === seekElement ? leftIndex : -1; - } - - // Do interpolation of the middle index. - const middleIndex = leftIndex + Math.floor((valueDelta * indexDelta) / rangeDelta); - - // If we've found the element just return its position. - if (sortedArray[middleIndex] === seekElement) { - return middleIndex; - } - - // Decide which half to choose for seeking next: left or right one. - if (sortedArray[middleIndex] < seekElement) { - // Go to the right half of the array. - leftIndex = middleIndex + 1; - } else { - // Go to the left half of the array. - rightIndex = middleIndex - 1; - } - } - - return -1; -} diff --git a/src/algorithms/search/jump-search/README.md b/src/algorithms/search/jump-search/README.md deleted file mode 100644 index b711a7732d..0000000000 --- a/src/algorithms/search/jump-search/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# Jump Search - -Like Binary Search, **Jump Search** (or **Block Search**) is a searching algorithm -for sorted arrays. The basic idea is to check fewer elements (than linear search) -by jumping ahead by fixed steps or skipping some elements in place of searching all -elements. - -For example, suppose we have an array `arr[]` of size `n` and block (to be jumped) -of size `m`. Then we search at the indexes `arr[0]`, `arr[m]`, `arr[2 * m]`, ..., `arr[k * m]` and -so on. Once we find the interval `arr[k * m] < x < arr[(k+1) * m]`, we perform a -linear search operation from the index `k * m` to find the element `x`. - -**What is the optimal block size to be skipped?** -In the worst case, we have to do `n/m` jumps and if the last checked value is -greater than the element to be searched for, we perform `m - 1` comparisons more -for linear search. Therefore the total number of comparisons in the worst case -will be `((n/m) + m - 1)`. The value of the function `((n/m) + m - 1)` will be -minimum when `m = √n`. Therefore, the best step size is `m = √n`. - -## Complexity - -**Time complexity**: `O(√n)` - because we do search by blocks of size `√n`. - -## References - -- [GeeksForGeeks](https://www.geeksforgeeks.org/jump-search/) -- [Wikipedia](https://en.wikipedia.org/wiki/Jump_search) diff --git a/src/algorithms/search/jump-search/__test__/jumpSearch.test.js b/src/algorithms/search/jump-search/__test__/jumpSearch.test.js deleted file mode 100644 index 32f4d3f7e0..0000000000 --- a/src/algorithms/search/jump-search/__test__/jumpSearch.test.js +++ /dev/null @@ -1,39 +0,0 @@ -import jumpSearch from '../jumpSearch'; - -describe('jumpSearch', () => { - it('should search for an element in sorted array', () => { - expect(jumpSearch([], 1)).toBe(-1); - expect(jumpSearch([1], 2)).toBe(-1); - expect(jumpSearch([1], 1)).toBe(0); - expect(jumpSearch([1, 2], 1)).toBe(0); - expect(jumpSearch([1, 2], 1)).toBe(0); - expect(jumpSearch([1, 1, 1], 1)).toBe(0); - expect(jumpSearch([1, 2, 5, 10, 20, 21, 24, 30, 48], 2)).toBe(1); - expect(jumpSearch([1, 2, 5, 10, 20, 21, 24, 30, 48], 0)).toBe(-1); - expect(jumpSearch([1, 2, 5, 10, 20, 21, 24, 30, 48], 0)).toBe(-1); - expect(jumpSearch([1, 2, 5, 10, 20, 21, 24, 30, 48], 7)).toBe(-1); - expect(jumpSearch([1, 2, 5, 10, 20, 21, 24, 30, 48], 5)).toBe(2); - expect(jumpSearch([1, 2, 5, 10, 20, 21, 24, 30, 48], 20)).toBe(4); - expect(jumpSearch([1, 2, 5, 10, 20, 21, 24, 30, 48], 30)).toBe(7); - expect(jumpSearch([1, 2, 5, 10, 20, 21, 24, 30, 48], 48)).toBe(8); - }); - - it('should search object in sorted array', () => { - const sortedArrayOfObjects = [ - { key: 1, value: 'value1' }, - { key: 2, value: 'value2' }, - { key: 3, value: 'value3' }, - ]; - - const comparator = (a, b) => { - if (a.key === b.key) return 0; - return a.key < b.key ? -1 : 1; - }; - - expect(jumpSearch([], { key: 1 }, comparator)).toBe(-1); - expect(jumpSearch(sortedArrayOfObjects, { key: 4 }, comparator)).toBe(-1); - expect(jumpSearch(sortedArrayOfObjects, { key: 1 }, comparator)).toBe(0); - expect(jumpSearch(sortedArrayOfObjects, { key: 2 }, comparator)).toBe(1); - expect(jumpSearch(sortedArrayOfObjects, { key: 3 }, comparator)).toBe(2); - }); -}); diff --git a/src/algorithms/search/jump-search/jumpSearch.js b/src/algorithms/search/jump-search/jumpSearch.js deleted file mode 100644 index b8c8c24ed4..0000000000 --- a/src/algorithms/search/jump-search/jumpSearch.js +++ /dev/null @@ -1,51 +0,0 @@ -import Comparator from '../../../utils/comparator/Comparator'; - -/** - * Jump (block) search implementation. - * - * @param {*[]} sortedArray - * @param {*} seekElement - * @param {function(a, b)} [comparatorCallback] - * @return {number} - */ -export default function jumpSearch(sortedArray, seekElement, comparatorCallback) { - const comparator = new Comparator(comparatorCallback); - const arraySize = sortedArray.length; - - if (!arraySize) { - // We can't find anything in empty array. - return -1; - } - - // Calculate optimal jump size. - // Total number of comparisons in the worst case will be ((arraySize/jumpSize) + jumpSize - 1). - // The value of the function ((arraySize/jumpSize) + jumpSize - 1) will be minimum - // when jumpSize = √array.length. - const jumpSize = Math.floor(Math.sqrt(arraySize)); - - // Find the block where the seekElement belong to. - let blockStart = 0; - let blockEnd = jumpSize; - while (comparator.greaterThan(seekElement, sortedArray[Math.min(blockEnd, arraySize) - 1])) { - // Jump to the next block. - blockStart = blockEnd; - blockEnd += jumpSize; - - // If our next block is out of array then we couldn't found the element. - if (blockStart > arraySize) { - return -1; - } - } - - // Do linear search for seekElement in subarray starting from blockStart. - let currentIndex = blockStart; - while (currentIndex < Math.min(blockEnd, arraySize)) { - if (comparator.equal(sortedArray[currentIndex], seekElement)) { - return currentIndex; - } - - currentIndex += 1; - } - - return -1; -} diff --git a/src/algorithms/search/linear-search/README.md b/src/algorithms/search/linear-search/README.md deleted file mode 100644 index 8feb422eb2..0000000000 --- a/src/algorithms/search/linear-search/README.md +++ /dev/null @@ -1,23 +0,0 @@ -# Linear Search - -_Read this in other languages:_ -[Português brasileiro](README.pt-BR.md). - -In computer science, linear search or sequential search is a -method for finding a target value within a list. It sequentially -checks each element of the list for the target value until a -match is found or until all the elements have been searched. -Linear search runs in at worst linear time and makes at most `n` -comparisons, where `n` is the length of the list. - -![Linear Search](https://www.tutorialspoint.com/data_structures_algorithms/images/linear_search.gif) - -## Complexity - -**Time Complexity**: `O(n)` - since in worst case we're checking each element -exactly once. - -## References -- [Wikipedia](https://en.wikipedia.org/wiki/Linear_search) -- [TutorialsPoint](https://www.tutorialspoint.com/data_structures_algorithms/linear_search_algorithm.htm) -- [Youtube](https://www.youtube.com/watch?v=SGU9duLE30w) diff --git a/src/algorithms/search/linear-search/README.pt-BR.md b/src/algorithms/search/linear-search/README.pt-BR.md deleted file mode 100644 index e0af42f4ea..0000000000 --- a/src/algorithms/search/linear-search/README.pt-BR.md +++ /dev/null @@ -1,19 +0,0 @@ -# Busca Linear - -_Leia isso em outras línguas:_ -[english](README.md). - -Na Ciência da Computação, busca linear ou busca sequencial é um método para encontrar um elemento alvo em uma lista. -O algoritmo verifica sequencialmente cada elemento da lista procurando o elemento alvo até ele ser encontrado ou até ter verificado todos os elementos. -A Busca linear realiza no máximo `n` comparações, onde `n` é o tamanho da lista. - -![Busca Linear](https://www.tutorialspoint.com/data_structures_algorithms/images/linear_search.gif) - -## Complexidade - -**Complexidade de Tempo**: `O(n)` - pois no pior caso devemos verificar cada elemento exatamente uma vez. - -## Referências -- [Wikipedia](https://en.wikipedia.org/wiki/Linear_search) -- [TutorialsPoint](https://www.tutorialspoint.com/data_structures_algorithms/linear_search_algorithm.htm) -- [Youtube](https://www.youtube.com/watch?v=SGU9duLE30w) diff --git a/src/algorithms/search/linear-search/__test__/linearSearch.test.js b/src/algorithms/search/linear-search/__test__/linearSearch.test.js deleted file mode 100644 index c578fd1f78..0000000000 --- a/src/algorithms/search/linear-search/__test__/linearSearch.test.js +++ /dev/null @@ -1,40 +0,0 @@ -import linearSearch from '../linearSearch'; - -describe('linearSearch', () => { - it('should search all numbers in array', () => { - const array = [1, 2, 4, 6, 2]; - - expect(linearSearch(array, 10)).toEqual([]); - expect(linearSearch(array, 1)).toEqual([0]); - expect(linearSearch(array, 2)).toEqual([1, 4]); - }); - - it('should search all strings in array', () => { - const array = ['a', 'b', 'a']; - - expect(linearSearch(array, 'c')).toEqual([]); - expect(linearSearch(array, 'b')).toEqual([1]); - expect(linearSearch(array, 'a')).toEqual([0, 2]); - }); - - it('should search through objects as well', () => { - const comparatorCallback = (a, b) => { - if (a.key === b.key) { - return 0; - } - - return a.key <= b.key ? -1 : 1; - }; - - const array = [ - { key: 5 }, - { key: 6 }, - { key: 7 }, - { key: 6 }, - ]; - - expect(linearSearch(array, { key: 10 }, comparatorCallback)).toEqual([]); - expect(linearSearch(array, { key: 5 }, comparatorCallback)).toEqual([0]); - expect(linearSearch(array, { key: 6 }, comparatorCallback)).toEqual([1, 3]); - }); -}); diff --git a/src/algorithms/search/linear-search/linearSearch.js b/src/algorithms/search/linear-search/linearSearch.js deleted file mode 100644 index c5fb67c795..0000000000 --- a/src/algorithms/search/linear-search/linearSearch.js +++ /dev/null @@ -1,22 +0,0 @@ -import Comparator from '../../../utils/comparator/Comparator'; - -/** - * Linear search implementation. - * - * @param {*[]} array - * @param {*} seekElement - * @param {function(a, b)} [comparatorCallback] - * @return {number[]} - */ -export default function linearSearch(array, seekElement, comparatorCallback) { - const comparator = new Comparator(comparatorCallback); - const foundIndices = []; - - array.forEach((element, index) => { - if (comparator.equal(element, seekElement)) { - foundIndices.push(index); - } - }); - - return foundIndices; -} diff --git a/src/algorithms/sets/cartesian-product/README.md b/src/algorithms/sets/cartesian-product/README.md deleted file mode 100644 index ae58a15df1..0000000000 --- a/src/algorithms/sets/cartesian-product/README.md +++ /dev/null @@ -1,14 +0,0 @@ -# Cartesian Product - -In set theory a Cartesian product is a mathematical operation that returns a set -(or product set or simply product) from multiple sets. That is, for sets A and B, -the Cartesian product A × B is the set of all ordered pairs (a, b) -where a ∈ A and b ∈ B. - -Cartesian product `AxB` of two sets `A={x,y,z}` and `B={1,2,3}` - -![Cartesian Product of Two Sets](https://upload.wikimedia.org/wikipedia/commons/4/4e/Cartesian_Product_qtl1.svg) - -## References - -[Wikipedia](https://en.wikipedia.org/wiki/Cartesian_product) diff --git a/src/algorithms/sets/cartesian-product/__test__/cartesianProduct.test.js b/src/algorithms/sets/cartesian-product/__test__/cartesianProduct.test.js deleted file mode 100644 index f9154fa26b..0000000000 --- a/src/algorithms/sets/cartesian-product/__test__/cartesianProduct.test.js +++ /dev/null @@ -1,19 +0,0 @@ -import cartesianProduct from '../cartesianProduct'; - -describe('cartesianProduct', () => { - it('should return null if there is not enough info for calculation', () => { - const product1 = cartesianProduct([1], null); - const product2 = cartesianProduct([], null); - - expect(product1).toBeNull(); - expect(product2).toBeNull(); - }); - - it('should calculate the product of two sets', () => { - const product1 = cartesianProduct([1], [1]); - const product2 = cartesianProduct([1, 2], [3, 5]); - - expect(product1).toEqual([[1, 1]]); - expect(product2).toEqual([[1, 3], [1, 5], [2, 3], [2, 5]]); - }); -}); diff --git a/src/algorithms/sets/cartesian-product/cartesianProduct.js b/src/algorithms/sets/cartesian-product/cartesianProduct.js deleted file mode 100644 index 14924fae36..0000000000 --- a/src/algorithms/sets/cartesian-product/cartesianProduct.js +++ /dev/null @@ -1,27 +0,0 @@ -/** - * Generates Cartesian Product of two sets. - * @param {*[]} setA - * @param {*[]} setB - * @return {*[]} - */ -export default function cartesianProduct(setA, setB) { - // Check if input sets are not empty. - // Otherwise return null since we can't generate Cartesian Product out of them. - if (!setA || !setB || !setA.length || !setB.length) { - return null; - } - - // Init product set. - const product = []; - - // Now, let's go through all elements of a first and second set and form all possible pairs. - for (let indexA = 0; indexA < setA.length; indexA += 1) { - for (let indexB = 0; indexB < setB.length; indexB += 1) { - // Add current product pair to the product set. - product.push([setA[indexA], setB[indexB]]); - } - } - - // Return cartesian product set. - return product; -} diff --git a/src/algorithms/sets/combination-sum/README.md b/src/algorithms/sets/combination-sum/README.md deleted file mode 100644 index cb14f1bae8..0000000000 --- a/src/algorithms/sets/combination-sum/README.md +++ /dev/null @@ -1,60 +0,0 @@ -# Combination Sum Problem - -Given a **set** of candidate numbers (`candidates`) **(without duplicates)** and -a target number (`target`), find all unique combinations in `candidates` where -the candidate numbers sums to `target`. - -The **same** repeated number may be chosen from `candidates` unlimited number -of times. - -**Note:** - -- All numbers (including `target`) will be positive integers. -- The solution set must not contain duplicate combinations. - -## Examples - -``` -Input: candidates = [2,3,6,7], target = 7, - -A solution set is: -[ - [7], - [2,2,3] -] -``` - -``` -Input: candidates = [2,3,5], target = 8, - -A solution set is: -[ - [2,2,2,2], - [2,3,3], - [3,5] -] -``` - -## Explanations - -Since the problem is to get all the possible results, not the best or the -number of result, thus we don’t need to consider DP (dynamic programming), -backtracking approach using recursion is needed to handle it. - -Here is an example of decision tree for the situation when `candidates = [2, 3]` and `target = 6`: - -``` - 0 - / \ - +2 +3 - / \ \ - +2 +3 +3 - / \ / \ \ - +2 ✘ ✘ ✘ ✓ - / \ - ✓ ✘ -``` - -## References - -- [LeetCode](https://leetcode.com/problems/combination-sum/description/) diff --git a/src/algorithms/sets/combination-sum/__test__/combinationSum.test.js b/src/algorithms/sets/combination-sum/__test__/combinationSum.test.js deleted file mode 100644 index 7b196bf2a2..0000000000 --- a/src/algorithms/sets/combination-sum/__test__/combinationSum.test.js +++ /dev/null @@ -1,24 +0,0 @@ -import combinationSum from '../combinationSum'; - -describe('combinationSum', () => { - it('should find all combinations with specific sum', () => { - expect(combinationSum([1], 4)).toEqual([ - [1, 1, 1, 1], - ]); - - expect(combinationSum([2, 3, 6, 7], 7)).toEqual([ - [2, 2, 3], - [7], - ]); - - expect(combinationSum([2, 3, 5], 8)).toEqual([ - [2, 2, 2, 2], - [2, 3, 3], - [3, 5], - ]); - - expect(combinationSum([2, 5], 3)).toEqual([]); - - expect(combinationSum([], 3)).toEqual([]); - }); -}); diff --git a/src/algorithms/sets/combination-sum/combinationSum.js b/src/algorithms/sets/combination-sum/combinationSum.js deleted file mode 100644 index dd396a8cb4..0000000000 --- a/src/algorithms/sets/combination-sum/combinationSum.js +++ /dev/null @@ -1,65 +0,0 @@ -/** - * @param {number[]} candidates - candidate numbers we're picking from. - * @param {number} remainingSum - remaining sum after adding candidates to currentCombination. - * @param {number[][]} finalCombinations - resulting list of combinations. - * @param {number[]} currentCombination - currently explored candidates. - * @param {number} startFrom - index of the candidate to start further exploration from. - * @return {number[][]} - */ -function combinationSumRecursive( - candidates, - remainingSum, - finalCombinations = [], - currentCombination = [], - startFrom = 0, -) { - if (remainingSum < 0) { - // By adding another candidate we've gone below zero. - // This would mean that the last candidate was not acceptable. - return finalCombinations; - } - - if (remainingSum === 0) { - // If after adding the previous candidate our remaining sum - // became zero - we need to save the current combination since it is one - // of the answers we're looking for. - finalCombinations.push(currentCombination.slice()); - - return finalCombinations; - } - - // If we haven't reached zero yet let's continue to add all - // possible candidates that are left. - for (let candidateIndex = startFrom; candidateIndex < candidates.length; candidateIndex += 1) { - const currentCandidate = candidates[candidateIndex]; - - // Let's try to add another candidate. - currentCombination.push(currentCandidate); - - // Explore further option with current candidate being added. - combinationSumRecursive( - candidates, - remainingSum - currentCandidate, - finalCombinations, - currentCombination, - candidateIndex, - ); - - // BACKTRACKING. - // Let's get back, exclude current candidate and try another ones later. - currentCombination.pop(); - } - - return finalCombinations; -} - -/** - * Backtracking algorithm of finding all possible combination for specific sum. - * - * @param {number[]} candidates - * @param {number} target - * @return {number[][]} - */ -export default function combinationSum(candidates, target) { - return combinationSumRecursive(candidates, target); -} diff --git a/src/algorithms/sets/combinations/README.md b/src/algorithms/sets/combinations/README.md deleted file mode 100644 index 69fc0603f9..0000000000 --- a/src/algorithms/sets/combinations/README.md +++ /dev/null @@ -1,68 +0,0 @@ -# Combinations - -When the order doesn't matter, it is a **Combination**. - -When the order **does** matter it is a **Permutation**. - -**"My fruit salad is a combination of apples, grapes and bananas"** -We don't care what order the fruits are in, they could also be -"bananas, grapes and apples" or "grapes, apples and bananas", -its the same fruit salad. - -## Combinations without repetitions - -This is how lotteries work. The numbers are drawn one at a -time, and if we have the lucky numbers (no matter what order) -we win! - -No Repetition: such as lottery numbers `(2,14,15,27,30,33)` - -**Number of combinations** - -![Formula](https://www.mathsisfun.com/combinatorics/images/combinations-no-repeat.png) - -where `n` is the number of things to choose from, and we choose `r` of them, -no repetition, order doesn't matter. - -It is often called "n choose r" (such as "16 choose 3"). And is also known as the Binomial Coefficient. - -## Combinations with repetitions - -Repetition is Allowed: such as coins in your pocket `(5,5,5,10,10)` - -Or let us say there are five flavours of ice cream: -`banana`, `chocolate`, `lemon`, `strawberry` and `vanilla`. - -We can have three scoops. How many variations will there be? - -Let's use letters for the flavours: `{b, c, l, s, v}`. -Example selections include: - -- `{c, c, c}` (3 scoops of chocolate) -- `{b, l, v}` (one each of banana, lemon and vanilla) -- `{b, v, v}` (one of banana, two of vanilla) - -**Number of combinations** - -![Formula](https://www.mathsisfun.com/combinatorics/images/combinations-repeat.gif) - -Where `n` is the number of things to choose from, and we -choose `r` of them. Repetition allowed, -order doesn't matter. - -## Cheatsheet - -![Permutations and Combinations Overview](./images/overview.png) - -![Combinations overview](./images/combinations-overview.jpg) - -| | | -| --- | --- | -|![Combinations with repetition](./images/combinations-with-repetitions.jpg) | ![Combinations without repetition](./images/combinations-without-repetitions.jpg) | - -*Made with [okso.app](https://okso.app)* - -## References - -- [Math Is Fun](https://www.mathsisfun.com/combinatorics/combinations-permutations.html) -- [Permutations/combinations cheat sheets](https://medium.com/@trekhleb/permutations-combinations-algorithms-cheat-sheet-68c14879aba5) diff --git a/src/algorithms/sets/combinations/__test__/combineWithRepetitions.test.js b/src/algorithms/sets/combinations/__test__/combineWithRepetitions.test.js deleted file mode 100644 index 90c38958e0..0000000000 --- a/src/algorithms/sets/combinations/__test__/combineWithRepetitions.test.js +++ /dev/null @@ -1,59 +0,0 @@ -import combineWithRepetitions from '../combineWithRepetitions'; -import factorial from '../../../math/factorial/factorial'; - -describe('combineWithRepetitions', () => { - it('should combine string with repetitions', () => { - expect(combineWithRepetitions(['A'], 1)).toEqual([ - ['A'], - ]); - - expect(combineWithRepetitions(['A', 'B'], 1)).toEqual([ - ['A'], - ['B'], - ]); - - expect(combineWithRepetitions(['A', 'B'], 2)).toEqual([ - ['A', 'A'], - ['A', 'B'], - ['B', 'B'], - ]); - - expect(combineWithRepetitions(['A', 'B'], 3)).toEqual([ - ['A', 'A', 'A'], - ['A', 'A', 'B'], - ['A', 'B', 'B'], - ['B', 'B', 'B'], - ]); - - expect(combineWithRepetitions(['A', 'B', 'C'], 2)).toEqual([ - ['A', 'A'], - ['A', 'B'], - ['A', 'C'], - ['B', 'B'], - ['B', 'C'], - ['C', 'C'], - ]); - - expect(combineWithRepetitions(['A', 'B', 'C'], 3)).toEqual([ - ['A', 'A', 'A'], - ['A', 'A', 'B'], - ['A', 'A', 'C'], - ['A', 'B', 'B'], - ['A', 'B', 'C'], - ['A', 'C', 'C'], - ['B', 'B', 'B'], - ['B', 'B', 'C'], - ['B', 'C', 'C'], - ['C', 'C', 'C'], - ]); - - const combinationOptions = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']; - const combinationSlotsNumber = 4; - const combinations = combineWithRepetitions(combinationOptions, combinationSlotsNumber); - const n = combinationOptions.length; - const r = combinationSlotsNumber; - const expectedNumberOfCombinations = factorial((r + n) - 1) / (factorial(r) * factorial(n - 1)); - - expect(combinations.length).toBe(expectedNumberOfCombinations); - }); -}); diff --git a/src/algorithms/sets/combinations/__test__/combineWithoutRepetitions.test.js b/src/algorithms/sets/combinations/__test__/combineWithoutRepetitions.test.js deleted file mode 100644 index d35e00f342..0000000000 --- a/src/algorithms/sets/combinations/__test__/combineWithoutRepetitions.test.js +++ /dev/null @@ -1,64 +0,0 @@ -import combineWithoutRepetitions from '../combineWithoutRepetitions'; -import factorial from '../../../math/factorial/factorial'; -import pascalTriangle from '../../../math/pascal-triangle/pascalTriangle'; - -describe('combineWithoutRepetitions', () => { - it('should combine string without repetitions', () => { - expect(combineWithoutRepetitions(['A', 'B'], 3)).toEqual([]); - - expect(combineWithoutRepetitions(['A', 'B'], 1)).toEqual([ - ['A'], - ['B'], - ]); - - expect(combineWithoutRepetitions(['A'], 1)).toEqual([ - ['A'], - ]); - - expect(combineWithoutRepetitions(['A', 'B'], 2)).toEqual([ - ['A', 'B'], - ]); - - expect(combineWithoutRepetitions(['A', 'B', 'C'], 2)).toEqual([ - ['A', 'B'], - ['A', 'C'], - ['B', 'C'], - ]); - - expect(combineWithoutRepetitions(['A', 'B', 'C'], 3)).toEqual([ - ['A', 'B', 'C'], - ]); - - expect(combineWithoutRepetitions(['A', 'B', 'C', 'D'], 3)).toEqual([ - ['A', 'B', 'C'], - ['A', 'B', 'D'], - ['A', 'C', 'D'], - ['B', 'C', 'D'], - ]); - - expect(combineWithoutRepetitions(['A', 'B', 'C', 'D', 'E'], 3)).toEqual([ - ['A', 'B', 'C'], - ['A', 'B', 'D'], - ['A', 'B', 'E'], - ['A', 'C', 'D'], - ['A', 'C', 'E'], - ['A', 'D', 'E'], - ['B', 'C', 'D'], - ['B', 'C', 'E'], - ['B', 'D', 'E'], - ['C', 'D', 'E'], - ]); - - const combinationOptions = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']; - const combinationSlotsNumber = 4; - const combinations = combineWithoutRepetitions(combinationOptions, combinationSlotsNumber); - const n = combinationOptions.length; - const r = combinationSlotsNumber; - const expectedNumberOfCombinations = factorial(n) / (factorial(r) * factorial(n - r)); - - expect(combinations.length).toBe(expectedNumberOfCombinations); - - // This one is just to see one of the way of Pascal's triangle application. - expect(combinations.length).toBe(pascalTriangle(n)[r]); - }); -}); diff --git a/src/algorithms/sets/combinations/combineWithRepetitions.js b/src/algorithms/sets/combinations/combineWithRepetitions.js deleted file mode 100644 index 5e25635dac..0000000000 --- a/src/algorithms/sets/combinations/combineWithRepetitions.js +++ /dev/null @@ -1,32 +0,0 @@ -/** - * @param {*[]} comboOptions - * @param {number} comboLength - * @return {*[]} - */ -export default function combineWithRepetitions(comboOptions, comboLength) { - // If the length of the combination is 1 then each element of the original array - // is a combination itself. - if (comboLength === 1) { - return comboOptions.map((comboOption) => [comboOption]); - } - - // Init combinations array. - const combos = []; - - // Remember characters one by one and concatenate them to combinations of smaller lengths. - // We don't extract elements here because the repetitions are allowed. - comboOptions.forEach((currentOption, optionIndex) => { - // Generate combinations of smaller size. - const smallerCombos = combineWithRepetitions( - comboOptions.slice(optionIndex), - comboLength - 1, - ); - - // Concatenate currentOption with all combinations of smaller size. - smallerCombos.forEach((smallerCombo) => { - combos.push([currentOption].concat(smallerCombo)); - }); - }); - - return combos; -} diff --git a/src/algorithms/sets/combinations/combineWithoutRepetitions.js b/src/algorithms/sets/combinations/combineWithoutRepetitions.js deleted file mode 100644 index 38fb8507f1..0000000000 --- a/src/algorithms/sets/combinations/combineWithoutRepetitions.js +++ /dev/null @@ -1,32 +0,0 @@ -/** - * @param {*[]} comboOptions - * @param {number} comboLength - * @return {*[]} - */ -export default function combineWithoutRepetitions(comboOptions, comboLength) { - // If the length of the combination is 1 then each element of the original array - // is a combination itself. - if (comboLength === 1) { - return comboOptions.map((comboOption) => [comboOption]); - } - - // Init combinations array. - const combos = []; - - // Extract characters one by one and concatenate them to combinations of smaller lengths. - // We need to extract them because we don't want to have repetitions after concatenation. - comboOptions.forEach((currentOption, optionIndex) => { - // Generate combinations of smaller size. - const smallerCombos = combineWithoutRepetitions( - comboOptions.slice(optionIndex + 1), - comboLength - 1, - ); - - // Concatenate currentOption with all combinations of smaller size. - smallerCombos.forEach((smallerCombo) => { - combos.push([currentOption].concat(smallerCombo)); - }); - }); - - return combos; -} diff --git a/src/algorithms/sets/combinations/images/combinations-overview.jpg b/src/algorithms/sets/combinations/images/combinations-overview.jpg deleted file mode 100644 index 9f54477492b0c9772a2b2493e3f22364e3160f30..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 352932 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 z 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�#McH8g0?TQ7EUQ`GzH0cBcw@R;4LI_nz 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%0D|bXAMOhY2zZ#Ba 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

}*}y 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

{i!$E$9Dq3Tf(MCpLkyt$F{3FYr}x=@t@o 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�nyL`%R=RcO`Q?4I~0-$P*P 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

FjVdWRf0As*Vo!tr7(E^)NzMDp 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 diff --git a/src/algorithms/sets/fisher-yates/README.md b/src/algorithms/sets/fisher-yates/README.md deleted file mode 100644 index 36278d34e7..0000000000 --- a/src/algorithms/sets/fisher-yates/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# Fisher–Yates shuffle - -The Fisher–Yates shuffle is an algorithm for generating a random -permutation of a finite sequence—in plain terms, the algorithm -shuffles the sequence. The algorithm effectively puts all the -elements into a hat; it continually determines the next element -by randomly drawing an element from the hat until no elements -remain. The algorithm produces an unbiased permutation: every -permutation is equally likely. The modern version of the -algorithm is efficient: it takes time proportional to the -number of items being shuffled and shuffles them in place. - -## References - -[Wikipedia](https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle) diff --git a/src/algorithms/sets/fisher-yates/__test__/fisherYates.test.js b/src/algorithms/sets/fisher-yates/__test__/fisherYates.test.js deleted file mode 100644 index f43a7b7cf3..0000000000 --- a/src/algorithms/sets/fisher-yates/__test__/fisherYates.test.js +++ /dev/null @@ -1,19 +0,0 @@ -import fisherYates from '../fisherYates'; -import { sortedArr } from '../../../sorting/SortTester'; -import QuickSort from '../../../sorting/quick-sort/QuickSort'; - -describe('fisherYates', () => { - it('should shuffle small arrays', () => { - expect(fisherYates([])).toEqual([]); - expect(fisherYates([1])).toEqual([1]); - }); - - it('should shuffle array randomly', () => { - const shuffledArray = fisherYates(sortedArr); - const sorter = new QuickSort(); - - expect(shuffledArray.length).toBe(sortedArr.length); - expect(shuffledArray).not.toEqual(sortedArr); - expect(sorter.sort(shuffledArray)).toEqual(sortedArr); - }); -}); diff --git a/src/algorithms/sets/fisher-yates/fisherYates.js b/src/algorithms/sets/fisher-yates/fisherYates.js deleted file mode 100644 index 23b710b9f6..0000000000 --- a/src/algorithms/sets/fisher-yates/fisherYates.js +++ /dev/null @@ -1,15 +0,0 @@ -/** - * @param {*[]} originalArray - * @return {*[]} - */ -export default function fisherYates(originalArray) { - // Clone array from preventing original array from modification (for testing purpose). - const array = originalArray.slice(0); - - for (let i = (array.length - 1); i > 0; i -= 1) { - const randomIndex = Math.floor(Math.random() * (i + 1)); - [array[i], array[randomIndex]] = [array[randomIndex], array[i]]; - } - - return array; -} diff --git a/src/algorithms/sets/knapsack-problem/Knapsack.js b/src/algorithms/sets/knapsack-problem/Knapsack.js deleted file mode 100644 index 5d14911102..0000000000 --- a/src/algorithms/sets/knapsack-problem/Knapsack.js +++ /dev/null @@ -1,195 +0,0 @@ -import MergeSort from '../../sorting/merge-sort/MergeSort'; - -export default class Knapsack { - /** - * @param {KnapsackItem[]} possibleItems - * @param {number} weightLimit - */ - constructor(possibleItems, weightLimit) { - this.selectedItems = []; - this.weightLimit = weightLimit; - this.possibleItems = possibleItems; - } - - sortPossibleItemsByWeight() { - this.possibleItems = new MergeSort({ - /** - * @var KnapsackItem itemA - * @var KnapsackItem itemB - */ - compareCallback: (itemA, itemB) => { - if (itemA.weight === itemB.weight) { - return 0; - } - - return itemA.weight < itemB.weight ? -1 : 1; - }, - }).sort(this.possibleItems); - } - - sortPossibleItemsByValue() { - this.possibleItems = new MergeSort({ - /** - * @var KnapsackItem itemA - * @var KnapsackItem itemB - */ - compareCallback: (itemA, itemB) => { - if (itemA.value === itemB.value) { - return 0; - } - - return itemA.value > itemB.value ? -1 : 1; - }, - }).sort(this.possibleItems); - } - - sortPossibleItemsByValuePerWeightRatio() { - this.possibleItems = new MergeSort({ - /** - * @var KnapsackItem itemA - * @var KnapsackItem itemB - */ - compareCallback: (itemA, itemB) => { - if (itemA.valuePerWeightRatio === itemB.valuePerWeightRatio) { - return 0; - } - - return itemA.valuePerWeightRatio > itemB.valuePerWeightRatio ? -1 : 1; - }, - }).sort(this.possibleItems); - } - - // Solve 0/1 knapsack problem - // Dynamic Programming approach. - solveZeroOneKnapsackProblem() { - // We do two sorts because in case of equal weights but different values - // we need to take the most valuable items first. - this.sortPossibleItemsByValue(); - this.sortPossibleItemsByWeight(); - - this.selectedItems = []; - - // Create knapsack values matrix. - const numberOfRows = this.possibleItems.length; - const numberOfColumns = this.weightLimit; - const knapsackMatrix = Array(numberOfRows).fill(null).map(() => { - return Array(numberOfColumns + 1).fill(null); - }); - - // Fill the first column with zeros since it would mean that there is - // no items we can add to knapsack in case if weight limitation is zero. - for (let itemIndex = 0; itemIndex < this.possibleItems.length; itemIndex += 1) { - knapsackMatrix[itemIndex][0] = 0; - } - - // Fill the first row with max possible values we would get by just adding - // or not adding the first item to the knapsack. - for (let weightIndex = 1; weightIndex <= this.weightLimit; weightIndex += 1) { - const itemIndex = 0; - const itemWeight = this.possibleItems[itemIndex].weight; - const itemValue = this.possibleItems[itemIndex].value; - knapsackMatrix[itemIndex][weightIndex] = itemWeight <= weightIndex ? itemValue : 0; - } - - // Go through combinations of how we may add items to knapsack and - // define what weight/value we would receive using Dynamic Programming - // approach. - for (let itemIndex = 1; itemIndex < this.possibleItems.length; itemIndex += 1) { - for (let weightIndex = 1; weightIndex <= this.weightLimit; weightIndex += 1) { - const currentItemWeight = this.possibleItems[itemIndex].weight; - const currentItemValue = this.possibleItems[itemIndex].value; - - if (currentItemWeight > weightIndex) { - // In case if item's weight is bigger then currently allowed weight - // then we can't add it to knapsack and the max possible value we can - // gain at the moment is the max value we got for previous item. - knapsackMatrix[itemIndex][weightIndex] = knapsackMatrix[itemIndex - 1][weightIndex]; - } else { - // Else we need to consider the max value we can gain at this point by adding - // current value or just by keeping the previous item for current weight. - knapsackMatrix[itemIndex][weightIndex] = Math.max( - currentItemValue + knapsackMatrix[itemIndex - 1][weightIndex - currentItemWeight], - knapsackMatrix[itemIndex - 1][weightIndex], - ); - } - } - } - - // Now let's trace back the knapsack matrix to see what items we're going to add - // to the knapsack. - let itemIndex = this.possibleItems.length - 1; - let weightIndex = this.weightLimit; - - while (itemIndex > 0) { - const currentItem = this.possibleItems[itemIndex]; - const prevItem = this.possibleItems[itemIndex - 1]; - - // Check if matrix value came from top (from previous item). - // In this case this would mean that we need to include previous item - // to the list of selected items. - if ( - knapsackMatrix[itemIndex][weightIndex] - && knapsackMatrix[itemIndex][weightIndex] === knapsackMatrix[itemIndex - 1][weightIndex] - ) { - // Check if there are several items with the same weight but with the different values. - // We need to add highest item in the matrix that is possible to get the highest value. - const prevSumValue = knapsackMatrix[itemIndex - 1][weightIndex]; - const prevPrevSumValue = knapsackMatrix[itemIndex - 2][weightIndex]; - if ( - !prevSumValue - || (prevSumValue && prevPrevSumValue !== prevSumValue) - ) { - this.selectedItems.push(prevItem); - } - } else if (knapsackMatrix[itemIndex - 1][weightIndex - currentItem.weight]) { - this.selectedItems.push(prevItem); - weightIndex -= currentItem.weight; - } - - itemIndex -= 1; - } - } - - // Solve unbounded knapsack problem. - // Greedy approach. - solveUnboundedKnapsackProblem() { - this.sortPossibleItemsByValue(); - this.sortPossibleItemsByValuePerWeightRatio(); - - for (let itemIndex = 0; itemIndex < this.possibleItems.length; itemIndex += 1) { - if (this.totalWeight < this.weightLimit) { - const currentItem = this.possibleItems[itemIndex]; - - // Detect how much of current items we can push to knapsack. - const availableWeight = this.weightLimit - this.totalWeight; - const maxPossibleItemsCount = Math.floor(availableWeight / currentItem.weight); - - if (maxPossibleItemsCount > currentItem.itemsInStock) { - // If we have more items in stock then it is allowed to add - // let's add the maximum allowed number of them. - currentItem.quantity = currentItem.itemsInStock; - } else if (maxPossibleItemsCount) { - // In case if we don't have specified number of items in stock - // let's add only items we have in stock. - currentItem.quantity = maxPossibleItemsCount; - } - - this.selectedItems.push(currentItem); - } - } - } - - get totalValue() { - /** @var {KnapsackItem} item */ - return this.selectedItems.reduce((accumulator, item) => { - return accumulator + item.totalValue; - }, 0); - } - - get totalWeight() { - /** @var {KnapsackItem} item */ - return this.selectedItems.reduce((accumulator, item) => { - return accumulator + item.totalWeight; - }, 0); - } -} diff --git a/src/algorithms/sets/knapsack-problem/KnapsackItem.js b/src/algorithms/sets/knapsack-problem/KnapsackItem.js deleted file mode 100644 index 4c84eeee6f..0000000000 --- a/src/algorithms/sets/knapsack-problem/KnapsackItem.js +++ /dev/null @@ -1,33 +0,0 @@ -export default class KnapsackItem { - /** - * @param {Object} itemSettings - knapsack item settings, - * @param {number} itemSettings.value - value of the item. - * @param {number} itemSettings.weight - weight of the item. - * @param {number} itemSettings.itemsInStock - how many items are available to be added. - */ - constructor({ value, weight, itemsInStock = 1 }) { - this.value = value; - this.weight = weight; - this.itemsInStock = itemsInStock; - // Actual number of items that is going to be added to knapsack. - this.quantity = 1; - } - - get totalValue() { - return this.value * this.quantity; - } - - get totalWeight() { - return this.weight * this.quantity; - } - - // This coefficient shows how valuable the 1 unit of weight is - // for current item. - get valuePerWeightRatio() { - return this.value / this.weight; - } - - toString() { - return `v${this.value} w${this.weight} x ${this.quantity}`; - } -} diff --git a/src/algorithms/sets/knapsack-problem/README.md b/src/algorithms/sets/knapsack-problem/README.md deleted file mode 100644 index 1d86019f62..0000000000 --- a/src/algorithms/sets/knapsack-problem/README.md +++ /dev/null @@ -1,69 +0,0 @@ -# Knapsack Problem - -The knapsack problem or rucksack problem is a problem in -combinatorial optimization: Given a set of items, each with -a weight and a value, determine the number of each item to -include in a collection so that the total weight is less -than or equal to a given limit and the total value is as -large as possible. - -It derives its name from the problem faced by someone who is -constrained by a fixed-size knapsack and must fill it with the -most valuable items. - -Example of a one-dimensional (constraint) knapsack problem: -which boxes should be chosen to maximize the amount of money -while still keeping the overall weight under or equal to 15 kg? - -![knapsack problem](https://upload.wikimedia.org/wikipedia/commons/f/fd/Knapsack.svg) - -## Definition - -### 0/1 knapsack problem - -The most common problem being solved is the **0/1 knapsack problem**, -which restricts the number `xi` of copies of each kind of item to zero or one. - -Given a set of n items numbered from `1` up to `n`, each with a -weight `wi` and a value `vi`, along with a maximum weight -capacity `W`, - -maximize ![0/1 knapsack](https://wikimedia.org/api/rest_v1/media/math/render/svg/85620037d368d2136fb3361702df6a489416931b) - -subject to ![0/1 knapsack](https://wikimedia.org/api/rest_v1/media/math/render/svg/dd6e7c9bca4397980976ea6d19237500ce3b8176) -and ![0/1 knapsack](https://wikimedia.org/api/rest_v1/media/math/render/svg/07dda71da2a630762c7b21b51ea54f86f422f951) - -Here `xi` represents the number of instances of item `i` to -include in the knapsack. Informally, the problem is to maximize -the sum of the values of the items in the knapsack so that the -sum of the weights is less than or equal to the knapsack's -capacity. - -### Bounded knapsack problem (BKP) - -The **bounded knapsack problem (BKP)** removes the restriction -that there is only one of each item, but restricts the number -`xi` of copies of each kind of item to a maximum non-negative -integer value `c`: - -maximize ![bounded knapsack](https://wikimedia.org/api/rest_v1/media/math/render/svg/85620037d368d2136fb3361702df6a489416931b) - -subject to ![bounded knapsack](https://wikimedia.org/api/rest_v1/media/math/render/svg/dd6e7c9bca4397980976ea6d19237500ce3b8176) -and ![bounded knapsack](https://wikimedia.org/api/rest_v1/media/math/render/svg/6c8c5ac4f8247b3b8e01e89de76a1df0ea969821) - -### Unbounded knapsack problem (UKP) - -The **unbounded knapsack problem (UKP)** places no upper bound -on the number of copies of each kind of item and can be -formulated as above except for that the only restriction -on `xi` is that it is a non-negative integer. - -maximize ![unbounded knapsack](https://wikimedia.org/api/rest_v1/media/math/render/svg/85620037d368d2136fb3361702df6a489416931b) - -subject to ![unbounded knapsack](https://wikimedia.org/api/rest_v1/media/math/render/svg/dd6e7c9bca4397980976ea6d19237500ce3b8176) -and ![unbounded knapsack](https://wikimedia.org/api/rest_v1/media/math/render/svg/90a99710f61d5dea19e49ae5b31164d2b56b07e3) - -## References - -- [Wikipedia](https://en.wikipedia.org/wiki/Knapsack_problem) -- [0/1 Knapsack Problem on YouTube](https://www.youtube.com/watch?v=8LusJS5-AGo&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) diff --git a/src/algorithms/sets/knapsack-problem/__test__/Knapsack.test.js b/src/algorithms/sets/knapsack-problem/__test__/Knapsack.test.js deleted file mode 100644 index d322445a72..0000000000 --- a/src/algorithms/sets/knapsack-problem/__test__/Knapsack.test.js +++ /dev/null @@ -1,162 +0,0 @@ -import Knapsack from '../Knapsack'; -import KnapsackItem from '../KnapsackItem'; - -describe('Knapsack', () => { - it('should solve 0/1 knapsack problem', () => { - const possibleKnapsackItems = [ - new KnapsackItem({ value: 1, weight: 1 }), - new KnapsackItem({ value: 4, weight: 3 }), - new KnapsackItem({ value: 5, weight: 4 }), - new KnapsackItem({ value: 7, weight: 5 }), - ]; - - const maxKnapsackWeight = 7; - - const knapsack = new Knapsack(possibleKnapsackItems, maxKnapsackWeight); - - knapsack.solveZeroOneKnapsackProblem(); - - expect(knapsack.totalValue).toBe(9); - expect(knapsack.totalWeight).toBe(7); - expect(knapsack.selectedItems.length).toBe(2); - expect(knapsack.selectedItems[0].toString()).toBe('v5 w4 x 1'); - expect(knapsack.selectedItems[1].toString()).toBe('v4 w3 x 1'); - }); - - it('should solve 0/1 knapsack problem regardless of items order', () => { - const possibleKnapsackItems = [ - new KnapsackItem({ value: 5, weight: 4 }), - new KnapsackItem({ value: 1, weight: 1 }), - new KnapsackItem({ value: 7, weight: 5 }), - new KnapsackItem({ value: 4, weight: 3 }), - ]; - - const maxKnapsackWeight = 7; - - const knapsack = new Knapsack(possibleKnapsackItems, maxKnapsackWeight); - - knapsack.solveZeroOneKnapsackProblem(); - - expect(knapsack.totalValue).toBe(9); - expect(knapsack.totalWeight).toBe(7); - expect(knapsack.selectedItems.length).toBe(2); - expect(knapsack.selectedItems[0].toString()).toBe('v5 w4 x 1'); - expect(knapsack.selectedItems[1].toString()).toBe('v4 w3 x 1'); - }); - - it('should solve 0/1 knapsack problem with impossible items set', () => { - const possibleKnapsackItems = [ - new KnapsackItem({ value: 5, weight: 40 }), - new KnapsackItem({ value: 1, weight: 10 }), - new KnapsackItem({ value: 7, weight: 50 }), - new KnapsackItem({ value: 4, weight: 30 }), - ]; - - const maxKnapsackWeight = 7; - - const knapsack = new Knapsack(possibleKnapsackItems, maxKnapsackWeight); - - knapsack.solveZeroOneKnapsackProblem(); - - expect(knapsack.totalValue).toBe(0); - expect(knapsack.totalWeight).toBe(0); - expect(knapsack.selectedItems.length).toBe(0); - }); - - it('should solve 0/1 knapsack problem with all equal weights', () => { - const possibleKnapsackItems = [ - new KnapsackItem({ value: 5, weight: 1 }), - new KnapsackItem({ value: 1, weight: 1 }), - new KnapsackItem({ value: 7, weight: 1 }), - new KnapsackItem({ value: 4, weight: 1 }), - new KnapsackItem({ value: 4, weight: 1 }), - new KnapsackItem({ value: 4, weight: 1 }), - ]; - - const maxKnapsackWeight = 3; - - const knapsack = new Knapsack(possibleKnapsackItems, maxKnapsackWeight); - - knapsack.solveZeroOneKnapsackProblem(); - - expect(knapsack.totalValue).toBe(16); - expect(knapsack.totalWeight).toBe(3); - expect(knapsack.selectedItems.length).toBe(3); - expect(knapsack.selectedItems[0].toString()).toBe('v4 w1 x 1'); - expect(knapsack.selectedItems[1].toString()).toBe('v5 w1 x 1'); - expect(knapsack.selectedItems[2].toString()).toBe('v7 w1 x 1'); - }); - - it('should solve unbound knapsack problem', () => { - const possibleKnapsackItems = [ - new KnapsackItem({ value: 84, weight: 7 }), // v/w ratio is 12 - new KnapsackItem({ value: 5, weight: 2 }), // v/w ratio is 2.5 - new KnapsackItem({ value: 12, weight: 3 }), // v/w ratio is 4 - new KnapsackItem({ value: 10, weight: 1 }), // v/w ratio is 10 - new KnapsackItem({ value: 20, weight: 2 }), // v/w ratio is 10 - ]; - - const maxKnapsackWeight = 15; - - const knapsack = new Knapsack(possibleKnapsackItems, maxKnapsackWeight); - - knapsack.solveUnboundedKnapsackProblem(); - - expect(knapsack.totalValue).toBe(84 + 20 + 12 + 10 + 5); - expect(knapsack.totalWeight).toBe(15); - expect(knapsack.selectedItems.length).toBe(5); - expect(knapsack.selectedItems[0].toString()).toBe('v84 w7 x 1'); - expect(knapsack.selectedItems[1].toString()).toBe('v20 w2 x 1'); - expect(knapsack.selectedItems[2].toString()).toBe('v10 w1 x 1'); - expect(knapsack.selectedItems[3].toString()).toBe('v12 w3 x 1'); - expect(knapsack.selectedItems[4].toString()).toBe('v5 w2 x 1'); - }); - - it('should solve unbound knapsack problem with items in stock', () => { - const possibleKnapsackItems = [ - new KnapsackItem({ value: 84, weight: 7, itemsInStock: 3 }), // v/w ratio is 12 - new KnapsackItem({ value: 5, weight: 2, itemsInStock: 2 }), // v/w ratio is 2.5 - new KnapsackItem({ value: 12, weight: 3, itemsInStock: 1 }), // v/w ratio is 4 - new KnapsackItem({ value: 10, weight: 1, itemsInStock: 6 }), // v/w ratio is 10 - new KnapsackItem({ value: 20, weight: 2, itemsInStock: 8 }), // v/w ratio is 10 - ]; - - const maxKnapsackWeight = 17; - - const knapsack = new Knapsack(possibleKnapsackItems, maxKnapsackWeight); - - knapsack.solveUnboundedKnapsackProblem(); - - expect(knapsack.totalValue).toBe(84 + 84 + 20 + 10); - expect(knapsack.totalWeight).toBe(17); - expect(knapsack.selectedItems.length).toBe(3); - expect(knapsack.selectedItems[0].toString()).toBe('v84 w7 x 2'); - expect(knapsack.selectedItems[1].toString()).toBe('v20 w2 x 1'); - expect(knapsack.selectedItems[2].toString()).toBe('v10 w1 x 1'); - }); - - it('should solve unbound knapsack problem with items in stock and max weight more than sum of all items', () => { - const possibleKnapsackItems = [ - new KnapsackItem({ value: 84, weight: 7, itemsInStock: 3 }), // v/w ratio is 12 - new KnapsackItem({ value: 5, weight: 2, itemsInStock: 2 }), // v/w ratio is 2.5 - new KnapsackItem({ value: 12, weight: 3, itemsInStock: 1 }), // v/w ratio is 4 - new KnapsackItem({ value: 10, weight: 1, itemsInStock: 6 }), // v/w ratio is 10 - new KnapsackItem({ value: 20, weight: 2, itemsInStock: 8 }), // v/w ratio is 10 - ]; - - const maxKnapsackWeight = 60; - - const knapsack = new Knapsack(possibleKnapsackItems, maxKnapsackWeight); - - knapsack.solveUnboundedKnapsackProblem(); - - expect(knapsack.totalValue).toBe((3 * 84) + (2 * 5) + (1 * 12) + (6 * 10) + (8 * 20)); - expect(knapsack.totalWeight).toBe((3 * 7) + (2 * 2) + (1 * 3) + (6 * 1) + (8 * 2)); - expect(knapsack.selectedItems.length).toBe(5); - expect(knapsack.selectedItems[0].toString()).toBe('v84 w7 x 3'); - expect(knapsack.selectedItems[1].toString()).toBe('v20 w2 x 8'); - expect(knapsack.selectedItems[2].toString()).toBe('v10 w1 x 6'); - expect(knapsack.selectedItems[3].toString()).toBe('v12 w3 x 1'); - expect(knapsack.selectedItems[4].toString()).toBe('v5 w2 x 2'); - }); -}); diff --git a/src/algorithms/sets/knapsack-problem/__test__/KnapsackItem.test.js b/src/algorithms/sets/knapsack-problem/__test__/KnapsackItem.test.js deleted file mode 100644 index d8ea8b8b39..0000000000 --- a/src/algorithms/sets/knapsack-problem/__test__/KnapsackItem.test.js +++ /dev/null @@ -1,35 +0,0 @@ -import KnapsackItem from '../KnapsackItem'; - -describe('KnapsackItem', () => { - it('should create knapsack item and count its total weight and value', () => { - const knapsackItem = new KnapsackItem({ value: 3, weight: 2 }); - - expect(knapsackItem.value).toBe(3); - expect(knapsackItem.weight).toBe(2); - expect(knapsackItem.quantity).toBe(1); - expect(knapsackItem.valuePerWeightRatio).toBe(1.5); - expect(knapsackItem.toString()).toBe('v3 w2 x 1'); - expect(knapsackItem.totalValue).toBe(3); - expect(knapsackItem.totalWeight).toBe(2); - - knapsackItem.quantity = 0; - - expect(knapsackItem.value).toBe(3); - expect(knapsackItem.weight).toBe(2); - expect(knapsackItem.quantity).toBe(0); - expect(knapsackItem.valuePerWeightRatio).toBe(1.5); - expect(knapsackItem.toString()).toBe('v3 w2 x 0'); - expect(knapsackItem.totalValue).toBe(0); - expect(knapsackItem.totalWeight).toBe(0); - - knapsackItem.quantity = 2; - - expect(knapsackItem.value).toBe(3); - expect(knapsackItem.weight).toBe(2); - expect(knapsackItem.quantity).toBe(2); - expect(knapsackItem.valuePerWeightRatio).toBe(1.5); - expect(knapsackItem.toString()).toBe('v3 w2 x 2'); - expect(knapsackItem.totalValue).toBe(6); - expect(knapsackItem.totalWeight).toBe(4); - }); -}); diff --git a/src/algorithms/sets/longest-common-subsequence/README.md b/src/algorithms/sets/longest-common-subsequence/README.md deleted file mode 100644 index 7c9328e073..0000000000 --- a/src/algorithms/sets/longest-common-subsequence/README.md +++ /dev/null @@ -1,25 +0,0 @@ -# Longest common subsequence problem - -The longest common subsequence (LCS) problem is the problem of finding -the longest subsequence common to all sequences in a set of sequences -(often just two sequences). It differs from the longest common substring -problem: unlike substrings, subsequences are not required to occupy -consecutive positions within the original sequences. - -## Application - -The longest common subsequence problem is a classic computer science -problem, the basis of data comparison programs such as the diff utility, -and has applications in bioinformatics. It is also widely used by -revision control systems such as Git for reconciling multiple changes -made to a revision-controlled collection of files. - -## Example - -- LCS for input Sequences `ABCDGH` and `AEDFHR` is `ADH` of length 3. -- LCS for input Sequences `AGGTAB` and `GXTXAYB` is `GTAB` of length 4. - -## References - -- [Wikipedia](https://en.wikipedia.org/wiki/Longest_common_subsequence_problem) -- [YouTube](https://www.youtube.com/watch?v=NnD96abizww&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) diff --git a/src/algorithms/sets/longest-common-subsequence/__test__/longestCommonSubsequence.test.js b/src/algorithms/sets/longest-common-subsequence/__test__/longestCommonSubsequence.test.js deleted file mode 100644 index 9cddc52bc0..0000000000 --- a/src/algorithms/sets/longest-common-subsequence/__test__/longestCommonSubsequence.test.js +++ /dev/null @@ -1,31 +0,0 @@ -import longestCommonSubsequence from '../longestCommonSubsequence'; - -describe('longestCommonSubsequence', () => { - it('should find longest common subsequence for two strings', () => { - expect(longestCommonSubsequence([''], [''])).toEqual(['']); - - expect(longestCommonSubsequence([''], ['A', 'B', 'C'])).toEqual(['']); - - expect(longestCommonSubsequence(['A', 'B', 'C'], [''])).toEqual(['']); - - expect(longestCommonSubsequence( - ['A', 'B', 'C'], - ['D', 'E', 'F', 'G'], - )).toEqual(['']); - - expect(longestCommonSubsequence( - ['A', 'B', 'C', 'D', 'G', 'H'], - ['A', 'E', 'D', 'F', 'H', 'R'], - )).toEqual(['A', 'D', 'H']); - - expect(longestCommonSubsequence( - ['A', 'G', 'G', 'T', 'A', 'B'], - ['G', 'X', 'T', 'X', 'A', 'Y', 'B'], - )).toEqual(['G', 'T', 'A', 'B']); - - expect(longestCommonSubsequence( - ['A', 'B', 'C', 'D', 'A', 'F'], - ['A', 'C', 'B', 'C', 'F'], - )).toEqual(['A', 'B', 'C', 'F']); - }); -}); diff --git a/src/algorithms/sets/longest-common-subsequence/__test__/longestCommonSubsequenceRecursive.test.js b/src/algorithms/sets/longest-common-subsequence/__test__/longestCommonSubsequenceRecursive.test.js deleted file mode 100644 index 3d5c9d802a..0000000000 --- a/src/algorithms/sets/longest-common-subsequence/__test__/longestCommonSubsequenceRecursive.test.js +++ /dev/null @@ -1,17 +0,0 @@ -import longestCommonSubsequence from '../longestCommonSubsequenceRecursive'; - -describe('longestCommonSubsequenceRecursive', () => { - it('should find longest common substring between two strings', () => { - expect(longestCommonSubsequence('', '')).toBe(''); - expect(longestCommonSubsequence('ABC', '')).toBe(''); - expect(longestCommonSubsequence('', 'ABC')).toBe(''); - expect(longestCommonSubsequence('ABABC', 'BABCA')).toBe('BABC'); - expect(longestCommonSubsequence('BABCA', 'ABCBA')).toBe('ABCA'); - expect(longestCommonSubsequence('sea', 'eat')).toBe('ea'); - expect(longestCommonSubsequence('algorithms', 'rithm')).toBe('rithm'); - expect(longestCommonSubsequence( - 'Algorithms and data structures implemented in JavaScript', - 'Here you may find Algorithms and data structures that are implemented in JavaScript', - )).toBe('Algorithms and data structures implemented in JavaScript'); - }); -}); diff --git a/src/algorithms/sets/longest-common-subsequence/longestCommonSubsequence.js b/src/algorithms/sets/longest-common-subsequence/longestCommonSubsequence.js deleted file mode 100644 index 412482736d..0000000000 --- a/src/algorithms/sets/longest-common-subsequence/longestCommonSubsequence.js +++ /dev/null @@ -1,60 +0,0 @@ -/** - * @param {string[]} set1 - * @param {string[]} set2 - * @return {string[]} - */ -export default function longestCommonSubsequence(set1, set2) { - // Init LCS matrix. - const lcsMatrix = Array(set2.length + 1).fill(null).map(() => Array(set1.length + 1).fill(null)); - - // Fill first row with zeros. - for (let columnIndex = 0; columnIndex <= set1.length; columnIndex += 1) { - lcsMatrix[0][columnIndex] = 0; - } - - // Fill first column with zeros. - for (let rowIndex = 0; rowIndex <= set2.length; rowIndex += 1) { - lcsMatrix[rowIndex][0] = 0; - } - - // Fill rest of the column that correspond to each of two strings. - for (let rowIndex = 1; rowIndex <= set2.length; rowIndex += 1) { - for (let columnIndex = 1; columnIndex <= set1.length; columnIndex += 1) { - if (set1[columnIndex - 1] === set2[rowIndex - 1]) { - lcsMatrix[rowIndex][columnIndex] = lcsMatrix[rowIndex - 1][columnIndex - 1] + 1; - } else { - lcsMatrix[rowIndex][columnIndex] = Math.max( - lcsMatrix[rowIndex - 1][columnIndex], - lcsMatrix[rowIndex][columnIndex - 1], - ); - } - } - } - - // Calculate LCS based on LCS matrix. - if (!lcsMatrix[set2.length][set1.length]) { - // If the length of largest common string is zero then return empty string. - return ['']; - } - - const longestSequence = []; - let columnIndex = set1.length; - let rowIndex = set2.length; - - while (columnIndex > 0 || rowIndex > 0) { - if (set1[columnIndex - 1] === set2[rowIndex - 1]) { - // Move by diagonal left-top. - longestSequence.unshift(set1[columnIndex - 1]); - columnIndex -= 1; - rowIndex -= 1; - } else if (lcsMatrix[rowIndex][columnIndex] === lcsMatrix[rowIndex][columnIndex - 1]) { - // Move left. - columnIndex -= 1; - } else { - // Move up. - rowIndex -= 1; - } - } - - return longestSequence; -} diff --git a/src/algorithms/sets/longest-common-subsequence/longestCommonSubsequenceRecursive.js b/src/algorithms/sets/longest-common-subsequence/longestCommonSubsequenceRecursive.js deleted file mode 100644 index 580ba8c72f..0000000000 --- a/src/algorithms/sets/longest-common-subsequence/longestCommonSubsequenceRecursive.js +++ /dev/null @@ -1,36 +0,0 @@ -/* eslint-disable no-param-reassign */ -/** - * Longest Common Subsequence (LCS) (Recursive Approach). - * - * @param {string} string1 - * @param {string} string2 - * @return {number} - */ -export default function longestCommonSubsequenceRecursive(string1, string2) { - /** - * - * @param {string} s1 - * @param {string} s2 - * @return {string} - returns the LCS (Longest Common Subsequence) - */ - const lcs = (s1, s2, memo = {}) => { - if (!s1 || !s2) return ''; - - if (memo[`${s1}:${s2}`]) return memo[`${s1}:${s2}`]; - - if (s1[0] === s2[0]) { - return s1[0] + lcs(s1.substring(1), s2.substring(1), memo); - } - - const nextLcs1 = lcs(s1.substring(1), s2, memo); - const nextLcs2 = lcs(s1, s2.substring(1), memo); - - const nextLongest = nextLcs1.length >= nextLcs2.length ? nextLcs1 : nextLcs2; - - memo[`${s1}:${s2}`] = nextLongest; - - return nextLongest; - }; - - return lcs(string1, string2); -} diff --git a/src/algorithms/sets/longest-increasing-subsequence/README.md b/src/algorithms/sets/longest-increasing-subsequence/README.md deleted file mode 100644 index bcb2665c2d..0000000000 --- a/src/algorithms/sets/longest-increasing-subsequence/README.md +++ /dev/null @@ -1,46 +0,0 @@ -# Longest Increasing Subsequence - -The longest increasing subsequence problem is to find a subsequence of a -given sequence in which the subsequence's elements are in sorted order, -lowest to highest, and in which the subsequence is as long as possible. -This subsequence is not necessarily contiguous, or unique. - -## Complexity - -The longest increasing subsequence problem is solvable in -time `O(n log n)`, where `n` denotes the length of the input sequence. - -Dynamic programming approach has complexity `O(n * n)`. - -## Example - -In the first 16 terms of the binary Van der Corput sequence - -``` -0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15 -``` - -a longest increasing subsequence is - -``` -0, 2, 6, 9, 11, 15. -``` - -This subsequence has length six; -the input sequence has no seven-member increasing subsequences. -The longest increasing subsequence in this example is not unique: for -instance, - -``` -0, 4, 6, 9, 11, 15 or -0, 2, 6, 9, 13, 15 or -0, 4, 6, 9, 13, 15 -``` - -are other increasing subsequences of equal length in the same -input sequence. - -## References - -- [Wikipedia](https://en.wikipedia.org/wiki/Longest_increasing_subsequence) -- [Dynamic Programming Approach on YouTube](https://www.youtube.com/watch?v=CE2b_-XfVDk&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) diff --git a/src/algorithms/sets/longest-increasing-subsequence/__test__/dpLongestIncreasingSubsequence.test.js b/src/algorithms/sets/longest-increasing-subsequence/__test__/dpLongestIncreasingSubsequence.test.js deleted file mode 100644 index 13160b6192..0000000000 --- a/src/algorithms/sets/longest-increasing-subsequence/__test__/dpLongestIncreasingSubsequence.test.js +++ /dev/null @@ -1,36 +0,0 @@ -import dpLongestIncreasingSubsequence from '../dpLongestIncreasingSubsequence'; - -describe('dpLongestIncreasingSubsequence', () => { - it('should find longest increasing subsequence length', () => { - // Should be: - // 9 or - // 8 or - // 7 or - // 6 or - // ... - expect(dpLongestIncreasingSubsequence([ - 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, - ])).toBe(1); - - // Should be: - // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 - expect(dpLongestIncreasingSubsequence([ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, - ])).toBe(10); - - // Should be: - // -1, 0, 2, 3 - expect(dpLongestIncreasingSubsequence([ - 3, 4, -1, 0, 6, 2, 3, - ])).toBe(4); - - // Should be: - // 0, 2, 6, 9, 11, 15 or - // 0, 4, 6, 9, 11, 15 or - // 0, 2, 6, 9, 13, 15 or - // 0, 4, 6, 9, 13, 15 - expect(dpLongestIncreasingSubsequence([ - 0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15, - ])).toBe(6); - }); -}); diff --git a/src/algorithms/sets/longest-increasing-subsequence/dpLongestIncreasingSubsequence.js b/src/algorithms/sets/longest-increasing-subsequence/dpLongestIncreasingSubsequence.js deleted file mode 100644 index e5f2ec6dbf..0000000000 --- a/src/algorithms/sets/longest-increasing-subsequence/dpLongestIncreasingSubsequence.js +++ /dev/null @@ -1,53 +0,0 @@ -/** - * Dynamic programming approach to find longest increasing subsequence. - * Complexity: O(n * n) - * - * @param {number[]} sequence - * @return {number} - */ -export default function dpLongestIncreasingSubsequence(sequence) { - // Create array with longest increasing substrings length and - // fill it with 1-s that would mean that each element of the sequence - // is itself a minimum increasing subsequence. - const lengthsArray = Array(sequence.length).fill(1); - - let previousElementIndex = 0; - let currentElementIndex = 1; - - while (currentElementIndex < sequence.length) { - if (sequence[previousElementIndex] < sequence[currentElementIndex]) { - // If current element is bigger then the previous one then - // current element is a part of increasing subsequence which - // length is by one bigger then the length of increasing subsequence - // for previous element. - const newLength = lengthsArray[previousElementIndex] + 1; - if (newLength > lengthsArray[currentElementIndex]) { - // Increase only if previous element would give us bigger subsequence length - // then we already have for current element. - lengthsArray[currentElementIndex] = newLength; - } - } - - // Move previous element index right. - previousElementIndex += 1; - - // If previous element index equals to current element index then - // shift current element right and reset previous element index to zero. - if (previousElementIndex === currentElementIndex) { - currentElementIndex += 1; - previousElementIndex = 0; - } - } - - // Find the biggest element in lengthsArray. - // This number is the biggest length of increasing subsequence. - let longestIncreasingLength = 0; - - for (let i = 0; i < lengthsArray.length; i += 1) { - if (lengthsArray[i] > longestIncreasingLength) { - longestIncreasingLength = lengthsArray[i]; - } - } - - return longestIncreasingLength; -} diff --git a/src/algorithms/sets/maximum-subarray/README.md b/src/algorithms/sets/maximum-subarray/README.md deleted file mode 100644 index f06300f500..0000000000 --- a/src/algorithms/sets/maximum-subarray/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# Maximum subarray problem - -The maximum subarray problem is the task of finding the contiguous -subarray within a one-dimensional array, `a[1...n]`, of numbers -which has the largest sum, where, - -![Maximum subarray](https://wikimedia.org/api/rest_v1/media/math/render/svg/e8960f093107b71b21827e726e2bad8b023779b2) - -![Maximum subarray](https://www.geeksforgeeks.org/wp-content/uploads/kadane-Algorithm.png) - -## Example - -The list usually contains both positive and negative numbers along -with `0`. For example, for the array of -values `−2, 1, −3, 4, −1, 2, 1, −5, 4` the contiguous subarray -with the largest sum is `4, −1, 2, 1`, with sum `6`. - -## Solutions - -- Brute Force solution `O(n^2)`: [bfMaximumSubarray.js](./bfMaximumSubarray.js) -- Divide and Conquer solution `O(n^2)`: [dcMaximumSubarraySum.js](./dcMaximumSubarraySum.js) -- Dynamic Programming solution `O(n)`: [dpMaximumSubarray.js](./dpMaximumSubarray.js) - -## References - -- [Wikipedia](https://en.wikipedia.org/wiki/Maximum_subarray_problem) -- [YouTube](https://www.youtube.com/watch?v=ohHWQf1HDfU&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) -- [GeeksForGeeks](https://www.geeksforgeeks.org/largest-sum-contiguous-subarray/) -- [LeetCode](https://leetcode.com/explore/interview/card/top-interview-questions-easy/97/dynamic-programming/566/discuss/1595195/C++Python-7-Simple-Solutions-w-Explanation-or-Brute-Force-+-DP-+-Kadane-+-Divide-and-Conquer) diff --git a/src/algorithms/sets/maximum-subarray/__test__/bfMaximumSubarray.test.js b/src/algorithms/sets/maximum-subarray/__test__/bfMaximumSubarray.test.js deleted file mode 100644 index 6bff427110..0000000000 --- a/src/algorithms/sets/maximum-subarray/__test__/bfMaximumSubarray.test.js +++ /dev/null @@ -1,16 +0,0 @@ -import bfMaximumSubarray from '../bfMaximumSubarray'; - -describe('bfMaximumSubarray', () => { - it('should find maximum subarray using the brute force algorithm', () => { - expect(bfMaximumSubarray([])).toEqual([]); - expect(bfMaximumSubarray([0, 0])).toEqual([0]); - expect(bfMaximumSubarray([0, 0, 1])).toEqual([0, 0, 1]); - expect(bfMaximumSubarray([0, 0, 1, 2])).toEqual([0, 0, 1, 2]); - expect(bfMaximumSubarray([0, 0, -1, 2])).toEqual([2]); - expect(bfMaximumSubarray([-1, -2, -3, -4, -5])).toEqual([-1]); - expect(bfMaximumSubarray([1, 2, 3, 2, 3, 4, 5])).toEqual([1, 2, 3, 2, 3, 4, 5]); - expect(bfMaximumSubarray([-2, 1, -3, 4, -1, 2, 1, -5, 4])).toEqual([4, -1, 2, 1]); - expect(bfMaximumSubarray([-2, -3, 4, -1, -2, 1, 5, -3])).toEqual([4, -1, -2, 1, 5]); - expect(bfMaximumSubarray([1, -3, 2, -5, 7, 6, -1, 4, 11, -23])).toEqual([7, 6, -1, 4, 11]); - }); -}); diff --git a/src/algorithms/sets/maximum-subarray/__test__/dcMaximumSubarraySum.test.js b/src/algorithms/sets/maximum-subarray/__test__/dcMaximumSubarraySum.test.js deleted file mode 100644 index 3b3ace08d3..0000000000 --- a/src/algorithms/sets/maximum-subarray/__test__/dcMaximumSubarraySum.test.js +++ /dev/null @@ -1,16 +0,0 @@ -import dcMaximumSubarray from '../dcMaximumSubarraySum'; - -describe('dcMaximumSubarraySum', () => { - it('should find maximum subarray sum using the divide and conquer algorithm', () => { - expect(dcMaximumSubarray([])).toEqual(-Infinity); - expect(dcMaximumSubarray([0, 0])).toEqual(0); - expect(dcMaximumSubarray([0, 0, 1])).toEqual(1); - expect(dcMaximumSubarray([0, 0, 1, 2])).toEqual(3); - expect(dcMaximumSubarray([0, 0, -1, 2])).toEqual(2); - expect(dcMaximumSubarray([-1, -2, -3, -4, -5])).toEqual(-1); - expect(dcMaximumSubarray([1, 2, 3, 2, 3, 4, 5])).toEqual(20); - expect(dcMaximumSubarray([-2, 1, -3, 4, -1, 2, 1, -5, 4])).toEqual(6); - expect(dcMaximumSubarray([-2, -3, 4, -1, -2, 1, 5, -3])).toEqual(7); - expect(dcMaximumSubarray([1, -3, 2, -5, 7, 6, -1, 4, 11, -23])).toEqual(27); - }); -}); diff --git a/src/algorithms/sets/maximum-subarray/__test__/dpMaximumSubarray.test.js b/src/algorithms/sets/maximum-subarray/__test__/dpMaximumSubarray.test.js deleted file mode 100644 index c00727cc66..0000000000 --- a/src/algorithms/sets/maximum-subarray/__test__/dpMaximumSubarray.test.js +++ /dev/null @@ -1,16 +0,0 @@ -import dpMaximumSubarray from '../dpMaximumSubarray'; - -describe('dpMaximumSubarray', () => { - it('should find maximum subarray using the dynamic programming algorithm', () => { - expect(dpMaximumSubarray([])).toEqual([]); - expect(dpMaximumSubarray([0, 0])).toEqual([0]); - expect(dpMaximumSubarray([0, 0, 1])).toEqual([0, 0, 1]); - expect(dpMaximumSubarray([0, 0, 1, 2])).toEqual([0, 0, 1, 2]); - expect(dpMaximumSubarray([0, 0, -1, 2])).toEqual([2]); - expect(dpMaximumSubarray([-1, -2, -3, -4, -5])).toEqual([-1]); - expect(dpMaximumSubarray([1, 2, 3, 2, 3, 4, 5])).toEqual([1, 2, 3, 2, 3, 4, 5]); - expect(dpMaximumSubarray([-2, 1, -3, 4, -1, 2, 1, -5, 4])).toEqual([4, -1, 2, 1]); - expect(dpMaximumSubarray([-2, -3, 4, -1, -2, 1, 5, -3])).toEqual([4, -1, -2, 1, 5]); - expect(dpMaximumSubarray([1, -3, 2, -5, 7, 6, -1, 4, 11, -23])).toEqual([7, 6, -1, 4, 11]); - }); -}); diff --git a/src/algorithms/sets/maximum-subarray/bfMaximumSubarray.js b/src/algorithms/sets/maximum-subarray/bfMaximumSubarray.js deleted file mode 100644 index 20c0b38e72..0000000000 --- a/src/algorithms/sets/maximum-subarray/bfMaximumSubarray.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Brute Force solution. - * Complexity: O(n^2) - * - * @param {Number[]} inputArray - * @return {Number[]} - */ -export default function bfMaximumSubarray(inputArray) { - let maxSubarrayStartIndex = 0; - let maxSubarrayLength = 0; - let maxSubarraySum = null; - - for (let startIndex = 0; startIndex < inputArray.length; startIndex += 1) { - let subarraySum = 0; - for (let arrLength = 1; arrLength <= (inputArray.length - startIndex); arrLength += 1) { - subarraySum += inputArray[startIndex + (arrLength - 1)]; - if (maxSubarraySum === null || subarraySum > maxSubarraySum) { - maxSubarraySum = subarraySum; - maxSubarrayStartIndex = startIndex; - maxSubarrayLength = arrLength; - } - } - } - - return inputArray.slice(maxSubarrayStartIndex, maxSubarrayStartIndex + maxSubarrayLength); -} diff --git a/src/algorithms/sets/maximum-subarray/dcMaximumSubarraySum.js b/src/algorithms/sets/maximum-subarray/dcMaximumSubarraySum.js deleted file mode 100644 index 3ed9ab3ee7..0000000000 --- a/src/algorithms/sets/maximum-subarray/dcMaximumSubarraySum.js +++ /dev/null @@ -1,33 +0,0 @@ -/** - * Divide and Conquer solution. - * Complexity: O(n^2) in case if no memoization applied - * - * @param {Number[]} inputArray - * @return {Number[]} - */ -export default function dcMaximumSubarraySum(inputArray) { - /** - * We are going through the inputArray array and for each element we have two options: - * - to pick - * - not to pick - * - * Also keep in mind, that the maximum sub-array must be contiguous. It means if we picked - * the element, we need to continue picking the next elements or stop counting the max sum. - * - * @param {number} elementIndex - the index of the element we're deciding to pick or not - * @param {boolean} mustPick - to pick or not to pick the element - * @returns {number} - maximum subarray sum that we'll get - */ - function solveRecursively(elementIndex, mustPick) { - if (elementIndex >= inputArray.length) { - return mustPick ? 0 : -Infinity; - } - return Math.max( - // Option #1: Pick the current element, and continue picking next one. - inputArray[elementIndex] + solveRecursively(elementIndex + 1, true), - // Option #2: Don't pick the current element. - mustPick ? 0 : solveRecursively(elementIndex + 1, false), - ); - } - return solveRecursively(0, false); -} diff --git a/src/algorithms/sets/maximum-subarray/dpMaximumSubarray.js b/src/algorithms/sets/maximum-subarray/dpMaximumSubarray.js deleted file mode 100644 index ef1734b486..0000000000 --- a/src/algorithms/sets/maximum-subarray/dpMaximumSubarray.js +++ /dev/null @@ -1,45 +0,0 @@ -/** - * Dynamic Programming solution. - * Complexity: O(n) - * - * @param {Number[]} inputArray - * @return {Number[]} - */ -export default function dpMaximumSubarray(inputArray) { - // We iterate through the inputArray once, using a greedy approach to keep track of the maximum - // sum we've seen so far and the current sum. - // - // The currentSum variable gets reset to 0 every time it drops below 0. - // - // The maxSum variable is set to -Infinity so that if all numbers are negative, the highest - // negative number will constitute the maximum subarray. - - let maxSum = -Infinity; - let currentSum = 0; - - // We need to keep track of the starting and ending indices that contributed to our maxSum - // so that we can return the actual subarray. From the beginning let's assume that whole array - // is contributing to maxSum. - let maxStartIndex = 0; - let maxEndIndex = inputArray.length - 1; - let currentStartIndex = 0; - - inputArray.forEach((currentNumber, currentIndex) => { - currentSum += currentNumber; - - // Update maxSum and the corresponding indices if we have found a new max. - if (maxSum < currentSum) { - maxSum = currentSum; - maxStartIndex = currentStartIndex; - maxEndIndex = currentIndex; - } - - // Reset currentSum and currentStartIndex if currentSum drops below 0. - if (currentSum < 0) { - currentSum = 0; - currentStartIndex = currentIndex + 1; - } - }); - - return inputArray.slice(maxStartIndex, maxEndIndex + 1); -} diff --git a/src/algorithms/sets/permutations/README.md b/src/algorithms/sets/permutations/README.md deleted file mode 100644 index 4b6a268adc..0000000000 --- a/src/algorithms/sets/permutations/README.md +++ /dev/null @@ -1,55 +0,0 @@ -# Permutations - -When the order doesn't matter, it is a **Combination**. - -When the order **does** matter it is a **Permutation**. - -**"The combination to the safe is 472"**. We do care about the order. `724` won't work, nor will `247`. -It has to be exactly `4-7-2`. - -## Permutations without repetitions - -A permutation, also called an “arrangement number” or “order”, is a rearrangement of -the elements of an ordered list `S` into a one-to-one correspondence with `S` itself. - -Below are the permutations of string `ABC`. - -`ABC ACB BAC BCA CBA CAB` - -Or for example the first three people in a running race: you can't be first and second. - -**Number of combinations** - -``` -n * (n-1) * (n -2) * ... * 1 = n! -``` - -## Permutations with repetitions - -When repetition is allowed we have permutations with repetitions. -For example the the lock below: it could be `333`. - -![Permutation Lock](https://www.mathsisfun.com/combinatorics/images/combination-lock.jpg) - -**Number of combinations** - -``` -n * n * n ... (r times) = n^r -``` - -## Cheatsheet - -![Permutations and Combinations Overview](./images/overview.png) - -![Permutations overview](./images/permutations-overview.jpeg) - -| | | -| --- | --- | -|![Permutations with repetition](./images/permutations-with-repetitions.jpg) | ![Permutations without repetition](./images/permutations-without-repetitions.jpg) | - -*Made with [okso.app](https://okso.app)* - -## References - -- [Math Is Fun](https://www.mathsisfun.com/combinatorics/combinations-permutations.html) -- [Permutations/combinations cheat sheets](https://medium.com/@trekhleb/permutations-combinations-algorithms-cheat-sheet-68c14879aba5) diff --git a/src/algorithms/sets/permutations/__test__/permutateWithRepetitions.test.js b/src/algorithms/sets/permutations/__test__/permutateWithRepetitions.test.js deleted file mode 100644 index 0d53def1ae..0000000000 --- a/src/algorithms/sets/permutations/__test__/permutateWithRepetitions.test.js +++ /dev/null @@ -1,52 +0,0 @@ -import permutateWithRepetitions from '../permutateWithRepetitions'; - -describe('permutateWithRepetitions', () => { - it('should permutate string with repetition', () => { - const permutations1 = permutateWithRepetitions(['A']); - expect(permutations1).toEqual([ - ['A'], - ]); - - const permutations2 = permutateWithRepetitions(['A', 'B']); - expect(permutations2).toEqual([ - ['A', 'A'], - ['A', 'B'], - ['B', 'A'], - ['B', 'B'], - ]); - - const permutations3 = permutateWithRepetitions(['A', 'B', 'C']); - expect(permutations3).toEqual([ - ['A', 'A', 'A'], - ['A', 'A', 'B'], - ['A', 'A', 'C'], - ['A', 'B', 'A'], - ['A', 'B', 'B'], - ['A', 'B', 'C'], - ['A', 'C', 'A'], - ['A', 'C', 'B'], - ['A', 'C', 'C'], - ['B', 'A', 'A'], - ['B', 'A', 'B'], - ['B', 'A', 'C'], - ['B', 'B', 'A'], - ['B', 'B', 'B'], - ['B', 'B', 'C'], - ['B', 'C', 'A'], - ['B', 'C', 'B'], - ['B', 'C', 'C'], - ['C', 'A', 'A'], - ['C', 'A', 'B'], - ['C', 'A', 'C'], - ['C', 'B', 'A'], - ['C', 'B', 'B'], - ['C', 'B', 'C'], - ['C', 'C', 'A'], - ['C', 'C', 'B'], - ['C', 'C', 'C'], - ]); - - const permutations4 = permutateWithRepetitions(['A', 'B', 'C', 'D']); - expect(permutations4.length).toBe(4 * 4 * 4 * 4); - }); -}); diff --git a/src/algorithms/sets/permutations/__test__/permutateWithoutRepetitions.test.js b/src/algorithms/sets/permutations/__test__/permutateWithoutRepetitions.test.js deleted file mode 100644 index 6125e58e3c..0000000000 --- a/src/algorithms/sets/permutations/__test__/permutateWithoutRepetitions.test.js +++ /dev/null @@ -1,68 +0,0 @@ -import permutateWithoutRepetitions from '../permutateWithoutRepetitions'; -import factorial from '../../../math/factorial/factorial'; - -describe('permutateWithoutRepetitions', () => { - it('should permutate string', () => { - const permutations1 = permutateWithoutRepetitions(['A']); - expect(permutations1).toEqual([ - ['A'], - ]); - - const permutations2 = permutateWithoutRepetitions(['A', 'B']); - expect(permutations2.length).toBe(2); - expect(permutations2).toEqual([ - ['A', 'B'], - ['B', 'A'], - ]); - - const permutations6 = permutateWithoutRepetitions(['A', 'A']); - expect(permutations6.length).toBe(2); - expect(permutations6).toEqual([ - ['A', 'A'], - ['A', 'A'], - ]); - - const permutations3 = permutateWithoutRepetitions(['A', 'B', 'C']); - expect(permutations3.length).toBe(factorial(3)); - expect(permutations3).toEqual([ - ['A', 'B', 'C'], - ['B', 'A', 'C'], - ['B', 'C', 'A'], - ['A', 'C', 'B'], - ['C', 'A', 'B'], - ['C', 'B', 'A'], - ]); - - const permutations4 = permutateWithoutRepetitions(['A', 'B', 'C', 'D']); - expect(permutations4.length).toBe(factorial(4)); - expect(permutations4).toEqual([ - ['A', 'B', 'C', 'D'], - ['B', 'A', 'C', 'D'], - ['B', 'C', 'A', 'D'], - ['B', 'C', 'D', 'A'], - ['A', 'C', 'B', 'D'], - ['C', 'A', 'B', 'D'], - ['C', 'B', 'A', 'D'], - ['C', 'B', 'D', 'A'], - ['A', 'C', 'D', 'B'], - ['C', 'A', 'D', 'B'], - ['C', 'D', 'A', 'B'], - ['C', 'D', 'B', 'A'], - ['A', 'B', 'D', 'C'], - ['B', 'A', 'D', 'C'], - ['B', 'D', 'A', 'C'], - ['B', 'D', 'C', 'A'], - ['A', 'D', 'B', 'C'], - ['D', 'A', 'B', 'C'], - ['D', 'B', 'A', 'C'], - ['D', 'B', 'C', 'A'], - ['A', 'D', 'C', 'B'], - ['D', 'A', 'C', 'B'], - ['D', 'C', 'A', 'B'], - ['D', 'C', 'B', 'A'], - ]); - - const permutations5 = permutateWithoutRepetitions(['A', 'B', 'C', 'D', 'E', 'F']); - expect(permutations5.length).toBe(factorial(6)); - }); -}); diff --git a/src/algorithms/sets/permutations/images/overview.png b/src/algorithms/sets/permutations/images/overview.png deleted file mode 100644 index fa8d6a66f5403d99a5367a006d9bca788b2e9534..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 145014 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 diff --git a/src/algorithms/sets/permutations/images/permutations-overview.jpeg b/src/algorithms/sets/permutations/images/permutations-overview.jpeg deleted file mode 100644 index 0df355d23d112d313b35b73fb5e14097884973c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 314729 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%0D&3iI#pOL9WF*SXTO!VM z#>=E$nZ?|86>SnY+7V|S_@h0WE}z5CG;jID7!eg zOfcYmS$l8WQc$d1%F?iVcCwNQefJqv+(9ZuD5AFW+C!f@1b#k0B�pxI7dW7B_LD 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%0Dv>g? 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

cW*m0l0&>=NAr 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≈`J$AQWZ@z%xf(vVVN2218SDF+hf?1IsienP#9DWn zJXCp*xxXn8dpB*Z5&8~wVw3bNg50t8>_ai*k8NYyGNQ<+_<1+Nm?r;&w|`;Kt8Msh@CYG%AY*CR^wKD|}~fqDz~u>y#rOczT| z_n<@V$ky3dz9_%Y^SBmO`f#&J1u@s?6-&JrfB6d2K-AI6-q0fWC1~5d6R5q9)DsZb zwsO{G0VsJBo(;Ma{rKamzbDMN%k$XWDa|8n1Nl@9Rgb1QZ(Y(T{$Jkki7kFVJ}4hE z8%#k)BtD5jeWkLNSudXQE_tJ$`JA1i$rPvZeaV{q9AtK7@$p*yikVt=xhLPpP4W5D zqzL7x(&Xr)mb3CQ3ujGTJ=&5=FC3wG>4aJq6X$(-B?c9I_^=FB|u% znIWUL(H$q7Z{y`vinIN;Y(lqXMo>HIV>z|n({amlS)_Oa<*(-}jrvW%4hX{>kk81| z8aJ{ieuptjzuBg}sfX;zhx7cIvpjOaEG3@6+g$GwTCkCkG zdS0lq5+{xrMDT)#bkg6n!<=$*IW>&>=L1a1`#gf*Un@MJJ9nl9{UGD>(&R2Jtrd^3 zAlX5gLB}W^gl~iJj%E44p5GJn~2Xy(;sx9i;(!Si?(E4(LA-S^Rz32=dnS~v<~q$ zh3jb(?xzUmjQ znWIFy9~t%2$(kGc5Ppo$7_6&j7UJ;}>a1`Os^UiaoccqDrO04Ytcc)xy%0GSj6RpN1~Vj%FwQ z$1)bdKCvPnzy7JfPoB*%rB(gnnOaLTD(u@LR&}I!XTgUl` zepCTwXY7F1Y1Xqo-Hd$>mob=jfM*w>mLj=jTjDtj*(l?47+XOq?qJjgCu8<-DUmRjwz*L~z+!v3a`CKh9(x6qKHgz&W| z6{V91j>B1N)oT`>3k96QWQzB>AOG0!e>Kr@a&7q<0|u)~X?k|qb!|{0cJrDJdZP0U zkU*<@smn6@N~^jmd>+#vr9wrG;cY_t468MMdJBc$h?$Ft zog7nRBOq5mX4z8yo_dOKSDAP(baH906ueUxIV#Sq0|-w#QTYpFnz%yN0W{6UKwjVe zeAvaiGM-a()0oHCcesQgsJx}yA=4nJ1}tgIk+gU#?X|dM)MfYSxpt1t(;55NIx%VT zl>W%DL~ucwfOCCl2(oQ$B#1u1l)|%{^!Vd;3KKhD_=4pK(NfM}d_?Fpi_-unp-}CD zTaD$VaFdPaZq*|*U;WTp{}kokW7fu&fb$0eme3`%BQST?`&M(W zO#Cmh5BjK7cHVIcssviY!{fH7+$60O9h?0DB2Kq%UsiI~Aj;5;aOMwBTl>vf`t7oPGOD_>YAON-xT-Nxum zpQW;mDu^f$9M(1v@o)_JWp9bW@=LbH5)1G(nnef$Q=MaqC~(w6wSJ;$M>X8w-1q`N zZVYLSRFWGWS6=+BThAwg8a0(sBnc^4TzSo!UGme51DUCm<+%09$@hBKq2bj`?hqrA zsM9DiDK|GGL9Z%9s!xi?Kteu^U4CdS{`AOl!_$<->U5}_FfFm-aL zg%f|YLyBiAqU*@0I}I~j1Y&;a8qXy(UbjF*eMeE^WDw(0h~~ETeAJYEvl@M_Ub`ioepG9b0CPubAzqTfE7z=L6Wja5XSZG?|P5UzX!~u-$G(gtyLH#*sr-O{R3 zZb(RjKumo0l`MNkM>4C;@mw$5`qe9SCFZ<{fsZhOuINU>-+I5X@7?F`DlujvWH{b? z26O7ExH%BDJ<}{5+=IQ(cioW&(%H-D|Ezx9bXNz!Znjr`S*t2yC9(oBhbYJ^suV>k z3=vgUJgS%sEqnu`v5R;%^${aH`#NpsIVTB69fe4RaL@`uE4P~{2fKq@*h$6>uc+Wr z12h#f&-x^-JCwr+YTRGc_ToCFmpDb)CfA%BfI6&6d!Ql-ZLIM5x~Om=o4&Qk?D;r! zVPd9b+Y?^I=C2*-w`53XV7&BPn|!!szRFsZ!UmL>5w5`fl%|Rnm~yYiZ@EZ~TI*OU zN(UY%y60AQ9{JT7xy}wM&+3b5jJMZys#q^8Cha^eWY?bqnj9zY3*4>n9WV&n$PJuN zK4o#2%zkTQK2cvfM+9b!*bZ;n#>Q;QAxs2aQH)4+_c+Y9%ZOj3q1tAyoMJ;*EU$Qr z?}rC1p!CN@6PsJR)7$Y2;%|C)x$#w0fG7Jy=ncJmAr|E`xZx^#Ty7{dc&P;R=`cD_ zpNjjkLiSaN?icnrIhs#5;5v4TSV-K+Txu-lap2#YrsG6N@x^U!lXJ=CO}e_6v+F>t zNRGck!98T4vzSj3x}p2%1IK@INK3zs z?qWG(FS903L+DL}T8^Yphvy0VmIG{4h`6VL*K4ZzHf=uX1f;`PZ<3ZaDT4d#t)Z@J zq;=B9If=_HX^aPr*5s^)-LIvCQFWvv;{F*wcnr-sdv zNa$3!#=Z(<<)q&cB03)R%qZ#k@UJzq$vYi3N4Ydk`Edt4+t>40Zi0WJxtZL^BGcJrrJJ3W;=Vcs z)jEqPZxov{mRG1)9PyC7WT?KlAIkC+;7z0QCI^mXIJEe22UjSx zHkl}YexR^}{{oT3XrPpID%Njy+>FVidQPu$0quWwEBewGW zviuN@6$U>`7bL_eVPD3(nO#<(FG$lR`y@zkqFmGa5&z?=w6wHFcFT~)Icw%Oo_d#x zb2h-nCfFBPny0pX^}3ce(T?B2lThnzQ*K{5lZme?&d=;9hOA?z2yQq`LGBT{Jv2`* zYtBRy1wuETE$39cI@18`fBV_C@07@v;{2L-Mk#~loPTOkVyqhj1L!!sn%rp(%&}x)mL2h|8C=nmA5s}q zQAWb28&iUh494dUCePU@G)uN&#L@B9qlO94At)9jk!zR9URzhHQ&(5R-<66hM11ghUof|70Bb~kjnMm{p?~|tMLV-TTGa~KP_PCVf@opx361Y zip(7Y5_ZCuIuGUuh5-V}7lJoO++4n)>Amd;)5}g*73@%IUo#`y>% zctQ`kzmR`!bZeX752%7uYUsh8J?!=V1IqgR6Hu-!HbmsLKGC1~C|Ayc<$fxx`cqe${8Rk{jB7(doQAPzPk z|1l%PCZXk9S$Q$H9g%Q3W*;$lyI@k$n9o(-`!QI9mTJd9ETjE4hbR~8>{-O+n79lI z|FIBrA858jKsxC}y-evFkp=9@-|W;;(SA*4 z3_H3(5=b}Q5>vjb8I2!-PQC?pB8eAcGmi=`Dt!EM;Si`@hn;M%UFAYcO!BFQ)f~;3iOEEZI|k1(2v=)rCtJ zZBA_~4^u#`k$I&@7NTh8R_CHKsJFKIc;b9Y$XoarnM}rdlkLp3f1#0Oi8~umsJ2|_ zCoNyafa@F<#G4{>p|$s9rjxuif@g zB~M0bR|fu)!;W2W$nBK;A?@UCVRxH6gQ)$>J#!aoboKx56X^;%lDE@am88wuL)PDI zU4VGmU`<|iOcO=QqkLPQtLsSxc=rJ`0ZwfOOHMk1Y=sRe>wynp_72o@Bqx zZ}amc+&Qk;K}Iebj0C!{hcz@2oz6Ah8tV+ya-_c!=oMfsl2R(hy8>`>QX4w(|CXZ^ zrTePf9|KAbPks|uxV^c#)`V|g^Y66~FP*{bo1Y0x5+;hIr!AQ=df!N*Nv(U1@RhSV_+C1lZ5 zZtbXh{b-Qu#t6AS+Yx9&L+W>*#y*+D3^{V85fW zu#ylt7aY-OMfrBaaJ6R(mag|pz+ev`{Y-7@lTQWL$q41KMF&*gtNr%45z#&lezzbz z=Y=Xr{?m;xoQAEv8)NcB7OzwNq=AGc$7QHalz}57-L9d6kZp)WyK;?w3wo3Dy#YA$ zpmxwC@B#-Fk8%BIstKaJ^LWcQ&==4_dF%+NsUP9L(7k4P+|BH6Oh zlpa|K5(36+3u?&>25fvkwzK;&qyx5wO7+`bsC#;XfeJ;x$;W9wgQlC>LOzkXC!MsK zqswg{^D8)f`bH2!@v({~;_be|awB}Xa7zzLgiwYuveT%v-F2>*33%01IX}+lyc8NW z*LbH7isZGiH8eUVGe|U&Cg!gj%SH3ZPuCHutWw*k)Wxt0>251Qd9AIv=E~ z+`nFFr4!|{UDbsNJKV0qb87jW5#9GaUX^tX8Rs!s_3`2{y=a@LdR3KY!ys6bFgJC0-Hs_ksv?#rXEHPmJR|A8_mH!*H^!ZDrE_ zxKJMe`MTF^&-#q!B`fKH>Fj!Or6wS$n8H!2J_SyO<<0%Pm_G#(kD}k|9VVw*KZbsP z2jCqi0Jo`*Nlc{%^fsnu2rH;8mZIqM^p17)&%bE!_pczInr|@CM!h~H7J-KrnAs~*CT9gfCtNgUD;?e zRHhr!P|w%09W`~=J*g0|O6h}UYOBl3o*0pE+hQ(vV_;~>mS%UjP>QIo7&iHnF(JH#$32(gBW)#I%-w;Dy3pHg?qIN>eIQ99Y%WZgK~buQJf6^??v@I zxtfiR4nlq#f9Y2%Z#yjhUe8k9Tx?G<(|?$XP|0CfF3+!pWg8P;b>(ks7ecEwf^_+|v4u+PPndZ;4|1H(idb5-+K$^=$5*cQ z{taFtG>8r`5tuEXBRzJmkxTc|CzK=g8?cUyiA{@7mEU)E^n??%oo&vlvt_m_fM@in zh@E%D`M=gr7-;9t1#D>A^G>&|HzAU|LlMU^_hG^$tkF9R()2I;BD`qjS`2Y$qkPmQ z%_131Hq5xcVc^Pne%#a6-%l;HYn-o&XDINc8oE6&ZX6W7dore5XRv?yZB)yr=S(SQ zNO8N->a7x4>4><3tdgYOfi{^Y166KohLG7b(b^t#k#!%diuRZ9I3>t6+4xlY9I>gq z60oUkalz2h92V5FSJbAIE2DJK#-L4$Kn&G+vW5D0y5UFceyML;NqWh|ceQTMj$7n8 zN7?`@-@Ggc6ZO~I%K}&$P81M%b%d0pwxuZQ`K;;53v=Zl6k5b#6bgtAp;ZNW^nt`; zl#n}g6yPv3_0lNm$jfO22J>1)scuj`BA62qL!$(uSW^!Uv!0WXmZdB*X}qmJ$^)fy zaTaF53I``sm$D602)!`{A#a*}{%P!dGLASVJB`lvs|{pF-0^9w7_7+ipF4f2+)8vf zCUq<4AZ^a6)TcJ>H*oNP^7x#_F*@?7bNiZI9AF9a2so>2@lZC-f$t$$D=5X=$H2lC zKh2B3sJiw-v42ogTfZi(W2rH?xo+7!I9xJi2QN-6W)VGhaN{=b8?3^icrlNlx`i$g zKV9~pS>~#G-yHWG&0dV=FXnY0iC6~jFcun0ouwN!FJ|S871X+Ut9qI>&O$`;N{1~p z9*ty@S{-@W%Z%k*p+>zcYpLj$_v?~CM_Gt3t|K>d298Gp;${1tno2OoF*k`|OZ^fJ z2QGH%1J4%X>6&Qf;fy90`h^N`WK72D1K(&iPa_UbBVc(c-hZ5SVO|CeKd~K(%U$N# za9&vvnTow3C@%Fgc>CAf43ODDaYAgY-2C}V;Ecqu+Yio}Zt$Ia6=;an5L~Khh z`Hx5%oU`osLBaL~!7PdNpCw)tcL$pNF(Zu&m7llk*J#6ZpED{MJB1upUw5%h*N$V+ zGH;z{?2}VMfsGyQOD}9W9W%0Zij6YrJKwgKhw%XR^H=!ewZ1L9^&q4sl=~yY%ka?(%GW{m~qELKNYyv2Hkl;Bbt=Bk-sLfWCfY-#5=PU6M>nU}>gxVfZGGUuT z(#Vgsa8AjY=eXXTN!qnp!7*nLk{)m2^y5c-_D0d^jU)Bm%7b=JCOYjojueOW5!#mg zo;ht9(UFXwco3#%)UFGH|6a8x)}tJ`0bD!NqGDv}!cX&C3FjuGMklO`$yMj7w3(0q zoBH1FW&3)-l2HISY2tK$RDywPU#M`XcC^D|nb#$>*XAPzM$ck>%++h#PX>mxE2(usxz#aSOgrz~EKZ*hB1y3D?FxANfO5fxtNvneg1>iT=N z#=<_i=iQ~$n%wjpr)vZdg3*0HVC1*9saZEqjnt6Qz6z1agZ{DlIx^fXeZbTCVmV`#Cj1|U?QvfxB zRq_iQJdW8TIh(wK>|Z?p9u1zaALeu6bjYNWco8Khs+=XO&Z`j3EvUZP0Abu0zd=g= z-PJuy@n~Oc(ZkBKS8jsC8f?H`J<*FW)UMADebK!Xn{$DUoUg zQ0E~IXE_bAW#CedvBe}5wC`4-2H(t``He)}@K==p>nGV!hb567BJZr56nLC=L2HH_ zb2yH;2t*;#w!YwWiLD8LG;3*Cta!eOP;dU5_kWD}Unk44)`s010qw(_iF!s2*g>bV zbmL+4=>D(M(wCaW;$5|RRM$Sp=dDZ9Lqgh&dspS_8i@~UthH#|NgMa5rs+~d75A>X zRE>Uh>TV9<9wAp6Hnb{JFZ}rr7Thi>!b+-b8`mn13}`S7BE0Ov?WK6klXGxvJR*5g z8s9_lExpJ9C~UgM^cTObny>jBSBF+D)S!#Hy zDj5vltstk9X93e$k&V9ZP=7d?7c8F;ot9fwCnCWiNwP7Nsj30ombkIf(QeF(Ioi^uGwA1cy^U1B>;y#ED;SyY^{S~vTBE@<)y z-ePm9M3cWQFW%%dUMLTKt>NqHsUBQ}>MAru5zO2&1R1wd$ifHTfh-y8o)ra{4UC7` z8~}8X8q&SMqW4oylI62Iv!WW`_G*!oA~Sr?Ox{=3R{kbfyVN|a71c0M+z+s{ zlvd=j>*Ta)FYTtc*BL7UI7Vk3eld_t4a=$p{uW64uj|MEo;O%BBKYOA`|}hU8hiOY zxo@?u2&;&Uy*+niE*5mt`Gi%n=hEz>qM?YH$6_=U>HK%u3f3v5k@9_$O){(b1r+ba z%#9nrM&s^a%vMwQ)wmI+7%guNsorS|fqcLEl+BvY4zM-QTLQtY4wr($o)e@>oAy^H z+u0iIO~h@e{MX+S1}%ZmNlA`LxdStPtv`jrlI{3@^x((4kX!f~ao(WIs`44f%Pf~; zVUI}C&XT!CwQu_M-tb}U7iQ~pBPg75rr!xo+U5BhW!SXDOX z{-;<9bWm%gFNc0mntXe1bU@(%Eu85>xvb@i$Q7YN?iuWj^whJZ=_JlH;=I#{;e zQ6;ZPSbDS!z}v0b(QwAqUaBS2Gds|8P|MAQXcohkZb{$IT z)bkTig^Ti-yg8%3-HAW4*?NBCt}5fipU5?q1Kmy}q=zWvgJa|5sxlo#~Irz7&Y3vF_$!(Dvq@ptkwo+F`Y$X4<&RP}AZhpt} z2}PKoi;&W<@8xODLQHAH_iviE$k7n}3^5nZHozWi<`t&Io)WkhbTHGCe#dV|$P*`y-UeHqJQh=f3CMdD^r*(d-ygjjyOi zp`&sf9B$fYoD4I#5<%r?ZzZ0;2z;!7__+`s_XH|e#2436_ej{$7V(VFeIy|@m&q;q zgS*8hip6BYAnvw)wO-qliTgl{HHqM~@p9;d!~K4Uc_HPwgET*0M`*N_d^Ux|$Nz`8 zw~lJ7d)GzlEl_CjqNQl@;ts_CzkA2H`T>OS-+9c# z2buj@P(M{ptdvZZ`{lozCOG4_yT$S-n)_g-DcIR+xYHuCK zp!&{4K(%NERjx=9t6RCq`^Y6P_l0-NFQG-(qJLF0yur}=`wx4E+C2Ixw0f^PI9c10 zTCQhR!8_+D)l`mE;^W9+ofKNs`=SzVmlhT3N%kWtMy-%gl3UDocXXxy#MUr8n8ix# zXb59tT$u#{yCt7xS=2l?2a80^c~|djo^5u(S4|WiePs0GJ-E=I4PfI&CTz!NNQ{}) zKjLc$*~M_3T%`n7Tjh!Sfdt+1M2Y{6ZoERwdC+?1{L%Msz8DMz{BxybYo6N$@481E zYncwQPU%wf-*;}2iVQxQ(y+GVk|G<%R_-U|&uk0q=*6t3M$5>Q)@ZSNu#sKZEGW#| z?De{JeOu#Z#6`Oc*F>hrzJXaILZt#*Xa&q8`u!l_2Al=Mx&)xxDftyl>O56bpU8C=tV8}5=`ly5EH3UT|=F3z-LqVJB0G_KKi zZAw9gBs%GMJEfc%)9W($qs#yhV{G3g#f5*NQ2| z5|SDM)fN64u1tY%_UQ>_iVKh^+LrTq<~fK@`aPTd#~Jfbr&awo*ZIR!?L$5!RFe&x zI(GC*|9pI}=yiSL4Y0m$zL8-O(dy^Ihi&TC?veKCZtE*;bIG&eDbx_K?&+lzA!*G} zA-+C4*i37B?g#_BAKxfdX+F5?Z8=sGLU&l!LPABp`jI>Ay;p# zLT_*E#l);IJMB7g8cP;FTrig)#EL+E{!0`mjYoq^Y%I;-Q^vMH0)uK){?l zndkfNvH7&rsP2g-Xzmgiu>gxl!jH_D^ zHVvUoC0A+J+h|u-Lrv! z%cY6s!rkQQg4#cfbvk?6BkV>p?SX;d4`^+ilOf$eVT99>9vvMAa)V8sqk*Ey8pw1E ze5qbCDBqavLjEq-^-QdHX1`+RCD!qHEs^GGA$^keC$iXj@A&X~$W*()V$RC$`GB+4 zuNZ;jr=&t>YcJp#0(yFNko2C8h+(X=o%DmR{}{UezdP>|`rmY!-=8f^IBB!pjG=xg zGMk@3ww#;8b}O`*!#8RMc$<`hU`?}nJ+^J_#K9Fnk!Bm`lDe7YGY%d8Ysk?ZEfm!1 zl$&TEo0n+U+QM#mt`~h@`f3g zH`ma@CyXSoT5qL_fvpK&+4>5^&c4qAbPb^A>{}$wGqoNg65tL?11?}yUt3Dd>nV|y z(l0j}?pgzC^ii*q*EY+dih!J6pNiliW#;q&>qRpprsm%P9>+Gmp5C9Xr|Dd#&Vui& z$s3?ZDUZZmvi)8+a^kMy*-UFQ>>Cldx?-*7`qGB|pjHRwwdtDKk&hmH>GTbndBIYC z$-{HDWGQtA5E*ktt7f$;0nf(WkYFO0icby_daR>$+*Agl+U_e}V~1&?I^l#xy|Q0g zTn3Outr&MY*wJp0>E%F{qv{RFNI|RoXhYGy_;@_k(7pf})kL zp_hNLzP&@z=#6N^8XQ7*M)IjdM`jQ0*8BM5c0~$eVH9inyKTl3$0=Gd78LyE^Th*Mh`8(NJ~LH8I~vJthI5e?ET3`=4aQ_Y#@66=sad? zqKt2(+oJC zbRX#-K3NP9shN>V=Bash<f? zoQde1eHq5j|7n1AEUO)T)?VJu8^=t9MYEjIpJr*n-G^xQjPhd#6UW6Pkn65H<3l2W4p_#^u|W9`^Ps3<4Ad2v{r);Z~w%c`j7cT-PA#k~%3 zrwjdL{2;)P1x}G+;5ETvm)otprlZUn*4k#(7m7M3v7@j4l=V~0=N8O**k%9k;Ol>} zV34}!wn1FRWM7_`#=4bF*X#uCLP8N62i(ODy!&WOz{a-7(*1}&&NL{V#P7HsMaL1x zwMG@goIInuC821@P#E}_`<&wi>F&xHfa8dlt-ws~Dr0^Cy=jOAa5h zR#4zVo;gNj+riqB>ixSk>CLo={-!0f!RPhBR+dd`Cc~Ie*F867pJVvzEk#?o2|Ew| z7>2i%4J+=W5MXeb{(S2rF{kNVp$^w}7k<-@KE?5_!N~#qxy-F-rPeo<1v~OF&+SPv zbctY!M>qI&RHUndI1Gt!U;3_DVC_O8=yXGMvTW)Cl$iZNAvt=bqF>ePs;-7FoA!&y zPkN`ifYRUG*(Q%o9Bl!sLQDl+m!lDDr*DR2IIiAHbS2~m>8;x#$84(0%W;crKaD{# zLp`b1<_F$OFRer(lfmqJYD)FkWe)IwoRED-&M=lFX0FbthajT&&K(s#bC0F?w$QO?*R-ha~D6zzJP$bn#j?OI(=iH`G?((jPXspxQvsmg^3u@=>@5Jo#A# z-`wSjp4L-%A?9m>!0o1g(@2-?BrvQ37B6(qb5mB9KR4R@#bX1-tMv9L^f$TCQBpHb zvF6kzzFT}0Pgk1rggHlv(}U7=QPLnyMqhHzv(QuLIMl;)DXg6xnG0^^Eo|o=GT4-0 zz-}D6y=csv7Lb7c!XeEi>`T75Qs$Phh{yV>eN0JD4koawlLsaff&Pnt{qH+n)hMTW zl3M=E9Hn$}uX=!?bC{9*+&F#Cz&T4fwWHnf_vA;b&G?#iCooX zU!`2+qnifzqv0YTSmuL_`dRziH+L7RRtLvwVlp3jPM+t_am_T?_5_KB{(xapw!2c# z&k9^5)SMzTRW($lbUGPr9LCI0i(bAP11S~!AyPM8sq4`rD^a}_#C4t%;kd6AEq5tZrP)q z^JguqBlQ6K&e;r1mnlp2swR&4!E(Gr{Pr+-RR%~uvUR8#sixV*NZb2j&|I|(YxjEd zd+BFLY%;UbI<0~+&uwMleUS9>x6T<*WpH=K(3TDj_q=vqf2eWWZPH`GDZ*V)FD_O6 z5f2X;13X_X`0u?;=JLNj;N zL`bWg?c<<3cOSI$&&Y-4s}-GZJ{E?SiwOhZDYc_tOn&QK;9AF?#={W?oR^HrRqkmZ z{j3l?nSgYOU_-3WYHTQ49UIFBQ()T#Og>Wq$gUP+WSjmfXqTxcUUE1l@sU~bJX(m_ zeWWUgD5aef0}d{T2yfExS!3;Qo)@Ie;d%2v*SndB7(HK3%l&FJpr%Hdy7&zA#^@s%C@in6Y{11hMEX^I>XOYQe-jI~T#6lK6c{QDJDZzH$hl z`LN>cf8V71-#?N{h=Z3TcND$Wrtj-=Yqa#F!Y=Y-19?rl7e*vTqr&Vx2eEl?>WgMb z_Rlb5#kC3Vo5=E?&7AdG)UT>KKJm36JFaHGR>}$c8#yllE$sWb-Ag^MW$)cXm-$^P zMYk@~87_WdE}^^jN}2f*>AJ43B0oJj`E2hsd>+GD=|Cm6M%W|<`csqX2B#m~-JjXN zwPXd-T+INem&(H9_IbJb+JU3G^Ik4;Dar3K@bk+_0-H9wQ2V6gT`sjVeLd(Hbk3vF zew7u5+0p`upAP~O5cD*v5v?2k{nANa0$*BKnz%w_(4{8qSG!%TZ7xfiFM5Zz*-q^R zJzMWhtd(w5#vB%R8k^sMjuifH@QGW7cm7xM?Z&;NCRJw5cqwR9#^F^9$-4VW6@6&( zT-AY!2yTzco3eM_u)u=bsIqHrLz@F;K8$|#P5oUn(VGv|e|k6P-vqeAS~ft87lmxR z(wS>whWmU=`k{cu+Vfdtn+3kKUNR}FV&8>c6Ubi*8`Em+wKOPN+s=O-LrK#(4UkaB zqa`@MH2g0Q2*UQcp8{hfrRE+Ij|XHlhh0D~uE5iK1_oNL0Y|mbAN03|4^e?ndD_Cc z-!0hXw)?(BZrc9kcD7sTST-_z2)wKE-8v&3Q+3@&r?59U_Y4fJ+)xajbF0*X1g8c! z)#7N$RdMF|>7mXCi#`coMPf(KSjzLdaqEkM;KNT{X{^}zgixf%Y=i--5mAndLhDO`8#$hMo+}h6*Tc7Hmj&fu` z(_bh{iPD?S-i94yR7;6OXHW?3}T^O@GnRCYK&d&=@fK z6d{<5_T&?6)7rEy7o19cYEf${q1RG>U--kV*Qcp13J~ag=Brr!W&A~%`hsb!J>(m) zL(OjHhBj?;^;5+O6TS>5;M`&sP5MH2uY3tra<+QO<|O!?;AX6d-zk+f%Wq zAdf9&Pbx%~yScpjf(|ncGV=+D$NSBAygU5oww_sKqsl_woYho)Rm*5)dMC`_=2uwh ztp#^KTeQd+_^ZxDfIG8R{~vBDV47 zm+@y&r#^KzOmtik&XmYySDqV^KkUUhAe(g5s7wdpmKwZz1zf@fq2V0|M?6Q(*~8-@ z@e%3>Ap(NeAkgp3&}^_+JdMgtu|}qGcGi1pbCGFg4Q==YRSa&4Id@2gUuh|)YGUp1 zK5U2*)TcUxo3tFc{X|h{8+uT#?DmgX zSR9vByE99QoqSJ9{e`U*ntrpKv|jj1^r;fP#qzk>_&(=^%i*UZQuZh?g$@pQACnyb zCUEU6S5pr#(esJ$F#3T07hL`ijj-_|37hvVfS=*w?>m}=3c&XCi3#%=*iqBGNdjS= z-~?wHaJ{uIG_h{{t3CKldFC`;d0ZeOGA1)E6WD`LASZseW+t7VNQ{ThY~<%g{g%7( zA6V+p@88$;yfm5pUfJX`ccTL8b3v@Glo+cC3gA2AV;kBs65>NXj^*NrOPBPr`+x!i?FwNdn`8C}SPqxnU9vvU0{vsa)sm_fE-<0LDLps44p_+h zR_3-pR_f*C&30*s$$!goIIM#8e4SApiJuUu7YNhr#Q8_WeNCA*wUaK2!;eXF)GB)al~L*uAQkF?$?|Bb|RitoqoA~qUaQ!PhEM8JC<|-(Tu&B{CjN^>|jyOPY+L^rTJed!O@%Ur;vzfYE%(bxOdU@}TPn`a} z^aP(c^n6M`C~k{)KqI|+qr#f2G&vFuKJxMs4ZO=(Ktd2F1LQJVGgIG|nRb#*;(lUZ zp+l3LW_z3NLipRqxpIDG91~CuGbt<|{Q|SpV^pQ`O-TQ_^JXC57xC@Vy!mI}!IC(f zfJFqBN&PxzvA!;+bls%UDv%!Z<7ne$C4(vIz7qe6cc6^q$h4N4e(}ZD-*>EvNOmNo zy)LqH6Y6u{?e^L@JQ3HUKGV4TP?fG_o25se$tkWI^RVh7p}y!S-{t+xjS6OD1L>14 zI$BdRC&7YMk54G{i1fc}6Ao>CO#Bj~p}}^8X@PbxsUCWv=mnvR(@uPEciX%-GBVeJ z*=5Jy6NP>7Ujh3KT~lqMn%h7rQRT#39~n8i$>-Zw(9#rugBF|weD?B=m*Ws{MGoctzJUNMa>}l4EhrR4Lw$%y;qxA0-ti-tn9j2-MH-sUT$1fKh-%kj+K>Iw2y z>dW)B~9`RRj+uQ=W@0Kx1hyJtpn zNpdMQqa2>WpgHPd+POD^1lIN{!btEo@6DjVfbGz@*W7c&Jdpdkod&9(4pQ6GG ziQauT`|o154qaB?2BZmcBQm)}S@O#O8{rw}~8JXQ?iCE08YO#X2HGT=j>rELTTy3kRmLxZ{5bZnkd1%kOy<_wG z$1{hOzCK=7wBOlgDXFbJBJLQPd#wOpGa@wGVG@Yc0XQ36NBuYjcr%7-HSF&tY$+VA z(-uKZc>6QhBvpo+_d(zk6UyG^egURGIeSLQInBDadh9cVw$)Y&Y3v{F5RUm&`;$7% z2aBy;wIT?2FE(~okLRT!74rQE!}6D1oPxL|H*Ou85hL1hY-F`dG;7`Z2=aoRY*-_E z7R=P6-OA7|;t9{4Gyf{_77`xAtcP+{hcvetj=%5Y)M!kX%y0}*d3EY^tery5^(+1+ zXUqNN(PyD&c48rTHyJ79vKn68JYjS9a)>y4&=g93$(YK`U||uWuwug9D3q6lTz9ao zF?`aey%KTY$oVA(3{Bajg5sQ>xXlMP~gMI394`rmf~vIRaIeYjmI{uee$*s1ycZ#X!q z%ymyh&c?tlI&I4tgdO9>Hr~?y6oXl=xbJg5X$l{4t||=gH4^wsckAY{s34`%!8g^S z&yrEF&A-kmMVO#e`CGydcXV9Fs@BB!$W6^F+H<k*#b{z7&hvg|#=^_M z=toncaDvqVT&8LG+cmAeY5jM;3t9F3-0=b+V2Z`!JWliV)go1z?Y8MuNhys8^Rtru z`22KL8dE;tlivdcRRO)J!3zE#XGZD}?u|D)B*k=^WgH;=l2j)P1)055 z-sLq-E(ZZSTFk(k?lsMI0gd}kAMQwQ^(Miu!llYbY*q-=4pV9?hmC2l`Q->4p2JhQoY(YG9+P=~>j~IzEO@33x3rlV zy1Nz}FqRFYT$B3bMIU>dI#q5tqyGV3V05@CCY-hOmV%|AGa<&KghkRmVb^bls4_ae zi%1?Ou}4>fwLI479%aZ@YH|%|4Ed^A!3!*D4Rf%9UhH#cmAjd8zw;T9dR=eu$m3h2 zhmqGuowOL&O!2#Kgf9kdnj6`XOUa&zYb-tmEv2r0-<-^fozx=40>Lvku38 zhx#kwrAHnMN_eDXs||2ON<59bb1yd-!H^4_4t!q>*lw%(NvKk?-B&)|+#F}?PeZ{q zD1|bOXml68L*)}wg#)S%ZgY$)-`bp7hs&l1>BrdMzm;o?i znv=XlYJA8<9`gE|50*rVAyu^HG+pzn9c`tqZEu zlKX@P6YMOeEwQ5)v9FjL`I2Hc^NMH}pHp3ig@z-Q2D?D7*7twt@fz4s5)m*?bFmAg zi2o>_mKFK*TF7>e`B!w4Ym5^|Vp8eA9j_1nxUdLh?9K|iy>vw;9!5&T28sz8ps;V`Qa=@v%1$_+7S@O7|g+9!ws#-ku7Ax;3yXlK> zY8U?VbFHI2Ip8uf^*Bj%K~@38eCSK0oHM73|Ay6Si0e|}W}jAQ%%VO$VQkE<6&bz4 zF3}zkJzrtE^W^RvU38#9zBI+xHtm@u>&`OBQhg_>p?6^Y+^Q)HS=IVDF^5~t>;Aa3 zzzpLi(8gCBC`(;}tt4AR%BaCJKf4uUmFpKcK=_i#uf0UP8nHYyq~BoC`mso9Op6lE z?#iw5DxDod&RM7ah;z)u!AyOj%)s^&&rDLPmkONyqroc$^?!5I7j2!gLJr?VU_`sR z|8djVVL|G^<3QSyEG9%v$RsG9lAk2YU*$*kZ5!YWPRSsYCK?AR5b0S4Uaj z%~Qt@J+V6>L&8Bf)}@`Ut(%fVRo(HKVBlWPwCK=K^1SeKL3b7qQPPKhx2`%}&JsUXE-?Pccbr?=w?=UDMf zD^AMAC3G*@z>kP)KWKG4b`5!MVCr>0c$d-SoM}a}Mt2VmhM;Y>!ZY)4+%<)3db4nY zm=)*0@1&%Gh!2_w+hm*_o~2Bs2)bp|j5YIqqBYx}%SU72HyDctWl|w9ev5}?v?OG)!TNFG=irj*$%fCw@4%%*z9wHXdRuanqa)?XhqaU&eHfM^ z+ksc`@!(YMN?0posYX;18U%4RH%Q7+xMlXYy?j(4ob&u@DJPhF+02LEka?&rQQrTN zgo=6rD;ROXR!_)a*rR#)$KK=bJBb-;BR)4<4s_6XtYdt7WYyuy76R6oV#HA~;yRZQ z+G6smbhY$Q%T9De)EQ1KD`+@o6ZC=kJGX>t;5>cLu5yh?`v{x1_9#R55G`t4KJ_;L zpQv5GuJ14%{S9Dspdk`)B0=SAEV;SlFFBhks8P?k*rs>jf@VnyZ7M+IH7F{#?XkR_ z3i8*fU=3MB8angxFVTKy80Aykb84@nt3bDkC~?0KhP9inP|SYH$XBmEKp}wRg#hQd z3G>-4hoX|a@bLdJx12^%g&Yzqy+;ogTJFx=SayBAup{|xl7<)0tE%x65tDBSZ&b7R zE|AVXna%sAfoFy`6x>g!TKcJ69nUk;B>zHjcre_vnPo}0!nm+!8XN8T1^ZJ~Q_S&u zfM?&y%sEvys9i|5Znsr&S1L@)MdvPc(4T7mw&9kZ5h~dNttMtSg#$^Vq-&`(Jhlbf zeAobQjRfMSMrxZRm3qjgoDtb%Qk8?7>}nTO0b<v6a{0&0#Ca_H^XG zS|$F|`TO!sM;X#tGb>=B+1?LT2uOzuOE8S(6#x%2hfEG+n;VSkIdki}G6#?BL> zl#*RkidHrDL^Cg)Uq)HFen*_cM<|K@1F;x%c-K^*`|#)Fkr8C2o1v}c?u7XCc;EuWoBrqfvZvxy%fs@xCB{0fcH?j>lNXF4%98~UUNh%Ps!e_hg}&jEwb zLCm?y43;~gZv`nrm5n?ROmFl()2D=OAp_Yz8YgBa0&4(uWa^?Yr+N-CrnS&$HTB9Z zwzQ}W*ry5$VZ(2bDl#g*CL&VvP}?w9o~LF(Jks9QS9EV;V;xgpTxbt}EhHp1VTvK3 z?v$mN;gdRDzMppc(|3Q21dIyQ%a)Haj|C8Q8qsRS!s)^Mss>-YnN+G+HxFv}M@H+# zj6}vFv%?ITvpH*N*>}sP2a~YgS<(r6?z8-Ed%wFU+>~+F=e^?E)HL>1#b+V#cz2-A zazdxbVl_8UXr%g#3u!^lg-C9O-jDB@zHD|mO<;Djh@V~my7+%+x0vI20{aQKGo+oP zSnQ~2DNs&{CMM9QMj;2qRMQN%g$o9>`*HI* z6&#e)ftObM1&Nt`- z+`N{@D6B~JXP@Tvwb>RodvvRWy_=L6wLd;0lLfx^oV?*?(B^fusq@`W#jvf4=x_zl zop{|F8<4X5|JpIE*ZHd2~Q8`5ey_kKuEDtuA`{U!cNG4iT(`R0#g{>Pt4tQ`Ky zgQZ=Y#iJefM-oWXPu`a60#h-P#@oVAOvbE-mz1Z*x5t;^0bkdC5#;|F=5jE*{G5|nFJWJrx+fn30 zV!LucDFi*;V;GPOlJWmlbYUqd4C7ZdvNtdO8T)|S(`f!i-}~LL+UV!w(QSK$EQA-2 z&C2!Rvc`z8{1EW-vRa3SfhR5ielWqSxg-fr^*zw8oUc&Ahz8AGYWd}wEeDxBliY3d z%g#!g-(TE{r4+#U_%y{73*~Rb$&SLPHRUO}^o3xb7b10e)wOHAt=zOupMCh1xtHEc z@SCPef8AAw{x8!Ls>Hz?YvacDC4NYrj>>l<{T2RO7Ka&*S7Nl3D`ESyNZOeh2+0W3 z#8cXf%CkS|3u%DbOOodv_w(BHrh__m=h);?$EWFYCZd@4&YKg>AwSK%=Jlq^eC_5P zL7y3C3)-yAt4v*zC`U@_TcbXu#wKQjR`fjDyZ!(j>q=feg6&Whc9{Mg zpXP_SK;B#Dq|63IY!aEL*1ak*t07jHx?JUih*!JX;q)l#ak5l9u!Q-iMaikgQ8G=c z@~r(LY#w97;qF*XbN3VzO?${8e5#7Pvh399`;k7b1vD(#P{D}$_0hfKmFQvYwD5M< z=M&{aH|+^j+`RsoQdPZ(3;ui|V=Fl}Sk?7Mv|JWJct78R6I_YkZaZhlM%ZfXY$IPq z+xHd25V5*uL43TQT_19^k0ER%wuZM!GPH#@-kwXx35}MB_z;=~q-|npbV=Jr>1PZV z;~&X>p*O+(7UQLzH}j?|yVT`#SZeOIGjF135i3exreEC%LQ2vq+vCwzs-7{bQ1!X1 zcI;a9)BP_O!1zWImLf=Py(m7sN0h`aW#nOP!@y|D5`Me0woF82W*WuA+2WDWzCxO= zrX5c)&cXG0eEbtxp+}oaFDLtopd5ti#5EO>%a#W1I>SC74lf*`E~ zt;;}}26!`Dla}(UJO1514)lcPt4d?0vr&prn(1*#cDxzS*T;N7^~YQz|EB02O3F6t zc&q5mrh7Qg>6IMX9^^pM@UkzsR@OxVeD?J5LZNG?lS_E;%M=DyQTtX+S<1TC1>fpG z>0AJYOYaLPT`Y-OFOe<_M5qA!;GfN{>*RUS*JGbbEe zeWOIus}cVt2|LR;Hz6)TQJT!|Iom#E+KwDXSctwsTv6^)y} z)`VaklXyh(*%fP%3lDjqz+ThsX6^G4;{qWUGwWj;Dg`6>a}Vezz5n^4_s7FJm!0pa zSyuMIvp5HuVeh?%2S8e|%RnKABZ`3`yq6 z`EY-ROIStzb)YoY7DNh^X%rjASVr?ME0^ni9R zP0?J}`V+D1w5=U>dpw&HTA*Ip0DRZ#Or zLF0-xjR1^+K*~B&i0IHLxA(zd_mhHfEQas|HZoa?@cb9oVip|BPoWx=xI)Lr5Sz9^Q&QiV$#B}mLjzTXN;@E zqXF-@4e_C8`?nlvD{;OyFWChW>*C%g-45_5FTm!w)5=pQb;YDHD4wsExb&h)a6=-y zl+Vpr5>Vo1kS4j#cC;9ZP|Itvb-@08$NEbt)Anc6N~5(GSY)e|$`rbG$Ad26KdiZP z_X}<=r@yBPbzA<2!tOEHWtbFM=ozK!E=tB!6>Y@9D0H`nC%kjnCD5sK5)|V+|kcXp & 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 z z_tG!DeAf+5y>#hYF28*qWjSeT-x}s&`6s72dfO~(d`17l4#hQoliR3HOaPf(Z|wIC zH4c2^R-Eb)!gCM@2;hyNE&m8sxzoOBcY#$bHUQI?eW&)R#v=W3UH#+-HBwlnMxn8% zup{@zOq;pNwFOepOxR$prG_>xCeSx4*b^Ip>TFn@P+@Hcb1a%k(woe$jJ2iL+B-4M-9g#?d6}DY1C6Q)AmiEglUDo)dyc)YZqHC{9Nh4l9;2f} zrTkJn_bFOY^_1_^t6!YPSX)@lOl7(q2b;P;pY(FM8FSKeo-1LC-v1VM7n){*?59|y0Yv|~UL!De6Y1{p*gM-*X&E|*c zc0gaQ9L*Kp(gx|u-CCTb7D<#EPgNOl8X9CEJpvv^jxcI491vDSQ@WF!D{<)(<}~AD zaB*VU<4HOD_8OXFBftb>+uZEw3V5j=E=h4MVptTcM95bxo6J>s*1QrpR9PN{WVSkf zadSd8JuUj$&3?UN=YFijfGi#y#vXpN;JGkUcv1$_t*5k`<_b9LxfjJd1U0rj*-hv2 z^$pJTiZ|!utM*N=Lj1$gxPQmp0XtG>1wBk^!Vh* zDJ7uwTDxM7`cW*?Ylp_CB_(cz1XKOyC?YIQ0uylF%tXhaqXY;&j8#|kc4_9PEn~1` z<>ZO8BQN8Rc}zv*s7OiHyWJDRHYMeTZMtN@abDHJ)yGlPM&g@-<<{6qjA!@*4p`bE z$jr&%PFUFX``Gg$KL$(M;z%tbc2dTC(YG9$9xjDU>ToU5=s9VT*dNZ&`yqOWR{nzx zkNr0D*N4il0Z}Gyy5nRbElN<=(zud}aK#xi*R;C|BG-HDmR{LW=f=J#W7{Qr=8@JOfs zudOETDC(rWHE8L=4;kA zd^?PMn^o?!dU$U1NYi4EQ;$Sc2O8=y4MdFUE)Xp<2I{k%;asJ^rW=HHgj=Q_EgLV6 z^n)pd9hbW&UYLMY->=sE%t;7uZfJ}U?|Y3F4m&fcy11gJRFePd1q0$i5(^3GD-^xM zM7DFiT6+>7p8$kE`?EZ!{kBSqnbS1+jeHX5u{lmuXPLYs@1xXbGcq*Bih0P3;aFDl z&x$e{mEy~UC4q0J)D7FGLpMK5y9(CE$LLs*`_U0>yS8&0E+)m}P>A=Wi0McY`Td${ zIYXjsjSdAo=4wZ9)+pGU-*jShyUs+)lk?uXxTo5V^X+h7I1w1oS zG77g(NT*;_lu)xFl)F*I&4nkPt?X;Bjyybl;Cn?!Ez4)>qU;e{T){pVXiy4$v*(bq z{6KX|=UAnGwYO&%coG*dJ;w=+P~FnwkUeZ|Ztd~hQ;pG{WBK#RYm>wHnEITVw3w(K z_lsP;qLAk|K%AW0?V1oOdZ6^B`x+|V0dd4Z@l>>@q6);Y6qA=e9A>|&6a3u=xz5-i zhXD#1xSD!C;7--WBl{%C?1D&cW8w3hC%tN3f1N ztqW_qhJb%i*UppU%7(fy!++e^btOz`+E!8(nr>^Z<;3Wf{C>mB_hUYWprUf;GcQ*O zAbqF*p@m%SNY=fFBz<>%HlHsL_~gR{!JL$n2vz(x@qElCLzFixLF}~0h`R0{7M_W| ziA!31u8r&&MN-rC4MR#&tn^JGbv|rd3&X&)+WoqRhGCx4hphl$#G$qC2FzL4D8K=t zJgMI0cDRqw3-kZ?lB9w2HC{!?*)OE~uW#eWZPJS;dcGK|CvyUCmma-_p z*pB$ftU9d83vpB1_H-w$i_d7qj;0}DOu^pd)GA=P`AkzD=%h4& zoG$!A`z(&VMy2IG*I@j8UnfLs*C#NAlbd+e#1T1}+ofD1@iN6xdBX0tpyu&x+Xug< z*#1tWOYU%0I7?cbj(gr=+ z$HZ}7U6+QwyWIBG$p)oV25UTZ1`vK|>KxC(hq|d~mZwke??S7kK)ced4-nXE3nzvh zu92FCqVYbzB=1>V`fpa}gXziP@ZFw)(%)G6C;uUEupo_Q9oS~WNZs0$P zM&0=Qh*#wW-#0s`u_EXGkL}l_%q=M{O~Ep^b~#i^NOYLi)=F{P`xvamsAf^zsM_}8heb?m4SW4QK-W|nD8iiK@j zF=KnU@WMk`aGH};WD8qki1`%|tI*|ikV*JfDRI|Lg>^`lsTJClzs*Y8C{e<}MjOAJ z(%;HT)^@&ZR^c;0-H)qIf%)VU--G2#$tG|U8-2Fe*)%%98?hqtcEvklZa*uW$-ArO z^ul#O!aSWiwVPy2t<~`sW=8;hOino3TF-s%XTseyyd6_QR+~ZZm=rmwNTI>C=xPyo z6zM)*{Jg5E+T8yMRdf9Z{*atkVt00&R(Ul%bV)5<<|b;^ zB~r)%KUlzTH`qjL(OWcRo3RgulNVH2NP2z}Uzn7CQh5jIxS8O&m(uc*Hy&+_xPkvHTlG^f^|Ko@8>}$fdN$-N$HOdweFm#pbQFf%F;Y7YX%5Bqylck$dUur&+7WR1^{)o%h# zLUnAPFA6%6v`FvR4<=7Soq^2{`G2LXN#1vCAmU3qHeb))Y)uOl)rqR^NW6EkkF$RK z!2bH= z)Vj|&{+De%fm4vqW7I;cf@9G3ZdA81dD0GIcEbZAph)zMY=2sb+Qv^4kG>_c0sLL5 z9RvId$vERq_D1jXk~_xo)Rl{T=|Ee2Y(EzcLCV^(p-p{(Z%`Xi<$Wys1F! z(e>Q4kTJz2T@9ehoQ+%D6+C#xw)8^3n5wMvWzq=}{fK}gTu4-<4_{u1l2lJw$;Xu4 zY8(K+T;@?jN;Jn79~oW=Sq;}Eh90EXjBEQxTvwg%4KM<^ncAk?LocU~#>F(|hI-ER z;G++CFQ>cN6;q0PM)JQnz{Fp#(Lku*X0qk-uH1K79#Z}@?VeZqq<@`)HAai7a%~x? z3UG)@D$o#0Rw-2!{Y0e=|25WdF6(lEx7L`B2nrZqSPV0Nzo6_1TkEc^SSUrG-=9^# zC}8s~$LNj`U3a#M7Y$NU(_x_Zdkr(=ZMIhf?b3EH($BiHhXMv{>m(TD7vj>ax08N6 zqXfNZcKMR7t~HD*^ky5QQ&*Ukadj&JBKQ1pW-j=CSD>ZJ{WW=uwg=1$9bCR{;M<1C zjQ+opRnvLKx+4jdhq6es^7|{zYE*v~a7N|ksEw;?rkZ3SNN#z-lK@B(xDaCxFC--) ze;E~XT^NcQ)BFu!G>R2Xz)~u+;YZuODvdH(ifgp!im^*4T zt|ZAJX)iS6d=pFEBlfw}!opA4~ibGEfPg4r4K_jt%^-+%|gJR8RXO z_osKKx$4;q^0GW7hY$B>Nv@IG9t?PJv?dWgFE>{lI|_7`@0$`aNp8$(Do2Fhv% zs^EUy=~42TqN0yas9ge=^KJj0of$*H@$CLm40yx%%I(3B66?!TFISJ_Ae$YsWS8kx zfPMq*1ABV5`bKw)SQlZyt_y~Z5M)7216+tf+!)!IrPILDF4va32VN|_s=XG=<6L{l z9Eg}^p>cKmyH6h{rH28f034;kt1!b$ESCS^d*3YmO!J=|*_PmTS=(@(l{q>-FA}95 zlQ%;Xb-@|;ooGSoMn~s zOz8v!dM&KRI=-jeosPy8BaeMZT$l(x z2Cz4<5=J!s1rr#bP5>jQ4K5X@`BZw(X$Nc9eJy5x;TyH0MCyEPy%CB`w3-vd&O}e`6XxWl<~`VOBu_d1pnRh z{19La6bEJOamUZVRtFbWvX>K$FF&2+ed$(!qsGSiZ9%3AAuDz8r)lo!((q7UHr2g& zVmR-5JL>%BP^m5J!U5zTqo~3#+LOwmZaKgQ5~1&YQenfJz$bJ-W?yESou_A58dcd` zkPzierzD1h(pJ~9FoFwhRO4c|XdK(Tx^EMee>4`=(m~maHCc!yqt9F=svFEikezSj zLrg_myXl=W4;K6NyF9mD4!_&I)ntKoh2U0}2^*t1I!sMtcLK<2x_nE3S+yssg?SX! z@=qKX;a{sh73Ve&XcPe=@3#luS&^d-nHJ||qH9%uOsIG=^0XW2RrGg?&ouaY(Ve2O ztlNP|!>DFJ(B`WHJ7Yk8QfJ>R0|q=GRw*jc8e#T{iHU+`MaA1+99M3dnQSh`Zk3ir z057c3M#{`|Dit zPye?{)c<0&|9l@E{Kk(=E#c2#Qo<_prT7wq#zqrN!;Tqvi&dGnKkputu&@Zvg0VO9FV{t7Z=H7~m)gr6<2^dyh zw|Z8rPvEt=TIhEL+8F`Wf95{k47Uhy8b*s#U1{mrWSd}9xRr;GD$H^v1qG$79!H;4 zN%Be?r^Aj9q*%JGF}&E8k)0hr+FqyV>zeXG1V5}N_7TVd(23@5S`7R|^M5?vLd5rT zl#O$${pISu`TuV3%Xi?N99yt;)0RwM)6e0Csn!KGRP)5z)&OcvaPg8dZ?G;eaPFSh zY?IgIU3b%{rt8ubb+5B*<_!eP%!?d^$#OpaIRa(Bl6dBesUM*y;yjh%eu;?%`ESf8 z+N(_#j5M!KAiEW^vNE5QG{7E%1;8f!|OVwG?9*h%ElmC zo!I+%!qTJW&+c)A(2|RRx{%EX`lFsKXm|JprLaRe5L~i3+p2OWFhpvP6m=#O$nT82 zAcm=z_@y4ZYHc|ySFk5o!*3$4vK;@p_%7vQ83A?AmgHOmBlHbR!jtPWP$rNZ$W;-V zs|v4-%?Q7%*bxCA-G9oqP!Fo@8`_@x`;XYW;EG}qrkT9fqA~MIU9?y;e zFaAkH<+(sLc_>#$^k8VGCrEb3cja?X7vjyT!8ydg$ThsRLFN%GYb8Q!!+&jIj(lC+ z*p;L`1+oW0V8(2UZ+~Ng2I#O--FNFt{QnOk{vSTl|F@+q&uw-FWMPx``+vTE?z5id z`tBQv&)-{<{Et{CH(m|N1b4K zeM-8gx-Qih7faYn6lf`g(WkbpW0R2fEnIu_3z%zBOEHackMU5j zJ7IwBR6g7gujHX~lJO;CegZAtd2_E|cbjsYZ zw(fS(oq%{>v}xLO=a60O7e@nIly(~Y@kBc#9Iou|KUEYVQG?y+;0^-I|S(R}u> ztnPMItVNX7;#aFPlckZG-RdK1@GImew|Sf#00t z1p&eqrLKvo2BZ@i>4d8P7>;};KiVHD>B6ThE&X{xM z{YI=jgpTPLR^i5|v>m8zu{Y%`3H$Yh!RZlvA^FQ3j%J-y%vf@S-+(_H^p#g3cy-jJ z9?U`@umOkXelljjE#|I>klb4yAc415oP9=9Wc>$*kY4I}VH9>p;`hH|ivW3wRwXx! zrF3dvOlW-<@cj&BO|Ar<-^|^5Nxzw&Vkg_W+wX%uOtDq>O~Q&Tt5C2%oNb*cwC@$q z7M{`HMWmNw<0Ncm^^MHHtF6~qtwFOn!+8!0YBe=6#V)wa9BS5e1Q58FVq;sT(wV-m z@w@J}-}IgRw1da|onPi#L?)T^_p>X}1+xQPQ-9fH`;PUxnrmqP@IzHtWI~u zqu26ak4r4KDLw7bN-kD4ps1)*Of442n44pIEwZyu2NuGwH$5i!I&Uf8=6mEBSJ>BL zUR6K+K3(B&eyQS%EIUQVW)$|(-nW#lIIL5*!XPv)x~Gf6oTS$jE*w%aA$uJsHGtxL zxUd;$Qo4>SBe46|IEdHt8fHv;i{o574yO6onX5dI%W)Fk_%EYHDld15>rdCDOj*Y9 zgv&+}Ik*G|4bsRC!{YSK8+fOg?+I8EXP^{dRhs-^=EtJ&ToYSd(&n=_qrlplw~Wk? z;^-*@S}w=b&gqToBk1r@^lxkQXacI?>5=#_Ld@)*Hc;)r=EQ`-6L2<;7kpx|DCd?a zf9GbN@XUIRlHL_>b{&@$p~M-_7+kczzRyk0#*_g2;rLq{E(iU~*@=9Y1x5eg+If)8Wak) z&YXdBX)O^X=$o+>{hG;Tz4tuNBR*bVXO*$GM*uk;X>MUltT@B^+<+4Q>WO&F^Ocaw zqc`-A=Co)1v*Z}w6BBhcnqRG7ZQZfV8|_dYPE8K*m(DkXs~9ycj^y|C6(Q#D^E@ZJO^H3M{Fva& z!H1W6kaPBvBS6Afn8^-CzS_T+SlPGs3C}!inu4K1<-+uL^2|y>z~F$`bE4Cx+6{HD zO8u5~+n)MnGX1?)9jt^MnjSdR0?^WMkp4!XRiR<;k?{Uyf$@U@uN77YJnM;U;=qF} zWN)M7%gWtX#qCCgvnT_#6mTTKv$gS}8(cu+9#MYcq@I_lkJfRVf@mK zRBnvge^*e>-s>KnJ5kH6^=7`albdH*RiKEIsrp&GZ5(~h;O7N~mJ7)yR7Z#v>vrdz zIk()>&t%H{P!Q`wS6$+7=Kj=H39%#TWM^jk_YaMhOT4J0W|<$W=NOoFR!~Dz*Nz%n z>RMb$qybqWMt-9|v!!t4Y|OWQgb5YmMAaR)S3d1G{9g8cQlu!2OAtxX%AxtOAxl=P=oXz+sZU)|eHu(JtPI#TH|2ns;4Y+``8 zmn{pr*B#^a@{+!NdbKQ2aWiZd#!;WqeQuzwUu2W{U1x^5&gwVA#%uE{q1))RL3VRk z$fDB>EJea*MzEYbiUQ7*`K5?R<=5MKD*t;aO~)5g8DV|HZLfQ*v~r`QBeJTX3nFxw zwCf&-ED5|CTEdA+@0vWum=Fn#lY4vNhD;ly3oAcl3)vdNgI2BXB&2o`gSi_kT@Z~m z*QMO$HaPE#*B_2<%fU;3ZwA+1?qHUWr@fh}SJl13zoz;9vv(Pn)5hMD{N3b~y#o7o zpBO!>^WEPRO#wD2gz7H*=|lIwXk&Bw1$d^KZQ&Bt-x;7Puc&m#avm&R^mxSF(-Z$+ z^iyQ$l!=KDrs=lXjw*>uUTrn4o`%$ig7W58kQR$R%K(GxWc*Oz3ducnMn83i2cQxH zIvmG`8{LjbyW=d^&yH$&Ztv&!5=*+?9u~P5F`wI&-oD9PZF~Ep#{QlnR#W``_U)ST zjQIchkGp550Nu-(zok@qydYdZY-U|q6G4jadyJI2JW>5uX%U|)Dm3RmL9eS_>ipaK72((N~2cAv3B!suL<2p*1(BM+*1n7i9|B8v90k- zEU2LQz;s-(Vt|6Ae1X`{3=aoqXX~t$u)XMO#^l_p{e=ds8ZH3}0%uK5O;c0AfAuuB zrCeUSX4G0^TkI0?d1}p&cqcfDwVjCBj4rr9 zTV8A&{@)PKZcPFheEFW& z42yMfozC_SBJi&I>G1cf!%rklCj2#;Mzwh+1A$f#{Zy~K({n)3p0VC1`}WLIe;gR> zyiqTiYtei#`gGXfN`cp^z+6-qdZm$RWxRjCy+Sgv3^D!n|qr_WBEBd5Aa&0xY)+51MWR zH+iymLxJ5IhY{g`a;Qi{zjh1(0df}K=kkS@=8=_hkKPrSc08|y<2Z~AsN zkWtNO(I%Oe*xhyZ$UlF#dMm@54o)wa17}`qz|@>BDrZ{8r6p znp32x>mK(`-xw=ECpqs|Rw9Cz$4CPv-Dvya3OYtdS7Yh#7M8iTj&&9}iLugE>!yD8czX;dP+{AA{eza)Q7S{QD_!Jb z3RW6mz)VF9PmnA_=6>MDl(LQMdl2iw0>kQC`;SxlN6&-75{?O3Q~FAJI~_b?<3Igf z>e=p6i^g-uL7S6iProNovm@fM+7FTLW)C$SB8@Rc@&op?^w{~ggEUto<=96NCo|3Z zX91FAlCi7KDvK5n#xEpqI*V(KPjxdk43uav1fbcHG2a~HJho#U)o9gDsWZh#2C^u@ z^W5AmWBV5ucJA;l4QSTCmo{NO52EE35IL&{MEwTSe=qqrgTTqut-0Cp{XqZKX&gzl zvha}GvL%yVV4@UM=@TDbzQ}7I;C%6C#@bS-S5^D3bw|=8Gc%Tjz%PDj_|3IEm8e?O zxDh;bZ`DF2gosdR$wG)&`}FSWyrSoU0E!F8=n)-J7^Is-K8?8WB(gV5VWvKWpBPL{ zdwq-@N=3YS3iTjjlrVFg2i`tI$@xu7flEP|N*TY*>{UifF>c4;4>ieERBxh-eKwGQ8uJ-^5S~X=n@+ncnl`pCKTh4Xa=Ow6XIr__a>z z>NPcIy4S1ad8rSuzoFkrKV!#9Eid13v{}z9Ir&=4&S)!m?hUER+8lz=y@gZT&QE6D zRb&K&x8&yw4jBr-aUW%g1*1>gxc8q{TStqymgVlO2@NHCjct4T<0^Vw=ob+Po;cPVQg+8XC_Zbi;?T6raR6nCy`=# zj0JEW>!VOCkB%R2E0KXN9bP*P2OKmL5mawl8ycOuwaG|Yftr@;_omP2c-Ixt>)Pe5 z12rjKJ+7twwODhULqunoUEAICp0H>lCY@8jsD|_z$Ja>{E778uSSJ9<~ zcpWJyX&OA8@62xGmB4XrS84$xFJeEb-4>|>b{ot&wB7C~f334;KG;~YG4SV#C2jRx4tQDlF52u;Unul|q-(~_(| z@mx^aJyVYJI@u zNP!`?mZ(LkD?dAg9On+_l5oVcwyKYv#J~P;dddI#?El%py(TEtuA>^jXSn#w^I zETCI+{t`Z|&-IS%%(+q_&os zIU4-z(N-t^?N0t4i~mjE#-<^Zi=cLHXP zE7M_=r6Yc#k*fiWB%E~i`{8u?IxaryS}14VO*wFr?1K?h(fk+X@QB`j%A&k>W4}%< z8u;^Ge$Q?Z)XvfTuIcmIf^Xhl^OUWkd6Y)aOfaYO_eW#U20q=9Nz`=GMd5EVV#%dU z$|18RgZB`>ozQK1@iI|{jqoj#I52G9dUUi!Y>4Lv3jq4*xR3*G1+P%S732Fvb#bB( zKC|EY+gBY2@?n7!O%&F?M@{)+z_VvhA6gEw{+4nvk-mEcbLWSb7MXr+o<1wlKMDuF zD~E9I={s~^aMV(taoBsLCTES&hHFP^U~hPyTu4-fEl!;8TX-md+0P#gS#HL@N0xs) zbRX>)@7VF(M4O(U+c_ZY8$(!bmh=^EF3jJHMH)!^%yU*J5&`c=7$%--Z%P%Fm7(v) z0P?kyL)JC*Lflmk`JTj6J5<8Ee5x^Abzeio=as!gw*{ zPRrQ~Tl&A3zCF33Mh9U|(A?3T>75}s4-Dox)YR=`a{Nyh2`^KQQePymX#LhFz59{> z{H6v{pxdS-(cuH~z*p^0KD1e1c}MO4<#AWdOegWwR6Jyyp-liQjZll0WNSTdHc+!% z9>4-*ceK(c^Bb7zCY`$c<63ql-s|`rECttM(-{=3=xWP(?aqY~`&!}6HpCt!0&j>P zMPfGoz2rI8@T9m9G}m$)NB^9K_VAo$n|)33qzg<+=Lor~lFi(iiEZH9s~D3OxTwW* z+Zq|x?`^R6UMyXM0#vof=?=JO@c7rPUbj(-2d zViKt`a|&rGk7G;&w(Q787Yf~?+cVR_0>NIv$=f(?$%&@h;ct5sq65_047%62OyCIR zWM}GRbUt`)BF|c~8O6{1=&~LhBZ7U)YL!8c?r@68li~uH1Vz|YG?Khs{3!7*8@DvN zla!!a`TL^P-){VWFWq$7O1mQ2d`Dw#h|@Rc4IZ0A6&dM`XKKT(_>4G^KCmRc7-dX0 zd9oa5Bw$4}pQ!7d#$}s6wruKfqOU>MoF$WvLd8%X#v`bzVC`*a#i_nPzI^pC0qfFE zzG0(xbW8YU&R)4Z$g(c(wLt_VdtrUH#8XL5C3T)-8lg!q+}d2u zR0T-tvjuISrWVEZZcIL{YnZBZdHB%E>b8H4O~6Bz3{VQcXVV^fU3-9gACt2p^+HMP zX=H`@-H-s#xdrfZv_5x<c`E;6;j^x^slL zVNFp}fHT^V!~n^6Sotcwf$TS-HdTbqEjcg}H_vs9yy7*zAJx22DF?49V6PUIWuu#Q zur6J&4OOY#zwT#Pe%G$%WgojG8`IKUqaQS78sl~-fb^SAA2p|#hb#;H5|bCQwwt3d zI#zwr*zYG0@pR|b9jh*zmG}F0RKjFCCVI1T>LOu30+^wB+&~^r&3!UBoSLLy)%W)d zWX&K<`fi8?&cOZuY419Nn!wh!JKif+SY$y20YL1e%@d8wN@X0&q+0Dl%ApPmJ zA}{t=^#fGV=Q1-vnk=RYG?>%ix4(|YIt!BB(Szuay>$WbdpE)6cDmo5!PL~)Ufxz0 zsEilFy{+B9yt+V**@s?=WE>xy<*DF8sqyQD_c&tUL0NxX2rn0vS=|#iFD4gq!AN|= z-*-92FxhMzr4}q*gNGb|yv18``~viS^j$K=o;d^-pXO)1E8Z0@NY?`QmrG(Du(=Tu zrfNr>31)%P8Egir_Z);rX>+D*DqouKzFX#R2ZQ-z6d?j&WNI8tNkjWSSD0hVI^gzn z6}gJFecoCfncCTth0+Z3k4V;HLYg&neYq=m?4Md~E_wi783XWvH!{|p=*H+Ll*V%w zC<*!}wrD5W%}y70(BEdqu}^}5DywtNSswc5-`5bgvy&~AUdOJzPw*w;JAZqUhGfw+ ze=qYqCCT4V3}`lln^%xQkW|pHG_mUqHnFrk5)^_w!m;;nJ~~t!My(SiDCp+oI!x~l zwdl&WE#PjR&XYyA=5Tk5PPgdt)s3ggH>@G)=b>poIPrGEEs9O5{B4yA&f!Q7s^3_12}f3VX1W{b5v?a zaVO_R{YP66LLCqLm5OEaF(Q+UITw?`x_4_nmb)?@19NT?hDy#P3wdplhbMj7baLD zvU)m{bG6O~A~Ih?GS6|&yBdClMW6tTBW*A(ZmDO_+7GPL}5RqXTPxS<$+~yUhMnNnCi(B zoOl9VZisK~kDpUkkLJa#IW8P}Yqt>NtXu>2b$oOr zVu?{&;8d`%h*1j?U?~`1<`%!E+A+Un*BZJU$&%`*IJzccd6lXF!}=B~9E{EBFBsmM z4II%6v#4tA>Kg$`G_x9GCo3!~4<$N`o6U!<#?A+rxLn&d|H#RkvHkpeNBKbg6*H@X zPH=}Q|I*YYRycB+qQ_74aEG%6R97CdXNmntfUNQ)s5-8wK@5Z=!<66(ks1Pm-tD2z zrIJT06RYZ_ z?oe3-%C-fueSvm(1~R-{Apd~0Dl<}F)ku`U#Ul_tejDxI64ZL)hAU4g&d`#z0)T;+ zq#UZR>^I5eHE`Z;XF{r|gcg3JjOD>DW3;<4EX+tBmS#a86hpIA0JnWo?XL4nEU87= z0yOWqsWMm0yqqg!R1_h++_S4;-yveZwMKJ$^U)_#24fqtYkkH8nmaZVRln*_v28|g z@1LBUt4lf;uDKDL4|k0ob{V6yrYNZ>W}juWm@#2pqN{vI+&Y6a8&o>u3uX-e8O#r9jn6!^imvpb!N-OJ4)!9IfG1vS zKN^sJeBt~=o%9C9dPOZ@p7cINihDq#O==a57$OVfHQe)pU%3z67I;AG`MW&|I{uw9n@e zjdgT1y`%fJ;3ZK@Efs`N-TN}l*KVG1-N><~M@Mw(%pZ=^+!iyq4qvlZHxWe-{HZfE z$Ik1bUQCD2`+h4=Uh_tii>R}iUa}xevVIThD_p%oYiH5mb(ztXxVSjS@5g{T4J$)P z=1n^lG4$48!#%D{*;GPS6S+)*$SfATc)L_)Iqitozi6W| zN<8Rt=erVesGUe;FGl{uwy=8;W3GCEqTDW z6>@8wL$$mxEO^lx@xM3{bcPczpd#}f)(^a@d{J4L5}QWvo{x9-`y;2yySVK_(76sL z>G7}w%omYyL(Q2E8+oFoK@^l9p90cDsJhJag8;pLfr~ROG987S%|$o!b1GV8z&Jh|wUG#O40}-I^+KqO^y1`_;Ne{chClxYY zVpXKGg_(AL7i-IHm3#QrccGnIIw?e(3Nmj>cs$2PD$5htbstuo9^0oZ$4=Sx0Hn;z=|l95JT)7Q8mt_2uxf!DA8!bm8kvvh!kf={woHo6 za?tcmLCv1-?A=X?or$SSTRqcx)H{?f^mom?&w*o`LL`QxXA^EZdA?lZ#i z8uAh#gc|#8^gROmIUVTsPmTlc~DmF0d>j)n_C$%qoC&pVk zJ|8F5GEvQdGpqDqFqNPvhQJ|3#fepXV%3acb6(xc_34GeS{EDBKRaF4-kF!hwYD69 zFt-au+?fn^^S2WJqiP)%eUwW=qy~NV4dMjdH;&~e%j5xs?edejF6c8c~X`=r; z{I<(S__5W%I5t6|rb<(yrU=>7L!m1vFN?`J7gpb{_K>7R0wz(&++L$zz_*_h1oWW) zpWt@KE7;XRmkB57>T+Tkgwe7z&p$>_k;|Xzpk8IiE}Eybgyx-2yvqy5fo(3jM%do} zXjuk)Cfs(t>CLQ%|3)sHKOmv&t7m34;Mw>6*r*^))p(Qazr6>sSScYmXDH!FkU(mo z=ujc!Pd$;yWyOM#*}i}#R0$=^S4i)b!jMzuy&nqFj{MZb5YrnFV8XaU*B18CAoiLG zKE`+2KIy6hLHD%^y)i`TDIV4RPdV~IsGWuADYMo{@?cb73HMA<#l4QOJ9}nqFh^(Bq;1qB3z9_G8i(O8#^7phNan*9lvv(U9i@lP%a8V_sO|{*;3F zRpVNfCh5zi(^ucPz8YgL#%K|e5Z2)A`lMSLjp#G^Z~JBQxCd|AZ?Ah;2=KcEia0zX03kb_N$~*fe z{^$L$FvM9{`<>;Al}7Zdz<_J^{Z5}?AJl&_m^G67sR`M8<;V*Ze>vSszhOGit+(BK2&qSj4o`c#H{a5I z5rob!w)24CgBOo$cRSN810bx||Bsp>gYY)++xPAuHz*oVRD79_Jpshmza3g6^VCT9u!J?mxm>USsBdP!_-fGrUjbNQ!*8)p`8Kq9t;- znRzv@1B7;jlRF~vwJ`x^0n+M~zFDRZ;N!r{tgB~X3hBWn11?d!NpnLDt{B0G?_S~S z`IhKQkB-9NY9sJX;q>mPe}+zK4dBQQq|*~*y)ew>XXcV0Oyq;*>|WI`W%Y}vpdVnM z+VC%xzyPGa59P*1thX*OX7dx=D|_%^*1G7~$}+p_z_6&KgXrjDVg@XF=Y{u8Z}ZFm zPq6`@5Hedd+S_+G+DS9B;TgSuJwHG9eHd4u$)I4DS$h3G>Zj7)({{6xy{BC~IwS?k hJ_4N|{RTlC|3hT!-!=B%SSyDmCF2mwL}?vS9tgFC@pg1ZjR;O+^Q;O;UB?(Ul4I>_K|!vuF5B$wYl z_p5JL-F@nws&noiw`#wu*7P&2&w5v{UT?qM>+izf4ZvFk8F?815)uG_^n3vRZXth= zmy|U5tgb2}uO$5+3CP5NXL<1v0B~@0cU6~_c&DqU|L&i-e~B5;&G}#WzX+e}y`KB0 zb^rj%`d_5~zeS;2Sh@k9Go3!4?yk>`Ka;h1#`xC%1AG62&Ho3E{s+5is!KlS`SFZD zSpO$%{-3ayyR-Xqo}qv81D##}!7I;L*a776Ph0=UKa5{nI%;V=hq})vIlv8|4v+;% zJmdeP@^5`QECg*KL7yiPynE5!r9E#>_5o7c>YDU zvH}3kiva*EJpcf25&*z3_!rTCm;Lv>_@7+syXP|G&)4bnd{_fO0879-fIPqv00gi- zBTm3a00)5g?=nF0xqJNY$v>6+@73^J`tL6Q&MP$j7xXAdH~?fEBorK^zkL9z=i7&j zjPg(I|55=u2HGpsmzXb5kpIcx`W66qi2^`Eeu4A?4GS9^g#dtz@&ffG651D%8RZoc z#&fy@&T}#{(lZZaG%P#}WR&Os|3L}|4fhq^d;DiU1ZwDnG@NEGNkk+Pnp!$v6H-#2 zDG}3h@$jo_XzQB0x_KnlHB3QgxFy{^gOh*e)i&`;(*eCg^PBtV`RaR4&!j9YLw@(p z|6KySMtRl|&T}K50Nua-P3gbUe{0~sHSpgW_-_sTFK7TcIY8qqcE%^I{szp={Ofwz z0b9~hu_>kY5KU;8t=u~~eQvIl)T5`DsH)q1^fe=~l@+xrLCd#xtojU_x{rxTNnhOW zylo~~VB6b6-E4PUlL-cY0qJa38Q(dw23G&L?O2l3U5QjmakgDP#^~8SN!8+(CYP1; zh)3-SuEr$#Bv+^?^`}>zzkD_u{ukwab?(E?S+%?m?W*y|l0(k|nG@(6Pg>lj(HJXg zG-H!vM6l9SyF{9_?i?QxnyXe&ak}r~<*WiBeJ_bt!$?nu+uJ1!iGdd*&jv<@GkYHv zbTw%g>T|nml5<7l=rZr6l3Lz(s8Dx(*_5M=CN{EAe&%(slHK39s@_ZCSKIeXY`5E> zP^_a`ZguM~V83FN|J#JoSJ1P)@-IRC?8mV63r_j|_-JroStI3!<;YJ_@8`ZJYo|=J zhJ^){yl8M(cA^_uWzkf1{8U23*yamDZG>!{fL&gCob3hPJLF;V2`H&#O+y%3zQFV& zQC;K9(MWaea=R$yZ9~@ZYVrYv{t@ZnW@~m-)30e32+}}g%Opk{TTiy_9nyE3C`kZo z(|@t~|2XtH)ZkCcYM$ti+wn^ARaKw84lG>u4Zd-7GXUGUmW}k*U8#gE7dOuolYE$S zEp#*A9p>F-Th&d7s*z?py3-q?)>@_iLEJs?)Y$6Hb(^u~tmV5%V+-#}HxCHFzy7s{ z+YO%gS_(PJD4>U_StNPi5be`llecY2nAT41$@=5$*ioNC4^GrBc4(PX^q(L;HcM6y&&eye-KKcJrgBr=PB}TyDEtQyr3at8Qsb z!j*!3`^!iZZR}QH1IQsGNt1zHzG-HS=m3f07*B=d0v37(n(FdQ_WVXc+6Tgd(>qv{ zx{t>$U31Kvx(oe74CN^90B8wqVfP2}&kh4t^8B;r73oo-bh(9A-?Rh-ANI^?v^XOa zdPU9G6bSZQUv6A?-PO2GPO7%J5XOF)2tv( zJeS?g)2Gf{E@p8fPLE6qtF}7a4!hX=v_pY{un59317N7D$S+|nU!TpA+qcoNClT-d3!n>WX>EG8UnW8 z$XMrwtJAA!$@90V*H*2Q<6~#0v--%f* z$VAUOQtrc@z5rwSJZq$_2=3M{*FuiPTMsLDGo*E?zEO(gOv_F}3J$5V58S*)S~)QAaBh;z=Y z%pJnH(~5s@faJ{BIo?s#LF*U{XZ28PzhoUv2l77sob~kS&$mq#NwS(7J0{4q2;I!> z`=DD~j~yQ=@5S{NUFdg$^3G!b>Rh@xDmj8?OZ+y{ThB)4@!PMJo3afDF4ax@X(1vB zr&pwxhuL=0zE4b*&LMwHepyoTSd?CBaMqBFtHBW+@3le3JS z-(&?YH=?ajKP#1$fLb|SM--6>R-2Y~df7$QXlW!lQ6@WLzc*FuIHa)zESr3%8A-|N zXLy5WvmfrUCmOokjzOiq7e43dofh)dzr#Hzb3GvAYi|=nMr^tEyOkP?`8S-)g!goE z(=oYymiIir%AJHCq>KaZphgFQ?MJzCnd`!29)2$hs^${lu!ajbj}UU96P8szh*ZiS zmG?d4Y%Yg>DTjBVf+o8(m+p5GnW(YGY&+D`7HAE3kdIq<)4roujbM%4V-D%jjP+K< zC=u{WYD9tuCa`pAb7XUknq{`M3ER9-pMGzfM^h|r%VfA$BsR(WCG)w*^68TRzs`?) zLhY8EVMu;O-)^Of-rn|P!`g9E2`MTr$w8ln9@HkRGWC1dA)8)a{eZ{rd9^_iuxaoI z4$tYC&w9%Frs`7WXu#YD!Ta*dGMqV|SL5!?( z=O}rVt8J4z`pNMujs_YBG)qmYpRb6n#kj0U=khLVkT8 z{WZG9(V#z}s0fbm-=ttQ460{%U$i@2v$8xW8k?-0pcMQitwx0}){k=6cH7%7k@M6M zG+w0p6~h=!IQ&7ZQ*W|u#J;{kDC*lQr?!BlBeE`-2Z4}U^ZXfTe|owNp&f~6j)ayw z*lpTGM^wsw1P9kEjrQqJwMkEqb`o1heRVwrAnh8g#+o>H_g_@=CW~u?Re{)k!rEI` zO?MqaGz6J)-eVAaUM5wL~#a?zPE5&7Zn zQtV(St3j9Do&z0kf?KK^X3?UZgp76;SNGh}X9sFn0dHhn5rGT`BcDLH={V8wVC9F! z4MOfsqgA2l2i2hf9J{d~nAQ2N5mA#vUxXwU@NLr}mZe^UK53182o+W)H#jK)6apf@ z73YpjeFMTXtP}K4`Dzy&G;0#i;-tUxKto`T@Xpr44$9mYE{v?jHS86Fte;-Gc`Bk(nPRr#~0<;pMOH^$|ZcsnZW5< zCf`4u661M0PN`#>DsCl@RBhOKrtb4)Ezx&XHweFR{7k#UP)}Q5`Hzv$lp05qmcekr zKre}IqkFhBY;ig#Nw(zIT9t1g zVRVjqt)1{!dv=fkncWnRFjqSgwTX;^V0c)3Ctr4ATx@c*A1#E(=DJRa&{fvvYsnh3 ze-&u$=8Vqsc(kfJPp8?qCj1Zay|ng^?0Z%>K3C}Myk`j?&TA`rc!kSH=;;J=Sd!^( z|A)PD80}M{Bp=dNnt*?#z|`l9%MFnsjB^O@Q4h&o%0X@8&`bcBzM3P5i61nK z;5hu1GJ$67&m)`8?{`F~V^W;w8=}=;Y+G+v04g`wVD;UTovK+}xHLfdZo_9~MrE23 z7g|40yGU{6u+r(jH!|Ls&K&;3>qInApS6qH2lr=7V_-)KsIs%sbH=LtXYV1ZRrmW% z^gAA4(*kR%Ho>qQ$>Ln?q5Y6#V_0;J7+Xio*ZeC>xj6w(CqTsspFhYTAf>7uZ6W)U za%#1bU{qgDT6V=;SxPPwy*z%Zgg%K2o}zVRm0H1NIH=kI(=p$Wxd~HxDT;D2#Q{dp@v<(q)4sL1J6XodS|(r* z)7ZUq0jUXL(N94o?@e%4d6?r2s!^h;OPAP|;Yt6@M`}v7CpQD~R^RojVX- z+Z^F#JflJW7cfm=RB!8K>Iuuny-FuEsFL?-nm*1i$QYocuYG@YywoCJS4L4bw1X*r zD{~&S)Fo>#g32}bz-YE}$s@ThsgIgI>4)2l-mp56@AyzzEhXvjYG@CY{=@$KPp$X> z0#-({DFaIw0_miJ2|OgHb5G>eMGII?^7Sk<#N! z7*&KKBu?e_ahVh)=2l!+CI_vaS-DAhAF>-qRu95)_GFf9^Q`+hUB-D>^wVhZ82Xtv ztPnRoBsoPvfNA=(1D=bhY$;O7!|EB057Xvqel^c}&arrleWhfR0Ui(Q6;46%RpmZX zke{2JqLS9KfOcA~>4sVWMV7L08lL{b%=Ku_c`a`S>UOybppymvkTvfO>9}D^Tu!xa zUVgEu)s|7-6Pp#GQ649bYi)HFh0FI~Z_xBWI~ zic~>TLHz??*OxzvtHDf(qqdE;L!V7c5aWe`s+PL2Jf@^Zz0$#3{Z++^KIx{0`Jv#Z zZ-l7E?X+kcbw3>c0=~!5xjQj+Xi4ww&nOCpO$m^Q1hifC%I+r6cP(qVXD|!kPK{)Y zhHWsI7i_Yn(B%-He4;z7RW6u_2(Oc;eYxfle#XvmKCj@OQNG(mlzU0IwYpo5vr7|W z!B#S#%Dnl*<()-ZFZt*e8jEQC2lmTuwTmZ(R)*1!IHeol(HAFaRdTIPS-GVlGengx zZHM~4<3{BWc~x!8S}OHIBXgF?(a}a383Bfb8+9q+@1DEznkK*70%g|~=@;|GXf(Ds zFY3Em@J#mtsWuk0@hAdXX-q3GJav)_t|dpp%vV3Ls?2L11;}ew=YtG%%nYcFNeGji zFDkc8No9Ym)w9xhe^09Z+D(aZbCZ?>EpJxhOC5h1VBk8RG^4Gb1{~62cE^0P5}O@U z$LOWvnWYgg5`bD7yJgS(-aPnArNlVlMuoi$Mq5?4E|SoX|3eNU

$rK=}u|cv&{* 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 z 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

*cELcEVty*?<8vO-unngm|wx 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 z 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

q)!~e4N`1tUcJFA47kCZ$D$5fF@yKTk4)n7$ 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 diff --git a/src/algorithms/sets/permutations/permutateWithRepetitions.js b/src/algorithms/sets/permutations/permutateWithRepetitions.js deleted file mode 100644 index 08f918b558..0000000000 --- a/src/algorithms/sets/permutations/permutateWithRepetitions.js +++ /dev/null @@ -1,31 +0,0 @@ -/** - * @param {*[]} permutationOptions - * @param {number} permutationLength - * @return {*[]} - */ -export default function permutateWithRepetitions( - permutationOptions, - permutationLength = permutationOptions.length, -) { - if (permutationLength === 1) { - return permutationOptions.map((permutationOption) => [permutationOption]); - } - - // Init permutations array. - const permutations = []; - - // Get smaller permutations. - const smallerPermutations = permutateWithRepetitions( - permutationOptions, - permutationLength - 1, - ); - - // Go through all options and join it to the smaller permutations. - permutationOptions.forEach((currentOption) => { - smallerPermutations.forEach((smallerPermutation) => { - permutations.push([currentOption].concat(smallerPermutation)); - }); - }); - - return permutations; -} diff --git a/src/algorithms/sets/permutations/permutateWithoutRepetitions.js b/src/algorithms/sets/permutations/permutateWithoutRepetitions.js deleted file mode 100644 index 7b2f002c74..0000000000 --- a/src/algorithms/sets/permutations/permutateWithoutRepetitions.js +++ /dev/null @@ -1,31 +0,0 @@ -/** - * @param {*[]} permutationOptions - * @return {*[]} - */ -export default function permutateWithoutRepetitions(permutationOptions) { - if (permutationOptions.length === 1) { - return [permutationOptions]; - } - - // Init permutations array. - const permutations = []; - - // Get all permutations for permutationOptions excluding the first element. - const smallerPermutations = permutateWithoutRepetitions(permutationOptions.slice(1)); - - // Insert first option into every possible position of every smaller permutation. - const firstOption = permutationOptions[0]; - - for (let permIndex = 0; permIndex < smallerPermutations.length; permIndex += 1) { - const smallerPermutation = smallerPermutations[permIndex]; - - // Insert first option into every possible position of smallerPermutation. - for (let positionIndex = 0; positionIndex <= smallerPermutation.length; positionIndex += 1) { - const permutationPrefix = smallerPermutation.slice(0, positionIndex); - const permutationSuffix = smallerPermutation.slice(positionIndex); - permutations.push(permutationPrefix.concat([firstOption], permutationSuffix)); - } - } - - return permutations; -} diff --git a/src/algorithms/sets/power-set/README.md b/src/algorithms/sets/power-set/README.md deleted file mode 100644 index e96961dd8f..0000000000 --- a/src/algorithms/sets/power-set/README.md +++ /dev/null @@ -1,112 +0,0 @@ -# Power Set - -Power set of a set `S` is the set of all of the subsets of `S`, including the -empty set and `S` itself. Power set of set `S` is denoted as `P(S)`. - -For example for `{x, y, z}`, the subsets -are: - -```text -{ - {}, // (also denoted empty set ∅ or the null set) - {x}, - {y}, - {z}, - {x, y}, - {x, z}, - {y, z}, - {x, y, z} -} -``` - -![Power Set](https://www.mathsisfun.com/sets/images/power-set.svg) - -Here is how we may illustrate the elements of the power set of the set `{x, y, z}` ordered with respect to -inclusion: - -![](https://upload.wikimedia.org/wikipedia/commons/e/ea/Hasse_diagram_of_powerset_of_3.svg) - -**Number of Subsets** - -If `S` is a finite set with `|S| = n` elements, then the number of subsets -of `S` is `|P(S)| = 2^n`. This fact, which is the motivation for the -notation `2^S`, may be demonstrated simply as follows: - -> First, order the elements of `S` in any manner. We write any subset of `S` in -the format `{γ1, γ2, ..., γn}` where `γi , 1 ≤ i ≤ n`, can take the value -of `0` or `1`. If `γi = 1`, the `i`-th element of `S` is in the subset; -otherwise, the `i`-th element is not in the subset. Clearly the number of -distinct subsets that can be constructed this way is `2^n` as `γi ∈ {0, 1}`. - -## Algorithms - -### Bitwise Solution - -Each number in binary representation in a range from `0` to `2^n` does exactly -what we need: it shows by its bits (`0` or `1`) whether to include related -element from the set or not. For example, for the set `{1, 2, 3}` the binary -number of `0b010` would mean that we need to include only `2` to the current set. - -| | `abc` | Subset | -| :---: | :---: | :-----------: | -| `0` | `000` | `{}` | -| `1` | `001` | `{c}` | -| `2` | `010` | `{b}` | -| `3` | `011` | `{c, b}` | -| `4` | `100` | `{a}` | -| `5` | `101` | `{a, c}` | -| `6` | `110` | `{a, b}` | -| `7` | `111` | `{a, b, c}` | - -> See [bwPowerSet.js](./bwPowerSet.js) file for bitwise solution. - -### Backtracking Solution - -In backtracking approach we're constantly trying to add next element of the set -to the subset, memorizing it and then removing it and try the same with the next -element. - -> See [btPowerSet.js](./btPowerSet.js) file for backtracking solution. - -### Cascading Solution - -This is, arguably, the simplest solution to generate a Power Set. - -We start with an empty set: - -```text -powerSets = [[]] -``` - -Now, let's say: - -```text -originalSet = [1, 2, 3] -``` - -Let's add the 1st element from the originalSet to all existing sets: - -```text -[[]] ← 1 = [[], [1]] -``` - -Adding the 2nd element to all existing sets: - -```text -[[], [1]] ← 2 = [[], [1], [2], [1, 2]] -``` - -Adding the 3nd element to all existing sets: - -``` -[[], [1], [2], [1, 2]] ← 3 = [[], [1], [2], [1, 2], [3], [1, 3], [2, 3], [1, 2, 3]] -``` - -And so on, for the rest of the elements from the `originalSet`. On every iteration the number of sets is doubled, so we'll get `2^n` sets. - -> See [caPowerSet.js](./caPowerSet.js) file for cascading solution. - -## References - -* [Wikipedia](https://en.wikipedia.org/wiki/Power_set) -* [Math is Fun](https://www.mathsisfun.com/sets/power-set.html) diff --git a/src/algorithms/sets/power-set/__test__/btPowerSet.test.js b/src/algorithms/sets/power-set/__test__/btPowerSet.test.js deleted file mode 100644 index acfb1730a6..0000000000 --- a/src/algorithms/sets/power-set/__test__/btPowerSet.test.js +++ /dev/null @@ -1,21 +0,0 @@ -import btPowerSet from '../btPowerSet'; - -describe('btPowerSet', () => { - it('should calculate power set of given set using backtracking approach', () => { - expect(btPowerSet([1])).toEqual([ - [], - [1], - ]); - - expect(btPowerSet([1, 2, 3])).toEqual([ - [], - [1], - [1, 2], - [1, 2, 3], - [1, 3], - [2], - [2, 3], - [3], - ]); - }); -}); diff --git a/src/algorithms/sets/power-set/__test__/bwPowerSet.test.js b/src/algorithms/sets/power-set/__test__/bwPowerSet.test.js deleted file mode 100644 index e2ed179300..0000000000 --- a/src/algorithms/sets/power-set/__test__/bwPowerSet.test.js +++ /dev/null @@ -1,21 +0,0 @@ -import bwPowerSet from '../bwPowerSet'; - -describe('bwPowerSet', () => { - it('should calculate power set of given set using bitwise approach', () => { - expect(bwPowerSet([1])).toEqual([ - [], - [1], - ]); - - expect(bwPowerSet([1, 2, 3])).toEqual([ - [], - [1], - [2], - [1, 2], - [3], - [1, 3], - [2, 3], - [1, 2, 3], - ]); - }); -}); diff --git a/src/algorithms/sets/power-set/__test__/caPowerSet.test.js b/src/algorithms/sets/power-set/__test__/caPowerSet.test.js deleted file mode 100644 index 4fad5efe20..0000000000 --- a/src/algorithms/sets/power-set/__test__/caPowerSet.test.js +++ /dev/null @@ -1,28 +0,0 @@ -import caPowerSet from '../caPowerSet'; - -describe('caPowerSet', () => { - it('should calculate power set of given set using cascading approach', () => { - expect(caPowerSet([1])).toEqual([ - [], - [1], - ]); - - expect(caPowerSet([1, 2])).toEqual([ - [], - [1], - [2], - [1, 2], - ]); - - expect(caPowerSet([1, 2, 3])).toEqual([ - [], - [1], - [2], - [1, 2], - [3], - [1, 3], - [2, 3], - [1, 2, 3], - ]); - }); -}); diff --git a/src/algorithms/sets/power-set/btPowerSet.js b/src/algorithms/sets/power-set/btPowerSet.js deleted file mode 100644 index 2007c124bf..0000000000 --- a/src/algorithms/sets/power-set/btPowerSet.js +++ /dev/null @@ -1,41 +0,0 @@ -/** - * @param {*[]} originalSet - Original set of elements we're forming power-set of. - * @param {*[][]} allSubsets - All subsets that have been formed so far. - * @param {*[]} currentSubSet - Current subset that we're forming at the moment. - * @param {number} startAt - The position of in original set we're starting to form current subset. - * @return {*[][]} - All subsets of original set. - */ -function btPowerSetRecursive(originalSet, allSubsets = [[]], currentSubSet = [], startAt = 0) { - // Let's iterate over originalSet elements that may be added to the subset - // without having duplicates. The value of startAt prevents adding the duplicates. - for (let position = startAt; position < originalSet.length; position += 1) { - // Let's push current element to the subset - currentSubSet.push(originalSet[position]); - - // Current subset is already valid so let's memorize it. - // We do array destruction here to save the clone of the currentSubSet. - // We need to save a clone since the original currentSubSet is going to be - // mutated in further recursive calls. - allSubsets.push([...currentSubSet]); - - // Let's try to generate all other subsets for the current subset. - // We're increasing the position by one to avoid duplicates in subset. - btPowerSetRecursive(originalSet, allSubsets, currentSubSet, position + 1); - - // BACKTRACK. Exclude last element from the subset and try the next valid one. - currentSubSet.pop(); - } - - // Return all subsets of a set. - return allSubsets; -} - -/** - * Find power-set of a set using BACKTRACKING approach. - * - * @param {*[]} originalSet - * @return {*[][]} - */ -export default function btPowerSet(originalSet) { - return btPowerSetRecursive(originalSet); -} diff --git a/src/algorithms/sets/power-set/bwPowerSet.js b/src/algorithms/sets/power-set/bwPowerSet.js deleted file mode 100644 index b8417bea4b..0000000000 --- a/src/algorithms/sets/power-set/bwPowerSet.js +++ /dev/null @@ -1,34 +0,0 @@ -/** - * Find power-set of a set using BITWISE approach. - * - * @param {*[]} originalSet - * @return {*[][]} - */ -export default function bwPowerSet(originalSet) { - const subSets = []; - - // We will have 2^n possible combinations (where n is a length of original set). - // It is because for every element of original set we will decide whether to include - // it or not (2 options for each set element). - const numberOfCombinations = 2 ** originalSet.length; - - // Each number in binary representation in a range from 0 to 2^n does exactly what we need: - // it shows by its bits (0 or 1) whether to include related element from the set or not. - // For example, for the set {1, 2, 3} the binary number of 0b010 would mean that we need to - // include only "2" to the current set. - for (let combinationIndex = 0; combinationIndex < numberOfCombinations; combinationIndex += 1) { - const subSet = []; - - for (let setElementIndex = 0; setElementIndex < originalSet.length; setElementIndex += 1) { - // Decide whether we need to include current element into the subset or not. - if (combinationIndex & (1 << setElementIndex)) { - subSet.push(originalSet[setElementIndex]); - } - } - - // Add current subset to the list of all subsets. - subSets.push(subSet); - } - - return subSets; -} diff --git a/src/algorithms/sets/power-set/caPowerSet.js b/src/algorithms/sets/power-set/caPowerSet.js deleted file mode 100644 index 45b9eb6169..0000000000 --- a/src/algorithms/sets/power-set/caPowerSet.js +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Find power-set of a set using CASCADING approach. - * - * @param {*[]} originalSet - * @return {*[][]} - */ -export default function caPowerSet(originalSet) { - // Let's start with an empty set. - const sets = [[]]; - - /* - Now, let's say: - originalSet = [1, 2, 3]. - - Let's add the first element from the originalSet to all existing sets: - [[]] ← 1 = [[], [1]] - - Adding the 2nd element to all existing sets: - [[], [1]] ← 2 = [[], [1], [2], [1, 2]] - - Adding the 3nd element to all existing sets: - [[], [1], [2], [1, 2]] ← 3 = [[], [1], [2], [1, 2], [3], [1, 3], [2, 3], [1, 2, 3]] - - And so on for the rest of the elements from originalSet. - On every iteration the number of sets is doubled, so we'll get 2^n sets. - */ - for (let numIdx = 0; numIdx < originalSet.length; numIdx += 1) { - const existingSetsNum = sets.length; - - for (let setIdx = 0; setIdx < existingSetsNum; setIdx += 1) { - const set = [...sets[setIdx], originalSet[numIdx]]; - sets.push(set); - } - } - - return sets; -} diff --git a/src/algorithms/sets/shortest-common-supersequence/README.md b/src/algorithms/sets/shortest-common-supersequence/README.md deleted file mode 100644 index 5af90a8337..0000000000 --- a/src/algorithms/sets/shortest-common-supersequence/README.md +++ /dev/null @@ -1,24 +0,0 @@ -# Shortest Common Supersequence - -The shortest common supersequence (SCS) of two sequences `X` and `Y` -is the shortest sequence which has `X` and `Y` as subsequences. - -In other words assume we're given two strings str1 and str2, find -the shortest string that has both str1 and str2 as subsequences. - -This is a problem closely related to the longest common -subsequence problem. - -## Example - -``` -Input: str1 = "geek", str2 = "eke" -Output: "geeke" - -Input: str1 = "AGGTAB", str2 = "GXTXAYB" -Output: "AGXGTXAYB" -``` - -## References - -- [GeeksForGeeks](https://www.geeksforgeeks.org/shortest-common-supersequence/) diff --git a/src/algorithms/sets/shortest-common-supersequence/__test__/shortestCommonSupersequence.test.js b/src/algorithms/sets/shortest-common-supersequence/__test__/shortestCommonSupersequence.test.js deleted file mode 100644 index 8adf27d159..0000000000 --- a/src/algorithms/sets/shortest-common-supersequence/__test__/shortestCommonSupersequence.test.js +++ /dev/null @@ -1,35 +0,0 @@ -import shortestCommonSupersequence from '../shortestCommonSupersequence'; - -describe('shortestCommonSupersequence', () => { - it('should find shortest common supersequence of two sequences', () => { - // LCS (longest common subsequence) is empty - expect(shortestCommonSupersequence( - ['A', 'B', 'C'], - ['D', 'E', 'F'], - )).toEqual(['A', 'B', 'C', 'D', 'E', 'F']); - - // LCS (longest common subsequence) is "EE" - expect(shortestCommonSupersequence( - ['G', 'E', 'E', 'K'], - ['E', 'K', 'E'], - )).toEqual(['G', 'E', 'K', 'E', 'K']); - - // LCS (longest common subsequence) is "GTAB" - expect(shortestCommonSupersequence( - ['A', 'G', 'G', 'T', 'A', 'B'], - ['G', 'X', 'T', 'X', 'A', 'Y', 'B'], - )).toEqual(['A', 'G', 'G', 'X', 'T', 'X', 'A', 'Y', 'B']); - - // LCS (longest common subsequence) is "BCBA". - expect(shortestCommonSupersequence( - ['A', 'B', 'C', 'B', 'D', 'A', 'B'], - ['B', 'D', 'C', 'A', 'B', 'A'], - )).toEqual(['A', 'B', 'D', 'C', 'A', 'B', 'D', 'A', 'B']); - - // LCS (longest common subsequence) is "BDABA". - expect(shortestCommonSupersequence( - ['B', 'D', 'C', 'A', 'B', 'A'], - ['A', 'B', 'C', 'B', 'D', 'A', 'B', 'A', 'C'], - )).toEqual(['A', 'B', 'C', 'B', 'D', 'C', 'A', 'B', 'A', 'C']); - }); -}); diff --git a/src/algorithms/sets/shortest-common-supersequence/shortestCommonSupersequence.js b/src/algorithms/sets/shortest-common-supersequence/shortestCommonSupersequence.js deleted file mode 100644 index 8b14b54e22..0000000000 --- a/src/algorithms/sets/shortest-common-supersequence/shortestCommonSupersequence.js +++ /dev/null @@ -1,71 +0,0 @@ -import longestCommonSubsequence from '../longest-common-subsequence/longestCommonSubsequence'; - -/** - * @param {string[]} set1 - * @param {string[]} set2 - * @return {string[]} - */ - -export default function shortestCommonSupersequence(set1, set2) { - // Let's first find the longest common subsequence of two sets. - const lcs = longestCommonSubsequence(set1, set2); - - // If LCS is empty then the shortest common supersequence would be just - // concatenation of two sequences. - if (lcs.length === 1 && lcs[0] === '') { - return set1.concat(set2); - } - - // Now let's add elements of set1 and set2 in order before/inside/after the LCS. - let supersequence = []; - - let setIndex1 = 0; - let setIndex2 = 0; - let lcsIndex = 0; - let setOnHold1 = false; - let setOnHold2 = false; - - while (lcsIndex < lcs.length) { - // Add elements of the first set to supersequence in correct order. - if (setIndex1 < set1.length) { - if (!setOnHold1 && set1[setIndex1] !== lcs[lcsIndex]) { - supersequence.push(set1[setIndex1]); - setIndex1 += 1; - } else { - setOnHold1 = true; - } - } - - // Add elements of the second set to supersequence in correct order. - if (setIndex2 < set2.length) { - if (!setOnHold2 && set2[setIndex2] !== lcs[lcsIndex]) { - supersequence.push(set2[setIndex2]); - setIndex2 += 1; - } else { - setOnHold2 = true; - } - } - - // Add LCS element to the supersequence in correct order. - if (setOnHold1 && setOnHold2) { - supersequence.push(lcs[lcsIndex]); - lcsIndex += 1; - setIndex1 += 1; - setIndex2 += 1; - setOnHold1 = false; - setOnHold2 = false; - } - } - - // Attach set1 leftovers. - if (setIndex1 < set1.length) { - supersequence = supersequence.concat(set1.slice(setIndex1)); - } - - // Attach set2 leftovers. - if (setIndex2 < set2.length) { - supersequence = supersequence.concat(set2.slice(setIndex2)); - } - - return supersequence; -} diff --git a/src/algorithms/sorting/Sort.js b/src/algorithms/sorting/Sort.js deleted file mode 100644 index e0290881a7..0000000000 --- a/src/algorithms/sorting/Sort.js +++ /dev/null @@ -1,34 +0,0 @@ -import Comparator from '../../utils/comparator/Comparator'; - -/** - * @typedef {Object} SorterCallbacks - * @property {function(a: *, b: *)} compareCallback - If provided then all elements comparisons - * will be done through this callback. - * @property {function(a: *)} visitingCallback - If provided it will be called each time the sorting - * function is visiting the next element. - */ - -export default class Sort { - constructor(originalCallbacks) { - this.callbacks = Sort.initSortingCallbacks(originalCallbacks); - this.comparator = new Comparator(this.callbacks.compareCallback); - } - - /** - * @param {SorterCallbacks} originalCallbacks - * @returns {SorterCallbacks} - */ - static initSortingCallbacks(originalCallbacks) { - const callbacks = originalCallbacks || {}; - const stubCallback = () => {}; - - callbacks.compareCallback = callbacks.compareCallback || undefined; - callbacks.visitingCallback = callbacks.visitingCallback || stubCallback; - - return callbacks; - } - - sort() { - throw new Error('sort method must be implemented'); - } -} diff --git a/src/algorithms/sorting/SortTester.js b/src/algorithms/sorting/SortTester.js deleted file mode 100644 index e92ea39adb..0000000000 --- a/src/algorithms/sorting/SortTester.js +++ /dev/null @@ -1,72 +0,0 @@ -export const sortedArr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]; -export const reverseArr = [20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1]; -export const notSortedArr = [15, 8, 5, 12, 10, 1, 16, 9, 11, 7, 20, 3, 2, 6, 17, 18, 4, 13, 14, 19]; -export const equalArr = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; -export const negativeArr = [-1, 0, 5, -10, 20, 13, -7, 3, 2, -3]; -export const negativeArrSorted = [-10, -7, -3, -1, 0, 2, 3, 5, 13, 20]; - -export class SortTester { - static testSort(SortingClass) { - const sorter = new SortingClass(); - - expect(sorter.sort([])).toEqual([]); - expect(sorter.sort([1])).toEqual([1]); - expect(sorter.sort([1, 2])).toEqual([1, 2]); - expect(sorter.sort([2, 1])).toEqual([1, 2]); - expect(sorter.sort([3, 4, 2, 1, 0, 0, 4, 3, 4, 2])).toEqual([0, 0, 1, 2, 2, 3, 3, 4, 4, 4]); - expect(sorter.sort(sortedArr)).toEqual(sortedArr); - expect(sorter.sort(reverseArr)).toEqual(sortedArr); - expect(sorter.sort(notSortedArr)).toEqual(sortedArr); - expect(sorter.sort(equalArr)).toEqual(equalArr); - } - - static testNegativeNumbersSort(SortingClass) { - const sorter = new SortingClass(); - expect(sorter.sort(negativeArr)).toEqual(negativeArrSorted); - } - - static testSortWithCustomComparator(SortingClass) { - const callbacks = { - compareCallback: (a, b) => { - if (a.length === b.length) { - return 0; - } - return a.length < b.length ? -1 : 1; - }, - }; - - const sorter = new SortingClass(callbacks); - - expect(sorter.sort([''])).toEqual(['']); - expect(sorter.sort(['a'])).toEqual(['a']); - expect(sorter.sort(['aa', 'a'])).toEqual(['a', 'aa']); - expect(sorter.sort(['aa', 'q', 'bbbb', 'ccc'])).toEqual(['q', 'aa', 'ccc', 'bbbb']); - expect(sorter.sort(['aa', 'aa'])).toEqual(['aa', 'aa']); - } - - static testSortStability(SortingClass) { - const callbacks = { - compareCallback: (a, b) => { - if (a.length === b.length) { - return 0; - } - return a.length < b.length ? -1 : 1; - }, - }; - - const sorter = new SortingClass(callbacks); - - expect(sorter.sort(['bb', 'aa', 'c'])).toEqual(['c', 'bb', 'aa']); - expect(sorter.sort(['aa', 'q', 'a', 'bbbb', 'ccc'])).toEqual(['q', 'a', 'aa', 'ccc', 'bbbb']); - } - - static testAlgorithmTimeComplexity(SortingClass, arrayToBeSorted, numberOfVisits) { - const visitingCallback = jest.fn(); - const callbacks = { visitingCallback }; - const sorter = new SortingClass(callbacks); - - sorter.sort(arrayToBeSorted); - - expect(visitingCallback).toHaveBeenCalledTimes(numberOfVisits); - } -} diff --git a/src/algorithms/sorting/__test__/Sort.test.js b/src/algorithms/sorting/__test__/Sort.test.js deleted file mode 100644 index 989f3e7786..0000000000 --- a/src/algorithms/sorting/__test__/Sort.test.js +++ /dev/null @@ -1,12 +0,0 @@ -import Sort from '../Sort'; - -describe('Sort', () => { - it('should throw an error when trying to call Sort.sort() method directly', () => { - function doForbiddenSort() { - const sorter = new Sort(); - sorter.sort(); - } - - expect(doForbiddenSort).toThrow(); - }); -}); diff --git a/src/algorithms/sorting/bubble-sort/BubbleSort.js b/src/algorithms/sorting/bubble-sort/BubbleSort.js deleted file mode 100644 index d78ebcbdc1..0000000000 --- a/src/algorithms/sorting/bubble-sort/BubbleSort.js +++ /dev/null @@ -1,38 +0,0 @@ -import Sort from '../Sort'; - -export default class BubbleSort extends Sort { - sort(originalArray) { - // Flag that holds info about whether the swap has occur or not. - let swapped = false; - // Clone original array to prevent its modification. - const array = [...originalArray]; - - for (let i = 1; i < array.length; i += 1) { - swapped = false; - - // Call visiting callback. - this.callbacks.visitingCallback(array[i]); - - for (let j = 0; j < array.length - i; j += 1) { - // Call visiting callback. - this.callbacks.visitingCallback(array[j]); - - // Swap elements if they are in wrong order. - if (this.comparator.lessThan(array[j + 1], array[j])) { - [array[j], array[j + 1]] = [array[j + 1], array[j]]; - - // Register the swap. - swapped = true; - } - } - - // If there were no swaps then array is already sorted and there is - // no need to proceed. - if (!swapped) { - return array; - } - } - - return array; - } -} diff --git a/src/algorithms/sorting/bubble-sort/README.md b/src/algorithms/sorting/bubble-sort/README.md deleted file mode 100644 index 66347d86c7..0000000000 --- a/src/algorithms/sorting/bubble-sort/README.md +++ /dev/null @@ -1,25 +0,0 @@ -# Bubble Sort - -_Read this in other languages:_ -[_Português_](README.pt-BR.md) - -Bubble sort, sometimes referred to as sinking sort, is a -simple sorting algorithm that repeatedly steps through -the list to be sorted, compares each pair of adjacent -items and swaps them if they are in the wrong order -(ascending or descending arrangement). The pass through -the list is repeated until no swaps are needed, which -indicates that the list is sorted. - -![Algorithm Visualization](https://upload.wikimedia.org/wikipedia/commons/c/c8/Bubble-sort-example-300px.gif) - -## Complexity - -| Name | Best | Average | Worst | Memory | Stable | Comments | -| --------------------- | :-------------: | :-----------------: | :-----------------: | :-------: | :-------: | :-------- | -| **Bubble sort** | n | n2 | n2 | 1 | Yes | | - -## References - -- [Wikipedia](https://en.wikipedia.org/wiki/Bubble_sort) -- [YouTube](https://www.youtube.com/watch?v=6Gv8vg0kcHc&index=27&t=0s&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) diff --git a/src/algorithms/sorting/bubble-sort/README.pt-BR.md b/src/algorithms/sorting/bubble-sort/README.pt-BR.md deleted file mode 100644 index e650523d71..0000000000 --- a/src/algorithms/sorting/bubble-sort/README.pt-BR.md +++ /dev/null @@ -1,20 +0,0 @@ -# Bubble Sort - -_Leia isso em outros idiomas:_ -[_English_](README.md) - -O bubble sort, ou ordenação por flutuação (literalmente "por bolha"), é um algoritmo de ordenação dos mais simples. A ideia é percorrer o vetor diversas vezes, e a cada passagem fazer flutuar para o topo o maior elemento da sequência. Essa movimentação lembra a forma como as bolhas em um tanque de água procuram seu próprio nível, e disso vem o nome do algoritmo. - -![Algorithm Visualization](https://upload.wikimedia.org/wikipedia/commons/c/c8/Bubble-sort-example-300px.gif) - -## Complexidade - -| Nome | Melhor | Média | Pior | Memória | Estável | Comentários | -| --------------------- | :-------------: | :-----------------: | :-----------------: | :-------: | :-------: | :-------- | -| **Bubble sort** | n | n2 | n2 | 1 | Sim | | - -## Referências - -- [Wikipedia](https://pt.wikipedia.org/wiki/Bubble_sort) -- [YouTube](https://www.youtube.com/watch?v=6Gv8vg0kcHc&index=27&t=0s&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) - diff --git a/src/algorithms/sorting/bubble-sort/__test__/BubbleSort.test.js b/src/algorithms/sorting/bubble-sort/__test__/BubbleSort.test.js deleted file mode 100644 index 7e71a0b643..0000000000 --- a/src/algorithms/sorting/bubble-sort/__test__/BubbleSort.test.js +++ /dev/null @@ -1,64 +0,0 @@ -import BubbleSort from '../BubbleSort'; -import { - equalArr, - notSortedArr, - reverseArr, - sortedArr, - SortTester, -} from '../../SortTester'; - -// Complexity constants. -const SORTED_ARRAY_VISITING_COUNT = 20; -const NOT_SORTED_ARRAY_VISITING_COUNT = 189; -const REVERSE_SORTED_ARRAY_VISITING_COUNT = 209; -const EQUAL_ARRAY_VISITING_COUNT = 20; - -describe('BubbleSort', () => { - it('should sort array', () => { - SortTester.testSort(BubbleSort); - }); - - it('should sort array with custom comparator', () => { - SortTester.testSortWithCustomComparator(BubbleSort); - }); - - it('should do stable sorting', () => { - SortTester.testSortStability(BubbleSort); - }); - - it('should sort negative numbers', () => { - SortTester.testNegativeNumbersSort(BubbleSort); - }); - - it('should visit EQUAL array element specified number of times', () => { - SortTester.testAlgorithmTimeComplexity( - BubbleSort, - equalArr, - EQUAL_ARRAY_VISITING_COUNT, - ); - }); - - it('should visit SORTED array element specified number of times', () => { - SortTester.testAlgorithmTimeComplexity( - BubbleSort, - sortedArr, - SORTED_ARRAY_VISITING_COUNT, - ); - }); - - it('should visit NOT SORTED array element specified number of times', () => { - SortTester.testAlgorithmTimeComplexity( - BubbleSort, - notSortedArr, - NOT_SORTED_ARRAY_VISITING_COUNT, - ); - }); - - it('should visit REVERSE SORTED array element specified number of times', () => { - SortTester.testAlgorithmTimeComplexity( - BubbleSort, - reverseArr, - REVERSE_SORTED_ARRAY_VISITING_COUNT, - ); - }); -}); diff --git a/src/algorithms/sorting/bucket-sort/BucketSort.js b/src/algorithms/sorting/bucket-sort/BucketSort.js deleted file mode 100644 index a41e5892d2..0000000000 --- a/src/algorithms/sorting/bucket-sort/BucketSort.js +++ /dev/null @@ -1,46 +0,0 @@ -import RadixSort from '../radix-sort/RadixSort'; - -/** - * Bucket Sort - * - * @param {number[]} arr - * @param {number} bucketsNum - * @return {number[]} - */ -export default function BucketSort(arr, bucketsNum = 1) { - const buckets = new Array(bucketsNum).fill(null).map(() => []); - - const minValue = Math.min(...arr); - const maxValue = Math.max(...arr); - - const bucketSize = Math.ceil(Math.max(1, (maxValue - minValue) / bucketsNum)); - - // Place elements into buckets. - for (let i = 0; i < arr.length; i += 1) { - const currValue = arr[i]; - const bucketIndex = Math.floor((currValue - minValue) / bucketSize); - - // Edge case for max value. - if (bucketIndex === bucketsNum) { - buckets[bucketsNum - 1].push(currValue); - } else { - buckets[bucketIndex].push(currValue); - } - } - - // Sort individual buckets. - for (let i = 0; i < buckets.length; i += 1) { - // Let's use the Radix Sorter here. This may give us - // the average O(n + k) time complexity to sort one bucket - // (where k is a number of digits in the longest number). - buckets[i] = new RadixSort().sort(buckets[i]); - } - - // Merge sorted buckets into final output. - const sortedArr = []; - for (let i = 0; i < buckets.length; i += 1) { - sortedArr.push(...buckets[i]); - } - - return sortedArr; -} diff --git a/src/algorithms/sorting/bucket-sort/README.md b/src/algorithms/sorting/bucket-sort/README.md deleted file mode 100644 index 673ba80b71..0000000000 --- a/src/algorithms/sorting/bucket-sort/README.md +++ /dev/null @@ -1,35 +0,0 @@ -# Bucket Sort - -**Bucket sort**, or **bin sort**, is a sorting algorithm that works by distributing the elements of an array into a number of buckets. Each bucket is then sorted individually, either using a different sorting algorithm, or by recursively applying the bucket sorting algorithm. - -## Algorithm - -Bucket sort works as follows: - -1. Set up an array of initially empty `buckets`. -2. **Scatter:** Go over the original array, putting each object in its `bucket`. -3. Sort each non-empty `bucket`. -4. **Gather:** Visit the `buckets` in order and put all elements back into the original array. - -Elements are distributed among bins: - -![Elements are distributed among bins](./images/bucket_sort_1.png) - -Then, elements are sorted within each bin: - -![Elements are sorted within each bin](./images/bucket_sort_2.png) - - -## Complexity - -The computational complexity depends on the algorithm used to sort each bucket, the number of buckets to use, and whether the input is uniformly distributed. - -The **worst-case** time complexity of bucket sort is -`O(n^2)` if the sorting algorithm used on the bucket is *insertion sort*, which is the most common use case since the expectation is that buckets will not have too many elements relative to the entire list. In the worst case, all elements are placed in one bucket, causing the running time to reduce to the worst-case complexity of insertion sort (all elements are in reverse order). If the worst-case running time of the intermediate sort used is `O(n * log(n))`, then the worst-case running time of bucket sort will also be -`O(n * log(n))`. - -On **average**, when the distribution of elements across buckets is reasonably uniform, it can be shown that bucket sort runs on average `O(n + k)` for `k` buckets. - -## References - -- [Bucket Sort on Wikipedia](https://en.wikipedia.org/wiki/Bucket_sort) diff --git a/src/algorithms/sorting/bucket-sort/__test__/BucketSort.test.js b/src/algorithms/sorting/bucket-sort/__test__/BucketSort.test.js deleted file mode 100644 index 9cab525d9b..0000000000 --- a/src/algorithms/sorting/bucket-sort/__test__/BucketSort.test.js +++ /dev/null @@ -1,33 +0,0 @@ -import BucketSort from '../BucketSort'; -import { - equalArr, - notSortedArr, - reverseArr, - sortedArr, -} from '../../SortTester'; - -describe('BucketSort', () => { - it('should sort the array of numbers with different buckets amounts', () => { - expect(BucketSort(notSortedArr, 4)).toEqual(sortedArr); - expect(BucketSort(equalArr, 4)).toEqual(equalArr); - expect(BucketSort(reverseArr, 4)).toEqual(sortedArr); - expect(BucketSort(sortedArr, 4)).toEqual(sortedArr); - - expect(BucketSort(notSortedArr, 10)).toEqual(sortedArr); - expect(BucketSort(equalArr, 10)).toEqual(equalArr); - expect(BucketSort(reverseArr, 10)).toEqual(sortedArr); - expect(BucketSort(sortedArr, 10)).toEqual(sortedArr); - - expect(BucketSort(notSortedArr, 50)).toEqual(sortedArr); - expect(BucketSort(equalArr, 50)).toEqual(equalArr); - expect(BucketSort(reverseArr, 50)).toEqual(sortedArr); - expect(BucketSort(sortedArr, 50)).toEqual(sortedArr); - }); - - it('should sort the array of numbers with the default buckets of 1', () => { - expect(BucketSort(notSortedArr)).toEqual(sortedArr); - expect(BucketSort(equalArr)).toEqual(equalArr); - expect(BucketSort(reverseArr)).toEqual(sortedArr); - expect(BucketSort(sortedArr)).toEqual(sortedArr); - }); -}); diff --git a/src/algorithms/sorting/bucket-sort/images/bucket_sort_1.png b/src/algorithms/sorting/bucket-sort/images/bucket_sort_1.png deleted file mode 100644 index da0de9172f5648c3f24955be60597ac871f3476a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11151 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 H)1dzY1gKX& diff --git a/src/algorithms/sorting/bucket-sort/images/bucket_sort_2.png b/src/algorithms/sorting/bucket-sort/images/bucket_sort_2.png deleted file mode 100644 index 7b6f32c75210c8746e0834a09bf20ec82482cd4d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12936 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 I2pI(aFLR8DQvd(} diff --git a/src/algorithms/sorting/counting-sort/CountingSort.js b/src/algorithms/sorting/counting-sort/CountingSort.js deleted file mode 100644 index 7e810dc525..0000000000 --- a/src/algorithms/sorting/counting-sort/CountingSort.js +++ /dev/null @@ -1,78 +0,0 @@ -import Sort from '../Sort'; - -export default class CountingSort extends Sort { - /** - * @param {number[]} originalArray - * @param {number} [smallestElement] - * @param {number} [biggestElement] - */ - sort(originalArray, smallestElement = undefined, biggestElement = undefined) { - // Init biggest and smallest elements in array in order to build number bucket array later. - let detectedSmallestElement = smallestElement || 0; - let detectedBiggestElement = biggestElement || 0; - - if (smallestElement === undefined || biggestElement === undefined) { - originalArray.forEach((element) => { - // Visit element. - this.callbacks.visitingCallback(element); - - // Detect biggest element. - if (this.comparator.greaterThan(element, detectedBiggestElement)) { - detectedBiggestElement = element; - } - - // Detect smallest element. - if (this.comparator.lessThan(element, detectedSmallestElement)) { - detectedSmallestElement = element; - } - }); - } - - // Init buckets array. - // This array will hold frequency of each number from originalArray. - const buckets = Array(detectedBiggestElement - detectedSmallestElement + 1).fill(0); - - originalArray.forEach((element) => { - // Visit element. - this.callbacks.visitingCallback(element); - - buckets[element - detectedSmallestElement] += 1; - }); - - // Add previous frequencies to the current one for each number in bucket - // to detect how many numbers less then current one should be standing to - // the left of current one. - for (let bucketIndex = 1; bucketIndex < buckets.length; bucketIndex += 1) { - buckets[bucketIndex] += buckets[bucketIndex - 1]; - } - - // Now let's shift frequencies to the right so that they show correct numbers. - // I.e. if we won't shift right than the value of buckets[5] will display how many - // elements less than 5 should be placed to the left of 5 in sorted array - // INCLUDING 5th. After shifting though this number will not include 5th anymore. - buckets.pop(); - buckets.unshift(0); - - // Now let's assemble sorted array. - const sortedArray = Array(originalArray.length).fill(null); - for (let elementIndex = 0; elementIndex < originalArray.length; elementIndex += 1) { - // Get the element that we want to put into correct sorted position. - const element = originalArray[elementIndex]; - - // Visit element. - this.callbacks.visitingCallback(element); - - // Get correct position of this element in sorted array. - const elementSortedPosition = buckets[element - detectedSmallestElement]; - - // Put element into correct position in sorted array. - sortedArray[elementSortedPosition] = element; - - // Increase position of current element in the bucket for future correct placements. - buckets[element - detectedSmallestElement] += 1; - } - - // Return sorted array. - return sortedArray; - } -} diff --git a/src/algorithms/sorting/counting-sort/README.md b/src/algorithms/sorting/counting-sort/README.md deleted file mode 100644 index 40a9539a22..0000000000 --- a/src/algorithms/sorting/counting-sort/README.md +++ /dev/null @@ -1,70 +0,0 @@ -# Counting Sort - -_Read this in other languages:_ -[_Português_](README.pt-BR.md) - -In computer science, **counting sort** is an algorithm for sorting -a collection of objects according to keys that are small integers; -that is, it is an integer sorting algorithm. It operates by -counting the number of objects that have each distinct key value, -and using arithmetic on those counts to determine the positions -of each key value in the output sequence. Its running time is -linear in the number of items and the difference between the -maximum and minimum key values, so it is only suitable for direct -use in situations where the variation in keys is not significantly -greater than the number of items. However, it is often used as a -subroutine in another sorting algorithm, radix sort, that can -handle larger keys more efficiently. - -Because counting sort uses key values as indexes into an array, -it is not a comparison sort, and the `Ω(n log n)` lower bound for -comparison sorting does not apply to it. Bucket sort may be used -for many of the same tasks as counting sort, with a similar time -analysis; however, compared to counting sort, bucket sort requires -linked lists, dynamic arrays or a large amount of preallocated -memory to hold the sets of items within each bucket, whereas -counting sort instead stores a single number (the count of items) -per bucket. - -Counting sorting works best when the range of numbers for each array -element is very small. - -## Algorithm - -**Step I** - -In first step we calculate the count of all the elements of the -input array `A`. Then Store the result in the count array `C`. -The way we count is depicted below. - -![Counting Sort](https://3.bp.blogspot.com/-jJchly1BkTc/WLGqCFDdvCI/AAAAAAAAAHA/luljAlz2ptMndIZNH0KLTTuQMNsfzDeFQCLcB/s1600/CSortUpdatedStepI.gif) - -**Step II** - -In second step we calculate how many elements exist in the input -array `A` which are less than or equals for the given index. -`Ci` = numbers of elements less than or equals to `i` in input array. - -![Counting Sort](https://1.bp.blogspot.com/-1vFu-VIRa9Y/WLHGuZkdF3I/AAAAAAAAAHs/8jKu2dbQee4ap9xlVcNsILrclqw0UxAVACLcB/s1600/Step-II.png) - -**Step III** - -In this step we place the input array `A` element at sorted -position by taking help of constructed count array `C` ,i.e what -we constructed in step two. We used the result array `B` to store -the sorted elements. Here we handled the index of `B` start from -zero. - -![Counting Sort](https://1.bp.blogspot.com/-xPqylngqASY/WLGq3p9n9vI/AAAAAAAAAHM/JHdtXAkJY8wYzDMBXxqarjmhpPhM0u8MACLcB/s1600/ResultArrayCS.gif) - -## Complexity - -| Name | Best | Average | Worst | Memory | Stable | Comments | -| --------------------- | :-------------: | :-----------------: | :-----------------: | :-------: | :-------: | :-------- | -| **Counting sort** | n + r | n + r | n + r | n + r | Yes | r - biggest number in array | - -## References - -- [Wikipedia](https://en.wikipedia.org/wiki/Counting_sort) -- [YouTube](https://www.youtube.com/watch?v=OKd534EWcdk&index=61&t=0s&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) -- [EfficientAlgorithms](https://efficientalgorithms.blogspot.com/2016/09/lenear-sorting-counting-sort.html) diff --git a/src/algorithms/sorting/counting-sort/README.pt-br.md b/src/algorithms/sorting/counting-sort/README.pt-br.md deleted file mode 100644 index af2c75f6af..0000000000 --- a/src/algorithms/sorting/counting-sort/README.pt-br.md +++ /dev/null @@ -1,70 +0,0 @@ -# Counting Sort - -_Leia isso em outros idiomas:_ -[_English_](README.md) - -Em ciência da computação, **counting sort** é um algoritmo para ordenar -uma coleção de objetos de acordo com chaves que são pequenos inteiros; -ou seja, é um algoritmo de ordenação de inteiros. Ele opera por -contando o número de objetos que têm cada valor de chave distinto, -e usando aritmética nessas contagens para determinar as posições -de cada valor de chave na sequência de saída. Seu tempo de execução é -linear no número de itens e a diferença entre o -valores de chave máximo e mínimo, portanto, é adequado apenas para -uso em situações em que a variação de tonalidades não é significativamente -maior que o número de itens. No entanto, muitas vezes é usado como -sub-rotina em outro algoritmo de ordenação, radix sort, que pode -lidar com chaves maiores de forma mais eficiente. - -Como a classificação por contagem usa valores-chave como índices em um vetor, -não é uma ordenação por comparação, e o limite inferior `Ω(n log n)` para -a ordenação por comparação não se aplica a ele. A classificação por bucket pode ser usada -para muitas das mesmas tarefas que a ordenação por contagem, com um tempo semelhante -análise; no entanto, em comparação com a classificação por contagem, a classificação por bucket requer -listas vinculadas, arrays dinâmicos ou uma grande quantidade de pré-alocados -memória para armazenar os conjuntos de itens dentro de cada bucket, enquanto -A classificação por contagem armazena um único número (a contagem de itens) -por balde. - -A classificação por contagem funciona melhor quando o intervalo de números para cada -elemento do vetor é muito pequeno. - -## Algoritmo - -**Passo I** - -Na primeira etapa, calculamos a contagem de todos os elementos do -vetor de entrada 'A'. Em seguida, armazene o resultado no vetor de contagem `C`. -A maneira como contamos é descrita abaixo. - -![Counting Sort](https://3.bp.blogspot.com/-jJchly1BkTc/WLGqCFDdvCI/AAAAAAAAAHA/luljAlz2ptMndIZNH0KLTTuQMNsfzDeFQCLcB/s1600/CSortUpdatedStepI.gif) - -**Passo II** - -Na segunda etapa, calculamos quantos elementos existem na entrada -do vetor `A` que são menores ou iguais para o índice fornecido. -`Ci` = números de elementos menores ou iguais a `i` no vetor de entrada. - -![Counting Sort](https://1.bp.blogspot.com/-1vFu-VIRa9Y/WLHGuZkdF3I/AAAAAAAAAHs/8jKu2dbQee4ap9xlVcNsILrclqw0UxAVACLcB/s1600/Step-II.png) - -**Passo III** - -Nesta etapa, colocamos o elemento `A` do vetor de entrada em classificado -posição usando a ajuda do vetor de contagem construída `C`, ou seja, o que -construímos no passo dois. Usamos o vetor de resultados `B` para armazenar -os elementos ordenados. Aqui nós lidamos com o índice de `B` começando de -zero. - -![Counting Sort](https://1.bp.blogspot.com/-xPqylngqASY/WLGq3p9n9vI/AAAAAAAAAHM/JHdtXAkJY8wYzDMBXxqarjmhpPhM0u8MACLcB/s1600/ResultArrayCS.gif) - -## Complexidade - -| Nome | Melhor | Média | Pior | Memória | Estável | Comentários | -| --------------------- | :-------------: | :-----------------: | :-----------------: | :-------: | :-------: | :-------- | -| **Counting sort** | n + r | n + r | n + r | n + r | Sim | r - Maior número no vetor | - -## Referências - -- [Wikipedia](https://en.wikipedia.org/wiki/Counting_sort) -- [YouTube](https://www.youtube.com/watch?v=OKd534EWcdk&index=61&t=0s&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) -- [EfficientAlgorithms](https://efficientalgorithms.blogspot.com/2016/09/lenear-sorting-counting-sort.html) diff --git a/src/algorithms/sorting/counting-sort/__test__/CountingSort.test.js b/src/algorithms/sorting/counting-sort/__test__/CountingSort.test.js deleted file mode 100644 index 9bf5d5c513..0000000000 --- a/src/algorithms/sorting/counting-sort/__test__/CountingSort.test.js +++ /dev/null @@ -1,74 +0,0 @@ -import CountingSort from '../CountingSort'; -import { - equalArr, - notSortedArr, - reverseArr, - sortedArr, - SortTester, -} from '../../SortTester'; - -// Complexity constants. -const SORTED_ARRAY_VISITING_COUNT = 60; -const NOT_SORTED_ARRAY_VISITING_COUNT = 60; -const REVERSE_SORTED_ARRAY_VISITING_COUNT = 60; -const EQUAL_ARRAY_VISITING_COUNT = 60; - -describe('CountingSort', () => { - it('should sort array', () => { - SortTester.testSort(CountingSort); - }); - - it('should sort negative numbers', () => { - SortTester.testNegativeNumbersSort(CountingSort); - }); - - it('should allow to use specify max/min integer value in array to make sorting faster', () => { - const visitingCallback = jest.fn(); - const sorter = new CountingSort({ visitingCallback }); - - // Detect biggest number in array in prior. - const biggestElement = Math.max(...notSortedArr); - - // Detect smallest number in array in prior. - const smallestElement = Math.min(...notSortedArr); - - const sortedArray = sorter.sort(notSortedArr, smallestElement, biggestElement); - - expect(sortedArray).toEqual(sortedArr); - // Normally visitingCallback is being called 60 times but in this case - // it should be called only 40 times. - expect(visitingCallback).toHaveBeenCalledTimes(40); - }); - - it('should visit EQUAL array element specified number of times', () => { - SortTester.testAlgorithmTimeComplexity( - CountingSort, - equalArr, - EQUAL_ARRAY_VISITING_COUNT, - ); - }); - - it('should visit SORTED array element specified number of times', () => { - SortTester.testAlgorithmTimeComplexity( - CountingSort, - sortedArr, - SORTED_ARRAY_VISITING_COUNT, - ); - }); - - it('should visit NOT SORTED array element specified number of times', () => { - SortTester.testAlgorithmTimeComplexity( - CountingSort, - notSortedArr, - NOT_SORTED_ARRAY_VISITING_COUNT, - ); - }); - - it('should visit REVERSE SORTED array element specified number of times', () => { - SortTester.testAlgorithmTimeComplexity( - CountingSort, - reverseArr, - REVERSE_SORTED_ARRAY_VISITING_COUNT, - ); - }); -}); diff --git a/src/algorithms/sorting/heap-sort/HeapSort.js b/src/algorithms/sorting/heap-sort/HeapSort.js deleted file mode 100644 index 06e58e1ef2..0000000000 --- a/src/algorithms/sorting/heap-sort/HeapSort.js +++ /dev/null @@ -1,30 +0,0 @@ -import Sort from '../Sort'; -import MinHeap from '../../../data-structures/heap/MinHeap'; - -export default class HeapSort extends Sort { - sort(originalArray) { - const sortedArray = []; - const minHeap = new MinHeap(this.callbacks.compareCallback); - - // Insert all array elements to the heap. - originalArray.forEach((element) => { - // Call visiting callback. - this.callbacks.visitingCallback(element); - - minHeap.add(element); - }); - - // Now we have min heap with minimal element always on top. - // Let's poll that minimal element one by one and thus form the sorted array. - while (!minHeap.isEmpty()) { - const nextMinElement = minHeap.poll(); - - // Call visiting callback. - this.callbacks.visitingCallback(nextMinElement); - - sortedArray.push(nextMinElement); - } - - return sortedArray; - } -} diff --git a/src/algorithms/sorting/heap-sort/README.md b/src/algorithms/sorting/heap-sort/README.md deleted file mode 100644 index 2370776f1b..0000000000 --- a/src/algorithms/sorting/heap-sort/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# Heap Sort - -_Read this in other languages:_ -[_Português_](README.pt-BR.md) - -Heapsort is a comparison-based sorting algorithm. -Heapsort can be thought of as an improved selection -sort: like that algorithm, it divides its input into -a sorted and an unsorted region, and it iteratively -shrinks the unsorted region by extracting the largest -element and moving that to the sorted region. The -improvement consists of the use of a heap data structure -rather than a linear-time search to find the maximum. - -![Algorithm Visualization](https://upload.wikimedia.org/wikipedia/commons/1/1b/Sorting_heapsort_anim.gif) - -![Algorithm Visualization](https://upload.wikimedia.org/wikipedia/commons/4/4d/Heapsort-example.gif) - -## Complexity - -| Name | Best | Average | Worst | Memory | Stable | Comments | -| --------------------- | :-------------: | :-----------------: | :-----------------: | :-------: | :-------: | :-------- | -| **Heap sort** | n log(n) | n log(n) | n log(n) | 1 | No | | - -## References - -[Wikipedia](https://en.wikipedia.org/wiki/Heapsort) diff --git a/src/algorithms/sorting/heap-sort/README.pt-BR.md b/src/algorithms/sorting/heap-sort/README.pt-BR.md deleted file mode 100644 index 6d5a2d4849..0000000000 --- a/src/algorithms/sorting/heap-sort/README.pt-BR.md +++ /dev/null @@ -1,20 +0,0 @@ -# Heap Sort - -_Leia isso em outros idiomas:_ -[_English_](README.md) - -Heapsort é um algoritmo de ordenação baseado em comparação. O Heapsort pode ser pensado como uma seleção aprimorada sort: como esse algoritmo, ele divide sua entrada em uma região classificada e uma região não classificada, e iterativamente encolhe a região não classificada extraindo o maior elemento e movendo-o para a região classificada. A melhoria consiste no uso de uma estrutura de dados heap em vez de uma busca em tempo linear para encontrar o máximo. - -![Visualização do Algoritmo](https://upload.wikimedia.org/wikipedia/commons/1/1b/Sorting_heapsort_anim.gif) - -![Visualização do Algoritmo](https://upload.wikimedia.org/wikipedia/commons/4/4d/Heapsort-example.gif) - -## Complexidade - -| Nome | Melhor | Média | Pior | Memória | Estável | Comentários | -| --------------------- | :-------------: | :-----------------: | :-----------------: | :-------: | :-------: | :-------- | -| **Heap sort** | n log(n) | n log(n) | n log(n) | 1 | Não | | - -## Referências - -[Wikipedia](https://en.wikipedia.org/wiki/Heapsort) diff --git a/src/algorithms/sorting/heap-sort/__test__/HeapSort.test.js b/src/algorithms/sorting/heap-sort/__test__/HeapSort.test.js deleted file mode 100644 index 75f690d438..0000000000 --- a/src/algorithms/sorting/heap-sort/__test__/HeapSort.test.js +++ /dev/null @@ -1,62 +0,0 @@ -import HeapSort from '../HeapSort'; -import { - equalArr, - notSortedArr, - reverseArr, - sortedArr, - SortTester, -} from '../../SortTester'; - -// Complexity constants. -// These numbers don't take into account up/dow heapifying of the heap. -// Thus these numbers are higher in reality. -const SORTED_ARRAY_VISITING_COUNT = 40; -const NOT_SORTED_ARRAY_VISITING_COUNT = 40; -const REVERSE_SORTED_ARRAY_VISITING_COUNT = 40; -const EQUAL_ARRAY_VISITING_COUNT = 40; - -describe('HeapSort', () => { - it('should sort array', () => { - SortTester.testSort(HeapSort); - }); - - it('should sort array with custom comparator', () => { - SortTester.testSortWithCustomComparator(HeapSort); - }); - - it('should sort negative numbers', () => { - SortTester.testNegativeNumbersSort(HeapSort); - }); - - it('should visit EQUAL array element specified number of times', () => { - SortTester.testAlgorithmTimeComplexity( - HeapSort, - equalArr, - EQUAL_ARRAY_VISITING_COUNT, - ); - }); - - it('should visit SORTED array element specified number of times', () => { - SortTester.testAlgorithmTimeComplexity( - HeapSort, - sortedArr, - SORTED_ARRAY_VISITING_COUNT, - ); - }); - - it('should visit NOT SORTED array element specified number of times', () => { - SortTester.testAlgorithmTimeComplexity( - HeapSort, - notSortedArr, - NOT_SORTED_ARRAY_VISITING_COUNT, - ); - }); - - it('should visit REVERSE SORTED array element specified number of times', () => { - SortTester.testAlgorithmTimeComplexity( - HeapSort, - reverseArr, - REVERSE_SORTED_ARRAY_VISITING_COUNT, - ); - }); -}); diff --git a/src/algorithms/sorting/insertion-sort/InsertionSort.js b/src/algorithms/sorting/insertion-sort/InsertionSort.js deleted file mode 100644 index 7a80161379..0000000000 --- a/src/algorithms/sorting/insertion-sort/InsertionSort.js +++ /dev/null @@ -1,39 +0,0 @@ -import Sort from '../Sort'; - -export default class InsertionSort extends Sort { - sort(originalArray) { - const array = [...originalArray]; - - // Go through all array elements... - for (let i = 1; i < array.length; i += 1) { - let currentIndex = i; - - // Call visiting callback. - this.callbacks.visitingCallback(array[i]); - - // Check if previous element is greater than current element. - // If so, swap the two elements. - while ( - array[currentIndex - 1] !== undefined - && this.comparator.lessThan(array[currentIndex], array[currentIndex - 1]) - ) { - // Call visiting callback. - this.callbacks.visitingCallback(array[currentIndex - 1]); - - // Swap the elements. - [ - array[currentIndex - 1], - array[currentIndex], - ] = [ - array[currentIndex], - array[currentIndex - 1], - ]; - - // Shift current index left. - currentIndex -= 1; - } - } - - return array; - } -} diff --git a/src/algorithms/sorting/insertion-sort/README.md b/src/algorithms/sorting/insertion-sort/README.md deleted file mode 100644 index 8bc922683f..0000000000 --- a/src/algorithms/sorting/insertion-sort/README.md +++ /dev/null @@ -1,24 +0,0 @@ -# Insertion Sort - -_Read this in other languages:_ -[_Português_](README.pt-BR.md) - -Insertion sort is a simple sorting algorithm that builds -the final sorted array (or list) one item at a time. -It is much less efficient on large lists than more -advanced algorithms such as quicksort, heapsort, or merge -sort. - -![Algorithm Visualization](https://upload.wikimedia.org/wikipedia/commons/4/42/Insertion_sort.gif) - -![Algorithm Visualization](https://upload.wikimedia.org/wikipedia/commons/0/0f/Insertion-sort-example-300px.gif) - -## Complexity - -| Name | Best | Average | Worst | Memory | Stable | Comments | -| --------------------- | :-------------: | :-----------------: | :-----------------: | :-------: | :-------: | :-------- | -| **Insertion sort** | n | n2 | n2 | 1 | Yes | | - -## References - -[Wikipedia](https://en.wikipedia.org/wiki/Insertion_sort) diff --git a/src/algorithms/sorting/insertion-sort/README.pt-BR.md b/src/algorithms/sorting/insertion-sort/README.pt-BR.md deleted file mode 100644 index a36d2742be..0000000000 --- a/src/algorithms/sorting/insertion-sort/README.pt-BR.md +++ /dev/null @@ -1,22 +0,0 @@ -# Insertion Sort - -_Leia isso em outros idiomas:_ -[_English_](README.md) - -A ordenação por inserção é um algoritmo de ordenação simples que criaa matriz classificada final (ou lista) um item de cada vez. -É muito menos eficiente em grandes listas do que mais algoritmos avançados, como quicksort, heapsort ou merge -ordenar. - -![Visualização do Algoritmo](https://upload.wikimedia.org/wikipedia/commons/4/42/Insertion_sort.gif) - -![Visualização do Algoritmo](https://upload.wikimedia.org/wikipedia/commons/0/0f/Insertion-sort-example-300px.gif) - -## Complexidade - -| Nome | Melhor | Média | Pior | Memória | Estável | Comentários | -| --------------------- | :-------------: | :-----------------: | :-----------------: | :-------: | :-------: | :-------- | -| **Insertion sort** | n | n2 | n2 | 1 | Sim | | - -## Referências - -[Wikipedia](https://en.wikipedia.org/wiki/Insertion_sort) diff --git a/src/algorithms/sorting/insertion-sort/__test__/InsertionSort.test.js b/src/algorithms/sorting/insertion-sort/__test__/InsertionSort.test.js deleted file mode 100644 index 8453b7db16..0000000000 --- a/src/algorithms/sorting/insertion-sort/__test__/InsertionSort.test.js +++ /dev/null @@ -1,64 +0,0 @@ -import InsertionSort from '../InsertionSort'; -import { - equalArr, - notSortedArr, - reverseArr, - sortedArr, - SortTester, -} from '../../SortTester'; - -// Complexity constants. -const SORTED_ARRAY_VISITING_COUNT = 19; -const NOT_SORTED_ARRAY_VISITING_COUNT = 100; -const REVERSE_SORTED_ARRAY_VISITING_COUNT = 209; -const EQUAL_ARRAY_VISITING_COUNT = 19; - -describe('InsertionSort', () => { - it('should sort array', () => { - SortTester.testSort(InsertionSort); - }); - - it('should sort array with custom comparator', () => { - SortTester.testSortWithCustomComparator(InsertionSort); - }); - - it('should do stable sorting', () => { - SortTester.testSortStability(InsertionSort); - }); - - it('should sort negative numbers', () => { - SortTester.testNegativeNumbersSort(InsertionSort); - }); - - it('should visit EQUAL array element specified number of times', () => { - SortTester.testAlgorithmTimeComplexity( - InsertionSort, - equalArr, - EQUAL_ARRAY_VISITING_COUNT, - ); - }); - - it('should visit SORTED array element specified number of times', () => { - SortTester.testAlgorithmTimeComplexity( - InsertionSort, - sortedArr, - SORTED_ARRAY_VISITING_COUNT, - ); - }); - - it('should visit NOT SORTED array element specified number of times', () => { - SortTester.testAlgorithmTimeComplexity( - InsertionSort, - notSortedArr, - NOT_SORTED_ARRAY_VISITING_COUNT, - ); - }); - - it('should visit REVERSE SORTED array element specified number of times', () => { - SortTester.testAlgorithmTimeComplexity( - InsertionSort, - reverseArr, - REVERSE_SORTED_ARRAY_VISITING_COUNT, - ); - }); -}); diff --git a/src/algorithms/sorting/merge-sort/MergeSort.js b/src/algorithms/sorting/merge-sort/MergeSort.js deleted file mode 100644 index 23fca74e49..0000000000 --- a/src/algorithms/sorting/merge-sort/MergeSort.js +++ /dev/null @@ -1,60 +0,0 @@ -import Sort from '../Sort'; - -export default class MergeSort extends Sort { - sort(originalArray) { - // Call visiting callback. - this.callbacks.visitingCallback(null); - - // If array is empty or consists of one element then return this array since it is sorted. - if (originalArray.length <= 1) { - return originalArray; - } - - // Split array on two halves. - const middleIndex = Math.floor(originalArray.length / 2); - const leftArray = originalArray.slice(0, middleIndex); - const rightArray = originalArray.slice(middleIndex, originalArray.length); - - // Sort two halves of split array - const leftSortedArray = this.sort(leftArray); - const rightSortedArray = this.sort(rightArray); - - // Merge two sorted arrays into one. - return this.mergeSortedArrays(leftSortedArray, rightSortedArray); - } - - mergeSortedArrays(leftArray, rightArray) { - const sortedArray = []; - - // Use array pointers to exclude old elements after they have been added to the sorted array. - let leftIndex = 0; - let rightIndex = 0; - - while (leftIndex < leftArray.length && rightIndex < rightArray.length) { - let minElement = null; - - // Find the minimum element between the left and right array. - if (this.comparator.lessThanOrEqual(leftArray[leftIndex], rightArray[rightIndex])) { - minElement = leftArray[leftIndex]; - // Increment index pointer to the right - leftIndex += 1; - } else { - minElement = rightArray[rightIndex]; - // Increment index pointer to the right - rightIndex += 1; - } - - // Add the minimum element to the sorted array. - sortedArray.push(minElement); - - // Call visiting callback. - this.callbacks.visitingCallback(minElement); - } - - // There will be elements remaining from either the left OR the right - // Concatenate the remaining elements into the sorted array - return sortedArray - .concat(leftArray.slice(leftIndex)) - .concat(rightArray.slice(rightIndex)); - } -} diff --git a/src/algorithms/sorting/merge-sort/README.ko-KR.md b/src/algorithms/sorting/merge-sort/README.ko-KR.md deleted file mode 100644 index 5447fd217e..0000000000 --- a/src/algorithms/sorting/merge-sort/README.ko-KR.md +++ /dev/null @@ -1,22 +0,0 @@ -# 병합 정렬 - -컴퓨터과학에서, 병합 정렬(일반적으로 mergesort라고 쓰는)은 효율적이고, 범용적인, 비교 기반의 정렬 알고리즘입니다. 대부분의 구현들은 안정적인 정렬을 만들어내며, 이는 정렬된 산출물에서 동일한 요소들의 입력 순서가 유지된다는 것을 의미합니다. 병합 정렬은 1945년에 John von Neumann이 만든 분할 정복 알고리즘입니다. - -병합 정렬의 예시입니다. 우선 리스트를 가장 작은 단위로 나누고(한 개의 요소), 두 개의 인접한 리스트를 정렬하고 병합하기 위해 각 요소와 인접한 리스트를 비교합니다. 마지막으로 모든 요소들은 정렬되고 병합됩니다. - -![Merge Sort](https://upload.wikimedia.org/wikipedia/commons/c/cc/Merge-sort-example-300px.gif) - -재귀적인 병합 정렬 알고리즘은 7개의 정수값을 가진 배열을 정렬하는데 사용됩니다. 다음은 합병 정렬을 모방하기 위해 사람이 취하는 단계입니다.(하향식) - -![Merge Sort](https://upload.wikimedia.org/wikipedia/commons/e/e6/Merge_sort_algorithm_diagram.svg) - -## 복잡도 - -| Name | Best | Average | Worst | Memory | Stable | Comments | -| --------------------- | :-------------: | :-----------------: | :-----------------: | :-------: | :-------: | :-------- | -| **Merge sort** | n log(n) | n log(n) | n log(n) | n | Yes | | - -## 참조 - -- [Wikipedia](https://en.wikipedia.org/wiki/Merge_sort) -- [YouTube](https://www.youtube.com/watch?v=KF2j-9iSf4Q&index=27&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) diff --git a/src/algorithms/sorting/merge-sort/README.md b/src/algorithms/sorting/merge-sort/README.md deleted file mode 100644 index 2931329482..0000000000 --- a/src/algorithms/sorting/merge-sort/README.md +++ /dev/null @@ -1,38 +0,0 @@ -# Merge Sort - -_Read this in other languages:_ -[_한국어_](README.ko-KR.md), -[_Português_](README.pt-BR.md) - -In computer science, merge sort (also commonly spelled -mergesort) is an efficient, general-purpose, -comparison-based sorting algorithm. Most implementations -produce a stable sort, which means that the implementation -preserves the input order of equal elements in the sorted -output. Mergesort is a divide and conquer algorithm that -was invented by John von Neumann in 1945. - -An example of merge sort. First divide the list into -the smallest unit (1 element), then compare each -element with the adjacent list to sort and merge the -two adjacent lists. Finally all the elements are sorted -and merged. - -![Merge Sort](https://upload.wikimedia.org/wikipedia/commons/c/cc/Merge-sort-example-300px.gif) - -A recursive merge sort algorithm used to sort an array of 7 -integer values. These are the steps a human would take to -emulate merge sort (top-down). - -![Merge Sort](https://upload.wikimedia.org/wikipedia/commons/e/e6/Merge_sort_algorithm_diagram.svg) - -## Complexity - -| Name | Best | Average | Worst | Memory | Stable | Comments | -| --------------------- | :-------------: | :-----------------: | :-----------------: | :-------: | :-------: | :-------- | -| **Merge sort** | n log(n) | n log(n) | n log(n) | n | Yes | | - -## References - -- [Wikipedia](https://en.wikipedia.org/wiki/Merge_sort) -- [YouTube](https://www.youtube.com/watch?v=KF2j-9iSf4Q&index=27&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) diff --git a/src/algorithms/sorting/merge-sort/README.pt-BR.md b/src/algorithms/sorting/merge-sort/README.pt-BR.md deleted file mode 100644 index f7be449f04..0000000000 --- a/src/algorithms/sorting/merge-sort/README.pt-BR.md +++ /dev/null @@ -1,38 +0,0 @@ -# Merge Sort - -_Leia isso em outros idiomas:_ -[_한국어_](README.ko-KR.md), -[_English_](README.md) - -Em ciência da computação, merge sort (também comumente escrito -mergesort) é uma ferramenta eficiente, de propósito geral, -algoritmo de ordenação baseado em comparação. A maioria das implementações -produzir uma classificação estável, o que significa que a implementação -preserva a ordem de entrada de elementos iguais na ordenação -resultado. Mergesort é um algoritmo de divisão e conquista que -foi inventado por John von Neumann em 1945. - -Um exemplo de classificação de mesclagem. Primeiro divida a lista em -a menor unidade (1 elemento), então compare cada -elemento com a lista adjacente para classificar e mesclar o -duas listas adjacentes. Finalmente todos os elementos são ordenados -e mesclado. - -![Merge Sort](https://upload.wikimedia.org/wikipedia/commons/c/cc/Merge-sort-example-300px.gif) - -Um algoritmo de classificação de mesclagem recursivo usado para classificar uma matriz de 7 -valores inteiros. Estes são os passos que um ser humano daria para -emular merge sort (top-down). - -![Merge Sort](https://upload.wikimedia.org/wikipedia/commons/e/e6/Merge_sort_algorithm_diagram.svg) - -## Complexidade - -| Nome | Melhor | Média | Pior | Memória | Estável | Comentários | -| --------------------- | :-------------: | :-----------------: | :-----------------: | :-------: | :-------: | :-------- | -| **Merge sort** | n log(n) | n log(n) | n log(n) | n | Sim | | - -## Referências - -- [Wikipedia](https://en.wikipedia.org/wiki/Merge_sort) -- [YouTube](https://www.youtube.com/watch?v=KF2j-9iSf4Q&index=27&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) diff --git a/src/algorithms/sorting/merge-sort/__test__/MergeSort.test.js b/src/algorithms/sorting/merge-sort/__test__/MergeSort.test.js deleted file mode 100644 index 0112003bb8..0000000000 --- a/src/algorithms/sorting/merge-sort/__test__/MergeSort.test.js +++ /dev/null @@ -1,64 +0,0 @@ -import MergeSort from '../MergeSort'; -import { - equalArr, - notSortedArr, - reverseArr, - sortedArr, - SortTester, -} from '../../SortTester'; - -// Complexity constants. -const SORTED_ARRAY_VISITING_COUNT = 79; -const NOT_SORTED_ARRAY_VISITING_COUNT = 102; -const REVERSE_SORTED_ARRAY_VISITING_COUNT = 87; -const EQUAL_ARRAY_VISITING_COUNT = 79; - -describe('MergeSort', () => { - it('should sort array', () => { - SortTester.testSort(MergeSort); - }); - - it('should sort array with custom comparator', () => { - SortTester.testSortWithCustomComparator(MergeSort); - }); - - it('should do stable sorting', () => { - SortTester.testSortStability(MergeSort); - }); - - it('should sort negative numbers', () => { - SortTester.testNegativeNumbersSort(MergeSort); - }); - - it('should visit EQUAL array element specified number of times', () => { - SortTester.testAlgorithmTimeComplexity( - MergeSort, - equalArr, - EQUAL_ARRAY_VISITING_COUNT, - ); - }); - - it('should visit SORTED array element specified number of times', () => { - SortTester.testAlgorithmTimeComplexity( - MergeSort, - sortedArr, - SORTED_ARRAY_VISITING_COUNT, - ); - }); - - it('should visit NOT SORTED array element specified number of times', () => { - SortTester.testAlgorithmTimeComplexity( - MergeSort, - notSortedArr, - NOT_SORTED_ARRAY_VISITING_COUNT, - ); - }); - - it('should visit REVERSE SORTED array element specified number of times', () => { - SortTester.testAlgorithmTimeComplexity( - MergeSort, - reverseArr, - REVERSE_SORTED_ARRAY_VISITING_COUNT, - ); - }); -}); diff --git a/src/algorithms/sorting/quick-sort/QuickSort.js b/src/algorithms/sorting/quick-sort/QuickSort.js deleted file mode 100644 index 1c63c86e8b..0000000000 --- a/src/algorithms/sorting/quick-sort/QuickSort.js +++ /dev/null @@ -1,48 +0,0 @@ -import Sort from '../Sort'; - -export default class QuickSort extends Sort { - /** - * @param {*[]} originalArray - * @return {*[]} - */ - sort(originalArray) { - // Clone original array to prevent it from modification. - const array = [...originalArray]; - - // If array has less than or equal to one elements then it is already sorted. - if (array.length <= 1) { - return array; - } - - // Init left and right arrays. - const leftArray = []; - const rightArray = []; - - // Take the first element of array as a pivot. - const pivotElement = array.shift(); - const centerArray = [pivotElement]; - - // Split all array elements between left, center and right arrays. - while (array.length) { - const currentElement = array.shift(); - - // Call visiting callback. - this.callbacks.visitingCallback(currentElement); - - if (this.comparator.equal(currentElement, pivotElement)) { - centerArray.push(currentElement); - } else if (this.comparator.lessThan(currentElement, pivotElement)) { - leftArray.push(currentElement); - } else { - rightArray.push(currentElement); - } - } - - // Sort left and right arrays. - const leftArraySorted = this.sort(leftArray); - const rightArraySorted = this.sort(rightArray); - - // Let's now join sorted left array with center array and with sorted right array. - return leftArraySorted.concat(centerArray, rightArraySorted); - } -} diff --git a/src/algorithms/sorting/quick-sort/QuickSortInPlace.js b/src/algorithms/sorting/quick-sort/QuickSortInPlace.js deleted file mode 100644 index d02298b230..0000000000 --- a/src/algorithms/sorting/quick-sort/QuickSortInPlace.js +++ /dev/null @@ -1,78 +0,0 @@ -import Sort from '../Sort'; - -export default class QuickSortInPlace extends Sort { - /** Sorting in place avoids unnecessary use of additional memory, but modifies input array. - * - * This process is difficult to describe, but much clearer with a visualization: - * @see: https://www.hackerearth.com/practice/algorithms/sorting/quick-sort/visualize/ - * - * @param {*[]} originalArray - Not sorted array. - * @param {number} inputLowIndex - * @param {number} inputHighIndex - * @param {boolean} recursiveCall - * @return {*[]} - Sorted array. - */ - sort( - originalArray, - inputLowIndex = 0, - inputHighIndex = originalArray.length - 1, - recursiveCall = false, - ) { - // Copies array on initial call, and then sorts in place. - const array = recursiveCall ? originalArray : [...originalArray]; - - /** - * The partitionArray() operates on the subarray between lowIndex and highIndex, inclusive. - * It arbitrarily chooses the last element in the subarray as the pivot. - * Then, it partially sorts the subarray into elements than are less than the pivot, - * and elements that are greater than or equal to the pivot. - * Each time partitionArray() is executed, the pivot element is in its final sorted position. - * - * @param {number} lowIndex - * @param {number} highIndex - * @return {number} - */ - const partitionArray = (lowIndex, highIndex) => { - /** - * Swaps two elements in array. - * @param {number} leftIndex - * @param {number} rightIndex - */ - const swap = (leftIndex, rightIndex) => { - const temp = array[leftIndex]; - array[leftIndex] = array[rightIndex]; - array[rightIndex] = temp; - }; - - const pivot = array[highIndex]; - // visitingCallback is used for time-complexity analysis. - this.callbacks.visitingCallback(pivot); - - let partitionIndex = lowIndex; - for (let currentIndex = lowIndex; currentIndex < highIndex; currentIndex += 1) { - if (this.comparator.lessThan(array[currentIndex], pivot)) { - swap(partitionIndex, currentIndex); - partitionIndex += 1; - } - } - - // The element at the partitionIndex is guaranteed to be greater than or equal to pivot. - // All elements to the left of partitionIndex are guaranteed to be less than pivot. - // Swapping the pivot with the partitionIndex therefore places the pivot in its - // final sorted position. - swap(partitionIndex, highIndex); - - return partitionIndex; - }; - - // Base case is when low and high converge. - if (inputLowIndex < inputHighIndex) { - const partitionIndex = partitionArray(inputLowIndex, inputHighIndex); - const RECURSIVE_CALL = true; - this.sort(array, inputLowIndex, partitionIndex - 1, RECURSIVE_CALL); - this.sort(array, partitionIndex + 1, inputHighIndex, RECURSIVE_CALL); - } - - return array; - } -} diff --git a/src/algorithms/sorting/quick-sort/README.md b/src/algorithms/sorting/quick-sort/README.md deleted file mode 100644 index 9dcec0f12f..0000000000 --- a/src/algorithms/sorting/quick-sort/README.md +++ /dev/null @@ -1,39 +0,0 @@ -# Quicksort - -_Read this in other languages:_ -[_简体中文_](README.zh-CN.md), -[_Português_](README.pt-BR.md) - -Quicksort is a divide and conquer algorithm. -Quicksort first divides a large array into two smaller -sub-arrays: the low elements and the high elements. -Quicksort can then recursively sort the sub-arrays - -The steps are: - -1. Pick an element, called a pivot, from the array. -2. Partitioning: reorder the array so that all elements with -values less than the pivot come before the pivot, while all -elements with values greater than the pivot come after it -(equal values can go either way). After this partitioning, -the pivot is in its final position. This is called the -partition operation. -3. Recursively apply the above steps to the sub-array of -elements with smaller values and separately to the -sub-array of elements with greater values. - -Animated visualization of the quicksort algorithm. -The horizontal lines are pivot values. - -![Quicksort](https://upload.wikimedia.org/wikipedia/commons/6/6a/Sorting_quicksort_anim.gif) - -## Complexity - -| Name | Best | Average | Worst | Memory | Stable | Comments | -| --------------------- | :-------------: | :-----------------: | :-----------------: | :-------: | :-------: | :-------- | -| **Quick sort** | n log(n) | n log(n) | n2 | log(n) | No | Quicksort is usually done in-place with O(log(n)) stack space | - -## References - -- [Wikipedia](https://en.wikipedia.org/wiki/Quicksort) -- [YouTube](https://www.youtube.com/watch?v=SLauY6PpjW4&index=28&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) diff --git a/src/algorithms/sorting/quick-sort/README.pt-BR.md b/src/algorithms/sorting/quick-sort/README.pt-BR.md deleted file mode 100644 index ca3a45699f..0000000000 --- a/src/algorithms/sorting/quick-sort/README.pt-BR.md +++ /dev/null @@ -1,39 +0,0 @@ -# Quicksort - -_Leia isso em outros idiomas:_ -[_简体中文_](README.zh-CN.md), -[_English_](README.md) - -Quicksort é um algoritmo de dividir para conquistar. -Quicksort primeiro divide uma grande matriz em duas menores -submatrizes: os elementos baixos e os elementos altos. -O Quicksort pode então classificar recursivamente as submatrizes. - -As etapas são: - -1. Escolha um elemento, denominado pivô, na matriz. -2. Particionamento: reordene a matriz para que todos os elementos com -valores menores que o pivô estejam antes do pivô, enquanto todos -elementos com valores maiores do que o pivô vêm depois dele -(valores iguais podem ser usados em qualquer direção). Após este particionamento, -o pivô está em sua posição final. Isso é chamado de -operação de partição. -3. Aplique recursivamente as etapas acima à submatriz de -elementos com valores menores e separadamente para o -submatriz de elementos com valores maiores. - -Visualização animada do algoritmo quicksort. -As linhas horizontais são valores dinâmicos. - -![Quicksort](https://upload.wikimedia.org/wikipedia/commons/6/6a/Sorting_quicksort_anim.gif) - -## Complexidade - -| Nome | Melhor | Média | Pior | Memória | Estável | Comentários | -| --------------------- | :-------------: | :-----------------: | :-----------------: | :-------: | :-------: | :-------- | -| **Quick sort** | n log(n) | n log(n) | n2 | log(n) | Não | Quicksort geralmente é feito no local com espaço de pilha O(log(n)) | - -## Referências - -- [Wikipedia](https://pt.wikipedia.org/wiki/Quicksort) -- [YouTube](https://www.youtube.com/watch?v=SLauY6PpjW4&index=28&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) diff --git a/src/algorithms/sorting/quick-sort/README.zh-CN.md b/src/algorithms/sorting/quick-sort/README.zh-CN.md deleted file mode 100644 index 96b2e44de8..0000000000 --- a/src/algorithms/sorting/quick-sort/README.zh-CN.md +++ /dev/null @@ -1,27 +0,0 @@ -# 快速排序 - -快速排序是一种分而治之的算法。快速排序首先将一个大数组分成两个较小的子数组:比某个数小的元素和比某个数大的元素。然后快速排序可以递归地对子数组进行排序。 - -步骤是: - -1. 从数组中选择一个元素,称为基点 - -2. 分区:对数组重新排序,使所有值小于基点的元素都在它左边,而所有值大于基点的元素都在它右边(相等的值可以放在任何一边)。在此分区之后,基点处于其最终位置(左边和右边的中间位置)。这称为分区操作。 - -3. 递归地将上述步骤应用于左边的数组和右边的数组。 - -快速排序算法的动画可视化。水平线是基点值。 - -![Quicksort](https://upload.wikimedia.org/wikipedia/commons/6/6a/Sorting_quicksort_anim.gif) - -## 复杂度 - -| Name | Best | Average | Worst | Memory | Stable | Comments | -| -------------- | :-----------: | :-----------: | :-----------: | :----: | :----: | :------------------------------------------------------------ | -| **Quick sort** | n log(n) | n log(n) | n2 | log(n) | No | Quicksort is usually done in-place with O(log(n)) stack space | - -## 引用 - -- [Wikipedia](https://en.wikipedia.org/wiki/Quicksort) - -- [YouTube](https://www.youtube.com/watch?v=SLauY6PpjW4&index=28&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) diff --git a/src/algorithms/sorting/quick-sort/__test__/QuickSort.test.js b/src/algorithms/sorting/quick-sort/__test__/QuickSort.test.js deleted file mode 100644 index 71c1fe71e0..0000000000 --- a/src/algorithms/sorting/quick-sort/__test__/QuickSort.test.js +++ /dev/null @@ -1,64 +0,0 @@ -import QuickSort from '../QuickSort'; -import { - equalArr, - notSortedArr, - reverseArr, - sortedArr, - SortTester, -} from '../../SortTester'; - -// Complexity constants. -const SORTED_ARRAY_VISITING_COUNT = 190; -const NOT_SORTED_ARRAY_VISITING_COUNT = 62; -const REVERSE_SORTED_ARRAY_VISITING_COUNT = 190; -const EQUAL_ARRAY_VISITING_COUNT = 19; - -describe('QuickSort', () => { - it('should sort array', () => { - SortTester.testSort(QuickSort); - }); - - it('should sort array with custom comparator', () => { - SortTester.testSortWithCustomComparator(QuickSort); - }); - - it('should do stable sorting', () => { - SortTester.testSortStability(QuickSort); - }); - - it('should sort negative numbers', () => { - SortTester.testNegativeNumbersSort(QuickSort); - }); - - it('should visit EQUAL array element specified number of times', () => { - SortTester.testAlgorithmTimeComplexity( - QuickSort, - equalArr, - EQUAL_ARRAY_VISITING_COUNT, - ); - }); - - it('should visit SORTED array element specified number of times', () => { - SortTester.testAlgorithmTimeComplexity( - QuickSort, - sortedArr, - SORTED_ARRAY_VISITING_COUNT, - ); - }); - - it('should visit NOT SORTED array element specified number of times', () => { - SortTester.testAlgorithmTimeComplexity( - QuickSort, - notSortedArr, - NOT_SORTED_ARRAY_VISITING_COUNT, - ); - }); - - it('should visit REVERSE SORTED array element specified number of times', () => { - SortTester.testAlgorithmTimeComplexity( - QuickSort, - reverseArr, - REVERSE_SORTED_ARRAY_VISITING_COUNT, - ); - }); -}); diff --git a/src/algorithms/sorting/quick-sort/__test__/QuickSortInPlace.test.js b/src/algorithms/sorting/quick-sort/__test__/QuickSortInPlace.test.js deleted file mode 100644 index 0e103f2ef2..0000000000 --- a/src/algorithms/sorting/quick-sort/__test__/QuickSortInPlace.test.js +++ /dev/null @@ -1,60 +0,0 @@ -import QuickSortInPlace from '../QuickSortInPlace'; -import { - equalArr, - notSortedArr, - reverseArr, - sortedArr, - SortTester, -} from '../../SortTester'; - -// Complexity constants. -const SORTED_ARRAY_VISITING_COUNT = 19; -const NOT_SORTED_ARRAY_VISITING_COUNT = 12; -const REVERSE_SORTED_ARRAY_VISITING_COUNT = 19; -const EQUAL_ARRAY_VISITING_COUNT = 19; - -describe('QuickSortInPlace', () => { - it('should sort array', () => { - SortTester.testSort(QuickSortInPlace); - }); - - it('should sort array with custom comparator', () => { - SortTester.testSortWithCustomComparator(QuickSortInPlace); - }); - - it('should sort negative numbers', () => { - SortTester.testNegativeNumbersSort(QuickSortInPlace); - }); - - it('should visit EQUAL array element specified number of times', () => { - SortTester.testAlgorithmTimeComplexity( - QuickSortInPlace, - equalArr, - EQUAL_ARRAY_VISITING_COUNT, - ); - }); - - it('should visit SORTED array element specified number of times', () => { - SortTester.testAlgorithmTimeComplexity( - QuickSortInPlace, - sortedArr, - SORTED_ARRAY_VISITING_COUNT, - ); - }); - - it('should visit NOT SORTED array element specified number of times', () => { - SortTester.testAlgorithmTimeComplexity( - QuickSortInPlace, - notSortedArr, - NOT_SORTED_ARRAY_VISITING_COUNT, - ); - }); - - it('should visit REVERSE SORTED array element specified number of times', () => { - SortTester.testAlgorithmTimeComplexity( - QuickSortInPlace, - reverseArr, - REVERSE_SORTED_ARRAY_VISITING_COUNT, - ); - }); -}); diff --git a/src/algorithms/sorting/radix-sort/README.md b/src/algorithms/sorting/radix-sort/README.md deleted file mode 100644 index 108d7d19b6..0000000000 --- a/src/algorithms/sorting/radix-sort/README.md +++ /dev/null @@ -1,48 +0,0 @@ -# Radix Sort - -_Read this in other languages:_ -[_Português_](README.pt-BR.md), - -In computer science, **radix sort** is a non-comparative integer sorting -algorithm that sorts data with integer keys by grouping keys by the individual -digits which share the same significant position and value. A positional notation -is required, but because integers can represent strings of characters -(e.g., names or dates) and specially formatted floating point numbers, radix -sort is not limited to integers. - -*Where does the name come from?* - -In mathematical numeral systems, the *radix* or base is the number of unique digits, -including the digit zero, used to represent numbers in a positional numeral system. -For example, a binary system (using numbers 0 and 1) has a radix of 2 and a decimal -system (using numbers 0 to 9) has a radix of 10. - -## Efficiency - -The topic of the efficiency of radix sort compared to other sorting algorithms is -somewhat tricky and subject to quite a lot of misunderstandings. Whether radix -sort is equally efficient, less efficient or more efficient than the best -comparison-based algorithms depends on the details of the assumptions made. -Radix sort complexity is `O(wn)` for `n` keys which are integers of word size `w`. -Sometimes `w` is presented as a constant, which would make radix sort better -(for sufficiently large `n`) than the best comparison-based sorting algorithms, -which all perform `O(n log n)` comparisons to sort `n` keys. However, in -general `w` cannot be considered a constant: if all `n` keys are distinct, -then `w` has to be at least `log n` for a random-access machine to be able to -store them in memory, which gives at best a time complexity `O(n log n)`. That -would seem to make radix sort at most equally efficient as the best -comparison-based sorts (and worse if keys are much longer than `log n`). - -![Radix Sort](./images/radix-sort.png) - -## Complexity - -| Name | Best | Average | Worst | Memory | Stable | Comments | -| --------------------- | :-------------: | :-----------------: | :-----------------: | :-------: | :-------: | :-------- | -| **Radix sort** | n * k | n * k | n * k | n + k | Yes | k - length of longest key | - -## References - -- [Wikipedia](https://en.wikipedia.org/wiki/Radix_sort) -- [YouTube](https://www.youtube.com/watch?v=XiuSW_mEn7g&index=62&t=0s&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) -- [ResearchGate](https://www.researchgate.net/figure/Simplistic-illustration-of-the-steps-performed-in-a-radix-sort-In-this-example-the_fig1_291086231) diff --git a/src/algorithms/sorting/radix-sort/README.pt-BR.md b/src/algorithms/sorting/radix-sort/README.pt-BR.md deleted file mode 100644 index 2274440984..0000000000 --- a/src/algorithms/sorting/radix-sort/README.pt-BR.md +++ /dev/null @@ -1,48 +0,0 @@ -# Radix Sort - -_Leia isso em outros idiomas:_ -[_English_](README.md) - -Em ciência da computação, **radix sort** é uma classificação inteira não comparativa -algoritmo que classifica os dados com chaves inteiras agrupando as chaves pelo indivíduo -dígitos que compartilham a mesma posição e valor significativos. Uma notação posicional -é necessário, mas porque os números inteiros podem representar cadeias de caracteres -(por exemplo, nomes ou datas) e números de ponto flutuante especialmente formatados, base -sort não está limitado a inteiros. - -*De onde vem o nome?* - -Em sistemas numéricos matemáticos, a *radix* ou base é o número de dígitos únicos, -incluindo o dígito zero, usado para representar números em um sistema de numeração posicional. -Por exemplo, um sistema binário (usando números 0 e 1) tem uma raiz de 2 e um decimal -sistema (usando números de 0 a 9) tem uma raiz de 10. - -## Eficiência - -O tópico da eficiência do radix sort comparado a outros algoritmos de ordenação é -um pouco complicado e sujeito a muitos mal-entendidos. Se raiz -sort é igualmente eficiente, menos eficiente ou mais eficiente do que o melhor -algoritmos baseados em comparação depende dos detalhes das suposições feitas. -A complexidade de classificação de raiz é `O(wn)` para chaves `n` que são inteiros de tamanho de palavra `w`. -Às vezes, `w` é apresentado como uma constante, o que tornaria a classificação radix melhor -(para `n` suficientemente grande) do que os melhores algoritmos de ordenação baseados em comparação, -que todos realizam comparações `O(n log n)` para classificar chaves `n`. No entanto, em -geral `w` não pode ser considerado uma constante: se todas as chaves `n` forem distintas, -então `w` tem que ser pelo menos `log n` para que uma máquina de acesso aleatório seja capaz de -armazená-los na memória, o que dá na melhor das hipóteses uma complexidade de tempo `O(n log n)`. Este -parece tornar a ordenação radix no máximo tão eficiente quanto a melhor -ordenações baseadas em comparação (e pior se as chaves forem muito mais longas que `log n`). - -![Radix Sort](https://www.researchgate.net/publication/291086231/figure/fig1/AS:614214452404240@1523451545568/Simplistic-illustration-of-the-steps-performed-in-a-radix-sort-In-this-example-the.png) - -## Complexidade - -| Nome | Melhor | Média | Pior | Memória | Estável | Comentários | -| --------------------- | :-------------: | :-----------------: | :-----------------: | :-------: | :-------: | :-------- | -| **Radix sort** | n * k | n * k | n * k | n + k | Sim | k - comprimento da chave mais longa | - -## Referências - -- [Wikipedia](https://en.wikipedia.org/wiki/Radix_sort) -- [YouTube](https://www.youtube.com/watch?v=XiuSW_mEn7g&index=62&t=0s&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) -- [ResearchGate](https://www.researchgate.net/figure/Simplistic-illustration-of-the-steps-performed-in-a-radix-sort-In-this-example-the_fig1_291086231) diff --git a/src/algorithms/sorting/radix-sort/RadixSort.js b/src/algorithms/sorting/radix-sort/RadixSort.js deleted file mode 100644 index 8e8dccfb0d..0000000000 --- a/src/algorithms/sorting/radix-sort/RadixSort.js +++ /dev/null @@ -1,152 +0,0 @@ -import Sort from '../Sort'; - -// Using charCode (a = 97, b = 98, etc), we can map characters to buckets from 0 - 25 -const BASE_CHAR_CODE = 97; -const NUMBER_OF_POSSIBLE_DIGITS = 10; -const ENGLISH_ALPHABET_LENGTH = 26; - -export default class RadixSort extends Sort { - /** - * @param {*[]} originalArray - * @return {*[]} - */ - sort(originalArray) { - // Assumes all elements of array are of the same type - const isArrayOfNumbers = this.isArrayOfNumbers(originalArray); - - let sortedArray = [...originalArray]; - const numPasses = this.determineNumPasses(sortedArray); - - for (let currentIndex = 0; currentIndex < numPasses; currentIndex += 1) { - const buckets = isArrayOfNumbers - ? this.placeElementsInNumberBuckets(sortedArray, currentIndex) - : this.placeElementsInCharacterBuckets(sortedArray, currentIndex, numPasses); - - // Flatten buckets into sortedArray, and repeat at next index - sortedArray = buckets.reduce((acc, val) => { - return [...acc, ...val]; - }, []); - } - - return sortedArray; - } - - /** - * @param {*[]} array - * @param {number} index - * @return {*[]} - */ - placeElementsInNumberBuckets(array, index) { - // See below. These are used to determine which digit to use for bucket allocation - const modded = 10 ** (index + 1); - const divided = 10 ** index; - const buckets = this.createBuckets(NUMBER_OF_POSSIBLE_DIGITS); - - array.forEach((element) => { - this.callbacks.visitingCallback(element); - if (element < divided) { - buckets[0].push(element); - } else { - /** - * Say we have element of 1,052 and are currently on index 1 (starting from 0). This means - * we want to use '5' as the bucket. `modded` would be 10 ** (1 + 1), which - * is 100. So we take 1,052 % 100 (52) and divide it by 10 (5.2) and floor it (5). - */ - const currentDigit = Math.floor((element % modded) / divided); - buckets[currentDigit].push(element); - } - }); - - return buckets; - } - - /** - * @param {*[]} array - * @param {number} index - * @param {number} numPasses - * @return {*[]} - */ - placeElementsInCharacterBuckets(array, index, numPasses) { - const buckets = this.createBuckets(ENGLISH_ALPHABET_LENGTH); - - array.forEach((element) => { - this.callbacks.visitingCallback(element); - const currentBucket = this.getCharCodeOfElementAtIndex(element, index, numPasses); - buckets[currentBucket].push(element); - }); - - return buckets; - } - - /** - * @param {string} element - * @param {number} index - * @param {number} numPasses - * @return {number} - */ - getCharCodeOfElementAtIndex(element, index, numPasses) { - // Place element in last bucket if not ready to organize - if ((numPasses - index) > element.length) { - return ENGLISH_ALPHABET_LENGTH - 1; - } - - /** - * If each character has been organized, use first character to determine bucket, - * otherwise iterate backwards through element - */ - const charPos = index > element.length - 1 ? 0 : element.length - index - 1; - - return element.toLowerCase().charCodeAt(charPos) - BASE_CHAR_CODE; - } - - /** - * Number of passes is determined by the length of the longest element in the array. - * For integers, this log10(num), and for strings, this would be the length of the string. - */ - determineNumPasses(array) { - return this.getLengthOfLongestElement(array); - } - - /** - * @param {*[]} array - * @return {number} - */ - getLengthOfLongestElement(array) { - if (this.isArrayOfNumbers(array)) { - return Math.floor(Math.log10(Math.max(...array))) + 1; - } - - return array.reduce((acc, val) => { - return val.length > acc ? val.length : acc; - }, -Infinity); - } - - /** - * @param {*[]} array - * @return {boolean} - */ - isArrayOfNumbers(array) { - // Assumes all elements of array are of the same type - return this.isNumber(array[0]); - } - - /** - * @param {number} numBuckets - * @return {*[]} - */ - createBuckets(numBuckets) { - /** - * Mapping buckets to an array instead of filling them with - * an array prevents each bucket from containing a reference to the same array - */ - return new Array(numBuckets).fill(null).map(() => []); - } - - /** - * @param {*} element - * @return {boolean} - */ - isNumber(element) { - return Number.isInteger(element); - } -} diff --git a/src/algorithms/sorting/radix-sort/__test__/RadixSort.test.js b/src/algorithms/sorting/radix-sort/__test__/RadixSort.test.js deleted file mode 100644 index ece713609d..0000000000 --- a/src/algorithms/sorting/radix-sort/__test__/RadixSort.test.js +++ /dev/null @@ -1,27 +0,0 @@ -import RadixSort from '../RadixSort'; -import { SortTester } from '../../SortTester'; - -// Complexity constants. -const ARRAY_OF_STRINGS_VISIT_COUNT = 24; -const ARRAY_OF_INTEGERS_VISIT_COUNT = 77; -describe('RadixSort', () => { - it('should sort array', () => { - SortTester.testSort(RadixSort); - }); - - it('should visit array of strings n (number of strings) x m (length of longest element) times', () => { - SortTester.testAlgorithmTimeComplexity( - RadixSort, - ['zzz', 'bb', 'a', 'rr', 'rrb', 'rrba'], - ARRAY_OF_STRINGS_VISIT_COUNT, - ); - }); - - it('should visit array of integers n (number of elements) x m (length of longest integer) times', () => { - SortTester.testAlgorithmTimeComplexity( - RadixSort, - [3, 1, 75, 32, 884, 523, 4343456, 232, 123, 656, 343], - ARRAY_OF_INTEGERS_VISIT_COUNT, - ); - }); -}); diff --git a/src/algorithms/sorting/radix-sort/images/radix-sort.png b/src/algorithms/sorting/radix-sort/images/radix-sort.png deleted file mode 100644 index 0cf9bf9e4de3c8799b0d8949cb6ea059b3b489dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12619 zcmcJ0XF$_Wvu;A~y*KHhN)-sb1f>QLr79f)QiOmMDTWTxtCY|b0SmqNDg=ShCDNpX zCLIwGDJTBldp_TL-us^Hhh#VTJv%!)yZh|SB;FW$kCKdy3;+O7>gqu50|0nP002lz zf{$yV`a*nxdn15p7-|3jwJGG6_Jp`P(D(j5O+XczV+U6u_4n3*0RTj}ACfKurtIx; z5P&FSg9q9-xL14ojlVw)4GjbWX~%trKyY8)0092}{)dN$V`F2vxw$SbE=x;Gyu7>* z9z2kimX42)|M1}h1qB5a6%_{uhq1A-ot@py*x1d|lA@v_9v+^$y1JN{*v;V~0RaIU z8=JScHwz1koSdAHkWg4y7y|5%<=SF90Kg5yXbE-g_dkP^u3+Cri-+XU3oUn6lTHr(IC+Y?K1Lc9Iw_KO0nbpkf26)l+ z6PKt;o40G`Cf_%Qu|_owa}gav7ZHK}N{^*yizL#KMKFcJ{$VFFzzx(#}U{oG*Jk_ww_Pe8fpsqo+t+Kar2jgzoW z&FH^e*qFWy=}Hu&z0SHrnO#9c!&SmvG(so;{wz$9@JfwbLT?XY7D4E%u2v@i4gl<> z{a9*Q^$D_d8nVbyVZUM6jElqS{j?&mm~RfU=vKO=Q1+97ySmxFg_XA#wXVE)z5fIL z-P8D)o!2Ys3MV$CIuA=U6%D79W2(R)Ii;~6pJM0k{h$V-z1iu4ySqKSR@LhAHqddy zVOG2YWGLkt^VlD$$GQ@c{!MjW+U9tyWyc#=z&H9bfja3wT>8E+4iuVlMD&%N1{GI4 zzmN1(mc`n26HknLKd5emVxMU08<`~e& zj%?5ez2YzTsVNyJ)eR}{n|TT~uZVx8k0N#K8#%AJRJMgqSgRQnQF`pg9*a2ExN4?E zQuL8Vqn8-tM_HBiRE(+$Z-3N2(<6mVLhU-a_@d1s1kUS%N_|Y>7n_8B=q~G=xxDS4 z?%$HYB~ZBN3VYEnVoJePbC#JxHKBo0R8X1l$c!=@FhyYnK}RF51%D2$Gt{~6PG&iS z^8H-Af^!QMgu z`H$Bx?4o(vryRoOE~81+CKFw_=)rE$8@(BHNEJR?6*#Z2op6G~LVjme8f{IY-Jf-H zR6NGVXWI|Pl^o}a*P9!aptKj??eIN|cWXhGB|WRSYc83<%3bQ6&Lcf0@taZF2wyRN zcl+S3PcQH>kHN0r#7FfpcE$IWmi5)6D+R}cGw~u$RX#dFuu+MB_M;*hDIDp0jc8o$ z9fH8Q!)fO9a!PeUq>2=F#J3@{LC^BmUXxB+KwS0G>hsOs7fPgHLN96ONk7gV5LkKH zKZZvT_jXWmyj~jUuw#r1`YdqwThw)K&BF*}%LRD=ZBl9yerbNhEJK@pggv$T=~?m! zTmgJy)fRx9^z&?B4l|!jaK&s z!hW70G|=huF6BX@(d_V4njKN2H3A~ppbBX|QfGd{-ulr!!qQIw$uh87OxPEXtQv@W zGgq}Mza3PZr#w$8#)8^`mSow1;B9!tz`G|Qty4ShFG6|>L*=C;ETXalY_v$<7F2FW znK`(Q#zPd1u8L^&Qt2-fGGKZ49DkRzcbghfi-$$F3GeIagTe#Pir+F`GHU){m(A*v zZD4_8o*x`UdiHUeeFz#Jak8-=jBzfugws*!76X>nEZZ7JidbV9Et$`Q9P z5GsGX9Bgt<-rTZL`v`j{c*47`1rIA`D%N>28n3+~Cu012Nr7v(Esu~OPe4t`?vYxH zpOf!Y-nrI@XTRi>13;3Z5d7WHNU9_fjA`feHu6O{DhF6sw8l6tHI%WxnHc68!QqZ>W>4D!Tdmp~UOqqhMkbcK@rS2sYpkw}c0X> zhEaE}^FWI|k? zR-dOu^{~`Y>rR}aLK1S8175+)$^Kqrrq>PoaWhqmaR*~e`I-vK2fGvN@pgNk^UN8+ znH)Ly?eWherhJ7_a!+BoNA{5n=I?jU9&epCyj|%TNuZx zpsylBGUlzf3`ox_>@Q&5A8|_AEcwZWO7SEZn|>~rh92AYoHqtJtaq3sW$myeF(#r zrBy55Q%^#M)}TJFg0lj>y6KLE@jy5>igRFvh9+SD3%(~UI6jCgPZBQ3&wnmHm5!`2 z=MFJhpMUIDBw8OUuw1(a13O?6_Z35N=SRRk2UrHL3Z7JrJe_|)OSH$F?-6g>!f3om zIC(%woFDRX%(mb*iYc;GSj`E4&--4iXwz<#&Tn3231%3$9^TstLhpJffCbl}7!-uwQMTuEJZHOdL!NmGnvC(i+>vnOYr z(x|JTAQ)j}iB6RP@$^1T^T!TsD8Q@|@uqVHU}gv(*N{(r?)1(q&heFq*RLQ-6Cc)Q z_%&WNH+aDX*pJ9<6$YqxYM8Vgsk9N&0*EXx-Qkwga`r3t#b>Z3mb<~SQbJEBZB`4hc5O;HcM2pM*L)^!sx{>A9` zM2g?YjPK#60-0B22&KLJkgvNEIF(=dr-WMHfrUBtN~hfkf937?EI~^EFYJDPluV;M z#8(I$>BFKB$_BNByAWc6$!u%)zC&2=S~`dpvxo+%u*`ug#~$r&+sqD8@@}%P)qQiJ z^XOSsA-qVXYEJ}D&l7NvtNcabWG5|DYQ*}1!x5g)@*~EPD(GK5$>G0zzbBc|0@}Ja z138r%4c#ej7ZIFNl;bWpw9$!GLFGZ1EC*rk;`G`~ z+%;o$l9ll|U!-41--9^wxu?e+j-w5S@u+wv2fw#UPe)@wScCp=HRn{=Q8z~gD&M$G zV>pqW15N{vA}`CsBk(l$vYd=R^bcoc3%EMdTG&$&zH2!U^4ZKi2NZoUSnAHyPUV=1 zwU%2MV^exd=8ezpG$}r1>B*FAO!xZtHFhuiw;o2bfFiLe9k~GP%&*-fS*5PQXc(4( z1K$)t#Mrq%zd)Abi}sa@x2u5b=fyZauw4`TXYV329`N(%JxxD-mA)s!@nE0Av;EmX zI>Qk{>?F(le$ai~qE&y$j@NjLp8!88+AIni^<%r{p@$J#htVmusTvC9P&w9K5MWxZ z$NQ3Vc7td8m6!bb6>c5`pIPG*lF#2(oa3fpJ(eFKQb?h)Zc5Ae#?v>uR^F&T*ZbAU zl^tAe|Y}8`k$Q`kANNc3HY{#Tex*OrdRyeG-QVT?Qz zW@p}Ptsa`JS$)b^erI9yg}imZIuFgzvg_F$O5v6F5`R7qS3y_xy7z^r|9SG6#~Uss zGNg;ftm=OF)O6+fU1;AkaL3se{Pm~sqj_X>ntQxyE2}X@qQW|O z9g$H4^m)0>^J|1O;9X!JW3Nd=n(4eyMmBb!+*rbH@DGCYAfd&&Jl268@Adb(>Zqf6 zC!+F-DzRF|i5*JI(t^-?7Arm2S+S{%sNG~XFuu%Nr~tTq%Sq#M>$%W9bRwdnc~6w5 zLos(y_=BjP2hnM=Z222%*mowH$GiL|y^d3Nq3#8_H(cO$nNi;{d*Wxt4^m~sxj&en z>%FWt0Qo$B#wgH)|D65L$h#L?g@gSXprhA-Eex3=0XP&+{R zc$m~EEUD;KN|*~@brgcSdQa3gY}S&j+}6bMHJS0POr`1C-r+;!R4+IODa?*S8)HR8rVb<5Yry?f&=;%VST zV%ko;^HvIGM4oHE*0g?9`EEu}ES=J{kv8)& zDrm!yyLk1Iw=*iE{xJki;{92*8v7Q-DwKrMZFe3O5!WAOlDLekeOdMVvg0MD$%Mgo zm4e>|rCW3p7>#tV)sbUal)~Y}FDl!oKnLshGQHtVDTy9u}EPwgeVP|Nt zr9+k9j(p*y%y4IP`jACF1R`%EQT7y-$tRI^Re zt_z8J{VoimnT-OsYued5y*yF><)N+qArRl7fMx?v9tE- zgr#F6NRcx1gvE29km=#Z?Ot9C;u)x9PaR!c1dz#XQ~-k9l~RzpJtCswG-SiM#v-VA zA2QW&B`tK_0G_wANypic1x1K)A$9M;U=8E3f%V#Rm@kt(tp`GH+Ss2PHZfVO^v)0u z`o%vT>DE)fX?g6Zj?TQFf;@H3V2wR{l|De0`jxlAb*oJ{JCa4Nr!2?r&vedtF4p^( zqeXO~8@YM8o>)IG25>7wU+Zf)Qp3GheUq2TyRL~II|?xS>K2}Agf6|WfsQ@)n}EEl z661Mmt8e>s<$+XJKx4_|vAp8*Ye*bDg29;i&7gs`@^RnreX$5iOChDSY05#L%6^YM8(&pcmEFGMbd(QG&#b(p0s0vZ{JIod4mJUNQ@hN z7LKrvj;jCoRtYbS;^LE&mj;^Af&=^mr(BTAmc!OdztxyDnWswnXk|P9p1Y(PXyjD2 zF7$G(IzHi`{ni)3=8{{Ud3f~1cbC^z=xwpu~l954wmjwRA+ZQ(Wzh1Pc+Mm#; z{~r+drOIn^_-1C9A)F20_>tHmc^`l_PMOC&kJ;mI-#JJb<1=nhs4JC~(U6jS;VMB# zdQ(0MjISVcdGd}AX0~H42nr>Z^0~P`PsqOcYd5gGceCb&Q`$2(j^|HmE#yWuzD6UL zSlON?m*5}dTC*@gG2U)Cg97*1@0gG0B7@%A<{{689oY$FntJj-`R6!8R-pYuL5h-c zcG9MSCTDnJ*_6Jx%?cJUB-r0czO882%V)K9Y9;0gLxG7gqHVpT88X$U?iuuaw&9lC zs~Pm6^jz$i^e+Zk7Ghv6mO!tPJqWadi+DH?QI|%?L{)%N~=91rN%V!}v|VJR5b zT1`$HhvQ|O7qnp%_;hc6(Km@JD~D%+$ZIU*q9l(NpL|O}n&At{G}U|WQD5HTAKWQT z%cx8@?4Ue6DWty5-~U)A=+RUBFw`8Eg2vAsa@I-vx6D_zDWB?i`hcuVeFxY9+PAd@ z(fAqXANSe7m5wJjQp)ke@>InH^tBvN0|NG1^{)C*H_Zkv@_G$f*{C{VaBN{=sHD}T z|K>G8e{O97PkB%KY^AN`+gF=jk2f#OE*zE=iTcte*Obu)3g85;JN_wr>lJF5-gVWi zfhtTc{S=uhDALWfT_#UvRnioh;zV4>(baI>r_jVXlLoRB_mRa}N52IAM@!ey+b7T7 z%~~Y$g3!U9(=|J$uhv$uo^vQSO8FnRzPc1`6#MyYb%?FLf02ZAHe@9oic!u~;RW^O z-hPVL^1fJi-iM%9`!{nuqLfzg#q+IR7Bt*ZnhPrS**E z$5WnrLow0f(XonQL9vwd*|!uGtTX6s4X>y9I>*_XRzIZG2me{x_!Zf)-@Z8Ytt2X$ zQr{YHFmiod<{CXy5m^rgx4+Qn=nlBGcCs1@hEK7pzp@Q0pgs@d>srlCrc7WzJ8OTT z9k6v(@Xmx777S+*#X- z_?{tpcb~_5-U;5JQJZnQLQVU+>K^)soyN>I@00TS)^ST0RX2LC>zfX>Zh^@60g`%2=V z{&&8TKX19@V&>(_EAcIlipV#~$mj68hz-@9S(I+@p|-IfYmo^4IP1;GRheUCbm%WN ztUm0has4O`fA0ll+i*Koavrkfj#gll-72zZ7{+$_s~RqCo`hTiLzH^Ha30gLpTB@- zfOp#t&uxcdHpG1$(IXOXy2dAaO)`9eUh&fuJ;n6?;QIb z&PT`8#H~|s*Qju0c7C@}<#?C|Tw4A`QrXjlf}hUh+n5@L>jepnMxU%SSgP=yAu-Gs zZu3IBqdPFPRsHu*lv@jHbYOUHhB*u4k*+lG&`j{hV;9T5;WE=BMV3VE=OKowzWn?l zavh!hN4v5_?x6|acp~lu8rp{4@~+teo~@j(ON4daDXe_8UnGUfOe*raFvYw|;01zB z&C(@WoV^psDwlbmu1RO&FJ9gg87Ln(zWVtI1CbO^Ff4v_oCp0OFinLv%A#N5CgiT&AX8JjZMFplH-9$;@o8Cih zb8D(8@HVD7QQt+FpHr32G!fpKGBjIYO*)Km7C7ZyWfM%(p1iV`Yxdsqc`ru$ z>e%-vKcJjA1i2OtoQdWIWo6TN^r)UisVIhh(>yq6AqPu&g{|C|cdLKH3yeKm!siKg z8n$fcuJ8Sv$qyUUi$GT0d2`8lxOUniiix}0ofG#&)O zdapmOXGQVBzUU<*TlPKanp292yh51P!jpeJT##vN4Sv2!cmy`*?n6dZx*w=Ls^q&# zmMPlS%}yk!2lC7ty9`b~`ox9hxX5T{Sp1l^nqxS^iq}j@#|0)od$sYUoD*Dc2FF6K z1$}}qKCHwD-9dZgCb`5`+oDtJ#a8c#ghp__$tSR3lGz=GYP|(8jkd><$hy9iHR%$r#I4WA8k|VjibZHbS2sG;*5FBYh}Q08{V4Z-mbJx2x}_< zM75KMhz2V*ujW`C{k12gE)xKtf&9${NJd(Ug5jF-se|H~X1$bU{pWP*OhRQ&CdH4m zAH747ekZmV{V0o(Kk8j$x8!VI zDUJ(gae#r|Y|Rso@Z}XUzkJ8@B4IGC6FTArN0!husBlzm;D)R40PYA>UKcsz+v>bm zp()ibRqZ{Qayqm>D$ZLze_eZzX+r@wjzl2N?repV#bpJw{>h4t0vo4=!!0{gtf zrVosLc3-(moo8YC7b*}=7rJi;SoffWr-MwglD;M*U8VJ{+9F-F72vmP)P6WT?n{$# z7Z8MTHP1dKl<&#;l9sS2O4gwRwa8h4vUv3POwRW&^7_G`eYL>qEq!VuJDX##<_^yq z+va3jO1W?!D_mlRmzJ8e-N2yz(p@y++1AT10t8@RGY9ylkM+_WZ?#^#X-o^M^L0-G zmg2h+&KbOl>8aM_)BX1LG7Kww{kq51>ph9Wmsh8^v|2m&rPF-luR7bZi*Qcpj|13K z_g5|Dwog_D1;Q4lb&M`n%IaVDm~+DdVgz#?dmi5HdeJHmb~|zWLWDE!6f1Xj`0ctE zQ^FSpy6D6#X>4XoQkO_e3FxXuqHFzU_>PCKd+M}`c2q$Vr;3$M9Jjz~?P@Y*IHAur zjT2*g27S@7WM?YzkVEWEVE??_aH?IoO>T|KJu0rzSFzPa<1F9qRs&ynWXN1-5d# zpw@ofPmfvSp8~Lcef~=jbjFpOtTS-bn}USIP%4-?G##p=30xv@kM&v_8>i)Z zFEbYr85sZ!vy&^)DRI(utH`UU08C?%bdu zpwVr>?UNA3vl0@$e2pk-5RbZdAE(;q&BuH9s}b8@qTL|(4dSFJe|)b81+NRLXbWhE zzZ#A=BC)ZnPf-djMM^w&Cps^}VHLY`fp}mXz>_gep;lt>&J)F6U(Pwu@_3!b{hn}^ zXW-Q{0V4xTV1zF>Zau7_bPv-7eaLMMhNZ>Vq!WB!;&dgEF})Ch2v)BaFgiW*r4Ld7QX)-30WtKRq z^DG!^K-$o;!8B28AJi$Tzl{rQR>>a9i6ZcAGv5iCl$ERC3wamoFPrX7V9MXqp#|}y8ur65HzS;V|Us4Y^9Wd zBw1i9tI4|OmG{obe$_+v@(}nMdFLjL_3wD*#iIoFHSeSZW5!U%EQ?eVIq0+EW#Xv& zh9!o;MQSc~Atf3_M<^=(PZNf(aVWC;Pn*`B4P}{8_g9h2x!CA)BHa{Zhz4RajjxHj ze6a)1=>#iw@ttv-Y<-64<-)V!9+o@f9u}*0eDD}N?ly9;PXKZnzia8Z2k^u(6_LTj ztze2BK>z&94zKxY19IIr5`=Z3iTMoWy22^N1mMR`gp;grrqG{sPojOE;A`vnVr6IY zcfRle9s2cM^q2>4k9qLE6xsh`5P@_9MmVD4n+lr7dOJO#9fVF+tK_W_NQKRk>NAaJ zEL!`j6%okPF=Tf6wAX zCIWh;umj$1t>L!{*J^=sPSaYc^rUVuDg~GNf+lW|dTpz(kX~1wsP(m>BeG3>wN7>Q z%$#)()@F8`LhtQ?=*R>(9cn=RD5)_$>(l0T|3LD<9VmSH5g)!|tr~rBX)Kvx@O?YI zKR>PRK^IlcqyV?iUq1V&@0w`JEaXLVsa{^j4ry;HDC|NwMt;4#pd(X%jPoj0&8OL~ zEuse0i9vko-f>6_6?^|^*|A(Aywe(Y^u}Iet4O34aOpcXnQ06mKSkh4KHu@80kY`5 zM=@nl)w-L*xeVNL9Zx<~D4)go(>dihqyGk=Bebv-Z6wuwI^Wz`Bak-QG+@sbT+B8t z4V0xUd@f??qER-e@GxBSGCU}HT;*%wwWclq5n&D`cP<0sl9Lx?(|CLDnYYUtZT~PS z4F_*Ii8V&A!l79M7K2m}<1&%wNJjP~oP<PzINLrcAqLwaFRhMm=Tu+s2$lgu0>LK8374Z#&puYH;Wwz z^m?N@%s7tD#VK@Lja14tR(phhx?voA zN5U|qHWPoosNe9J*-lPD*A{RR5QiMS`zG6nm1>Isk06#8G^p3^|7}$frVWQCNAJ8< z$wB&=pW$~6NQUZMPY+vIc2;}D{{u$MP~h071F5XB?*i2K#{b4ky}2{2`)$33Pne>C zaacE5JBgz$7wM{k<9JJhykGjrL!1-DZc>+L{Na!;=jn;o#wT5>)CM1W`(I0PY{RU0=5!BgH1_dcSGWIQ)O*} zG@07WOgeBH$E=_c=rRX9y|WL1Jw*+JJ)V5=Dy8PR9;NW!SY(dFx5t zLpQHJUOw$@^m;R!{^L3O(R$Nak8Zs?XjAj9pT$n+b$OyMiE&YI{N@E7$9rU{1mL&Q z=og=c&F8c;uFBt6oNxz0ZY8yf3d#Yoz9M6D;Ggtdcmow*a(}eTUJ0l@LrA1QWQ{_ICA{U^A~cZ3avg z;NH@BD>4g}>m74#H0%O`7IMLFaMu`zFsf&7zU-veU`r2cf1KmtZ;jqrZ+GCUDa)(# zIjYk3EdE6F2QQh@gWVQT_bU$R_hWLxZIiIs0}Q-UreN=k3d!otBz{yxQX>* zM@dUpAlXpT$`N`dT3yRITJ;3VGeRmpkm^(*>%me%7t~9_9taW#Y&NE4L@=OL(F&&t z2XuP(I&zq>r3v2&#-BYZ3bameq|V4#9#+=qZv#OjK&cTc?YsiDs?_-F9X>QR&i_ai zLHUKI3xGYK1Gj_PycAn@GrZIB2!e~#^PM~g4oTKAj7R*T~Zn(j)rme<8xkl$vl&N$zRUu z##VXDD`yu)iiZ)N;323fJc<+JBY*cyt;P^;vGfy^-S^#KT ztz%C;_aw@%my*e(DFg2;fM5YHPFp5^-hT6%AGGH%^@3MS_(&v%abslgH?O*{=Z~+c z*|-#!zfM>=xS$9|K$IJ%7kdw#sXk)u1>|JUo@=j*!X=z->HP?+cff^%-827{e)jK@ zrLap&-@h?s(;_4p-_?ULog3M|*>5gX{~cJKy!B#&<8Nx*Wg{Ecn{8?~_Nx-nG`0&aerq3=xReDRho7Y{{^_Ft3Ch# diff --git a/src/algorithms/sorting/selection-sort/README.md b/src/algorithms/sorting/selection-sort/README.md deleted file mode 100644 index 005c616131..0000000000 --- a/src/algorithms/sorting/selection-sort/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# Selection Sort - -_Read this in other languages:_ -[_Português_](README.pt-BR.md). - -Selection sort is a sorting algorithm, specifically an -in-place comparison sort. It has O(n2) time complexity, -making it inefficient on large lists, and generally -performs worse than the similar insertion sort. -Selection sort is noted for its simplicity, and it has -performance advantages over more complicated algorithms -in certain situations, particularly where auxiliary -memory is limited. - -![Algorithm Visualization](https://upload.wikimedia.org/wikipedia/commons/b/b0/Selection_sort_animation.gif) - -![Algorithm Visualization](https://upload.wikimedia.org/wikipedia/commons/9/94/Selection-Sort-Animation.gif) - -## Complexity - -| Name | Best | Average | Worst | Memory | Stable | Comments | -| --------------------- | :-------------: | :-----------------: | :-----------------: | :-------: | :-------: | :-------- | -| **Selection sort** | n2 | n2 | n2 | 1 | No | | - -## References - -[Wikipedia](https://en.wikipedia.org/wiki/Selection_sort) diff --git a/src/algorithms/sorting/selection-sort/README.pt-BR.md b/src/algorithms/sorting/selection-sort/README.pt-BR.md deleted file mode 100644 index 0c45b73f61..0000000000 --- a/src/algorithms/sorting/selection-sort/README.pt-BR.md +++ /dev/null @@ -1,20 +0,0 @@ -# Selection Sort - -_Leia isso em outros idiomas:_ -[_English_](README.md). - -Selection Sort é um algoritmo de ordenação, mais especificamente um algoritmo de ordenação por comparação in-place (requer uma quantidade constante de espaço de memória adicional). Tem complexidade O(n²), tornando-o ineficiente em listas grandes e, geralmente, tem desempenho inferior ao similar Insertion Sort. O Selection Sort é conhecido por sua simplicidade e tem vantagens de desempenho sobre algoritmos mais complexos em certas situações, particularmente quando a memória auxiliar é limitada. - -![Visualização do algoritmo](https://upload.wikimedia.org/wikipedia/commons/b/b0/Selection_sort_animation.gif) - -![Visualização do algoritmo](https://upload.wikimedia.org/wikipedia/commons/9/94/Selection-Sort-Animation.gif) - -## Complexidade - -| Nome | Melhor | Médio | Pior | Memória | Estável | Comentários | -| --------------------- | :-------------: | :-----------------: | :-----------------: | :-------: | :-------: | :----------: | -| **Selection sort** | n2 | n2 | n2 | 1 | Não | | - -## Referências - -[Wikipedia](https://en.wikipedia.org/wiki/Selection_sort) diff --git a/src/algorithms/sorting/selection-sort/SelectionSort.js b/src/algorithms/sorting/selection-sort/SelectionSort.js deleted file mode 100644 index fa4a720b2f..0000000000 --- a/src/algorithms/sorting/selection-sort/SelectionSort.js +++ /dev/null @@ -1,32 +0,0 @@ -import Sort from '../Sort'; - -export default class SelectionSort extends Sort { - sort(originalArray) { - // Clone original array to prevent its modification. - const array = [...originalArray]; - - for (let i = 0; i < array.length - 1; i += 1) { - let minIndex = i; - - // Call visiting callback. - this.callbacks.visitingCallback(array[i]); - - // Find minimum element in the rest of array. - for (let j = i + 1; j < array.length; j += 1) { - // Call visiting callback. - this.callbacks.visitingCallback(array[j]); - - if (this.comparator.lessThan(array[j], array[minIndex])) { - minIndex = j; - } - } - - // If new minimum element has been found then swap it with current i-th element. - if (minIndex !== i) { - [array[i], array[minIndex]] = [array[minIndex], array[i]]; - } - } - - return array; - } -} diff --git a/src/algorithms/sorting/selection-sort/__test__/SelectionSort.test.js b/src/algorithms/sorting/selection-sort/__test__/SelectionSort.test.js deleted file mode 100644 index d52385d132..0000000000 --- a/src/algorithms/sorting/selection-sort/__test__/SelectionSort.test.js +++ /dev/null @@ -1,60 +0,0 @@ -import SelectionSort from '../SelectionSort'; -import { - equalArr, - notSortedArr, - reverseArr, - sortedArr, - SortTester, -} from '../../SortTester'; - -// Complexity constants. -const SORTED_ARRAY_VISITING_COUNT = 209; -const NOT_SORTED_ARRAY_VISITING_COUNT = 209; -const REVERSE_SORTED_ARRAY_VISITING_COUNT = 209; -const EQUAL_ARRAY_VISITING_COUNT = 209; - -describe('SelectionSort', () => { - it('should sort array', () => { - SortTester.testSort(SelectionSort); - }); - - it('should sort array with custom comparator', () => { - SortTester.testSortWithCustomComparator(SelectionSort); - }); - - it('should sort negative numbers', () => { - SortTester.testNegativeNumbersSort(SelectionSort); - }); - - it('should visit EQUAL array element specified number of times', () => { - SortTester.testAlgorithmTimeComplexity( - SelectionSort, - equalArr, - EQUAL_ARRAY_VISITING_COUNT, - ); - }); - - it('should visit SORTED array element specified number of times', () => { - SortTester.testAlgorithmTimeComplexity( - SelectionSort, - sortedArr, - SORTED_ARRAY_VISITING_COUNT, - ); - }); - - it('should visit NOT SORTED array element specified number of times', () => { - SortTester.testAlgorithmTimeComplexity( - SelectionSort, - notSortedArr, - NOT_SORTED_ARRAY_VISITING_COUNT, - ); - }); - - it('should visit REVERSE SORTED array element specified number of times', () => { - SortTester.testAlgorithmTimeComplexity( - SelectionSort, - reverseArr, - REVERSE_SORTED_ARRAY_VISITING_COUNT, - ); - }); -}); diff --git a/src/algorithms/sorting/shell-sort/README.md b/src/algorithms/sorting/shell-sort/README.md deleted file mode 100644 index f93338e2eb..0000000000 --- a/src/algorithms/sorting/shell-sort/README.md +++ /dev/null @@ -1,60 +0,0 @@ -# Shellsort - -_Read this in other languages:_ -[_Português_](README.pt-BR.md). - -Shellsort, also known as Shell sort or Shell's method, -is an in-place comparison sort. It can be seen as either a -generalization of sorting by exchange (bubble sort) or sorting -by insertion (insertion sort). The method starts by sorting -pairs of elements far apart from each other, then progressively -reducing the gap between elements to be compared. Starting -with far apart elements, it can move some out-of-place -elements into position faster than a simple nearest neighbor -exchange - -![Shellsort](https://upload.wikimedia.org/wikipedia/commons/d/d8/Sorting_shellsort_anim.gif) - -## How Shell Sort Works - -For our example and ease of understanding, we take the interval -of `4`. Make a virtual sub-list of all values located at the -interval of 4 positions. Here these values are -`{35, 14}`, `{33, 19}`, `{42, 27}` and `{10, 44}` - -![Shellsort](https://www.tutorialspoint.com/data_structures_algorithms/images/shell_sort_gap_4.jpg) - -We compare values in each sub-list and swap them (if necessary) -in the original array. After this step, the new array should -look like this - -![Shellsort](https://www.tutorialspoint.com/data_structures_algorithms/images/shell_sort_step_1.jpg) - -Then, we take interval of 2 and this gap generates two sub-lists -- `{14, 27, 35, 42}`, `{19, 10, 33, 44}` - -![Shellsort](https://www.tutorialspoint.com/data_structures_algorithms/images/shell_sort_gap_2.jpg) - -We compare and swap the values, if required, in the original array. -After this step, the array should look like this - -![Shellsort](https://www.tutorialspoint.com/data_structures_algorithms/images/shell_sort_step_2.jpg) - -> UPD: On the picture below there is a typo and result array is supposed to be `[14, 10, 27, 19, 35, 33, 42, 44]`. - -Finally, we sort the rest of the array using interval of value 1. -Shell sort uses insertion sort to sort the array. - -![Shellsort](https://www.tutorialspoint.com/data_structures_algorithms/images/shell_sort.jpg) - -## Complexity - -| Name | Best | Average | Worst | Memory | Stable | Comments | -| --------------------- | :-------------: | :-----------------: | :-----------------: | :-------: | :-------: | :-------- | -| **Shell sort** | n log(n) | depends on gap sequence | n (log(n))2 | 1 | No | | - -## References - -- [Tutorials Point](https://www.tutorialspoint.com/data_structures_algorithms/shell_sort_algorithm.htm) -- [Wikipedia](https://en.wikipedia.org/wiki/Shellsort) -- [YouTube by Rob Edwards](https://www.youtube.com/watch?v=ddeLSDsYVp8&index=79&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) diff --git a/src/algorithms/sorting/shell-sort/README.pt-BR.md b/src/algorithms/sorting/shell-sort/README.pt-BR.md deleted file mode 100644 index 14de1a517e..0000000000 --- a/src/algorithms/sorting/shell-sort/README.pt-BR.md +++ /dev/null @@ -1,60 +0,0 @@ -# Shellsort - -_Leia isso em outros idiomas:_ -[_English_](README.md). - -Shellsort, também conhecido como Shell sort ou método de Shell, -é uma classificação de comparação in-loco. Pode ser visto tanto como um -generalização da ordenação por troca (bubble sort) ou ordenação -por inserção (ordenação por inserção). O método começa classificando -pares de elementos distantes um do outro, então progressivamente -reduzindo a distância entre os elementos a serem comparados. Iniciando -com elementos distantes, pode mover alguns fora do lugar -elementos em posição mais rápido do que um simples vizinho mais próximo -intercâmbio - -![Shellsort](https://upload.wikimedia.org/wikipedia/commons/d/d8/Sorting_shellsort_anim.gif) - -## Como o Shellsort funciona? - -Para nosso exemplo e facilidade de compreensão, tomamos o intervalo -de `4`. Faça uma sub-lista virtual de todos os valores localizados no -intervalo de 4 posições. Aqui esses valores são -`{35, 14}`, `{33, 19}`, `{42, 27}` e `{10, 44}` - -![Shellsort](https://www.tutorialspoint.com/data_structures_algorithms/images/shell_sort_gap_4.jpg) - -Comparamos valores em cada sublista e os trocamos (se necessário) -na matriz original. Após esta etapa, o novo array deve -parece com isso - -![Shellsort](https://www.tutorialspoint.com/data_structures_algorithms/images/shell_sort_step_1.jpg) - -Então, pegamos o intervalo de 2 e essa lacuna gera duas sub-listas -- `{14, 27, 35, 42}`, `{19, 10, 33, 44}` - -![Shellsort](https://www.tutorialspoint.com/data_structures_algorithms/images/shell_sort_gap_2.jpg) - -Comparamos e trocamos os valores, se necessário, no array original. -Após esta etapa, a matriz deve ficar assim - -![Shellsort](https://www.tutorialspoint.com/data_structures_algorithms/images/shell_sort_step_2.jpg) - -> OBS: Na imagem abaixo há um erro de digitação e a matriz de resultados deve ser `[14, 10, 27, 19, 35, 33, 42, 44]`. - -Finalmente, ordenamos o resto do array usando o intervalo de valor 1. -A classificação de shell usa a classificação por inserção para classificar a matriz. - -![Shellsort](https://www.tutorialspoint.com/data_structures_algorithms/images/shell_sort.jpg) - -## Complexidade - -| Nome | Melhor | Média | Pior | Memória | Estável | Comentários | -| --------------------- | :-------------: | :-----------------: | :-----------------: | :-------: | :-------: | :-------- | -| **Shell sort** | n log(n) | depends on gap sequence | n (log(n))2 | 1 | Não | | - -## Referências - -- [Tutorials Point](https://www.tutorialspoint.com/data_structures_algorithms/shell_sort_algorithm.htm) -- [Wikipedia](https://en.wikipedia.org/wiki/Shellsort) -- [YouTube by Rob Edwards](https://www.youtube.com/watch?v=ddeLSDsYVp8&index=79&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) diff --git a/src/algorithms/sorting/shell-sort/ShellSort.js b/src/algorithms/sorting/shell-sort/ShellSort.js deleted file mode 100644 index cdbba99720..0000000000 --- a/src/algorithms/sorting/shell-sort/ShellSort.js +++ /dev/null @@ -1,41 +0,0 @@ -import Sort from '../Sort'; - -export default class ShellSort extends Sort { - sort(originalArray) { - // Prevent original array from mutations. - const array = [...originalArray]; - - // Define a gap distance. - let gap = Math.floor(array.length / 2); - - // Until gap is bigger then zero do elements comparisons and swaps. - while (gap > 0) { - // Go and compare all distant element pairs. - for (let i = 0; i < (array.length - gap); i += 1) { - let currentIndex = i; - let gapShiftedIndex = i + gap; - - while (currentIndex >= 0) { - // Call visiting callback. - this.callbacks.visitingCallback(array[currentIndex]); - - // Compare and swap array elements if needed. - if (this.comparator.lessThan(array[gapShiftedIndex], array[currentIndex])) { - const tmp = array[currentIndex]; - array[currentIndex] = array[gapShiftedIndex]; - array[gapShiftedIndex] = tmp; - } - - gapShiftedIndex = currentIndex; - currentIndex -= gap; - } - } - - // Shrink the gap. - gap = Math.floor(gap / 2); - } - - // Return sorted copy of an original array. - return array; - } -} diff --git a/src/algorithms/sorting/shell-sort/__test__/ShellSort.test.js b/src/algorithms/sorting/shell-sort/__test__/ShellSort.test.js deleted file mode 100644 index 454845f44c..0000000000 --- a/src/algorithms/sorting/shell-sort/__test__/ShellSort.test.js +++ /dev/null @@ -1,60 +0,0 @@ -import ShellSort from '../ShellSort'; -import { - equalArr, - notSortedArr, - reverseArr, - sortedArr, - SortTester, -} from '../../SortTester'; - -// Complexity constants. -const SORTED_ARRAY_VISITING_COUNT = 320; -const NOT_SORTED_ARRAY_VISITING_COUNT = 320; -const REVERSE_SORTED_ARRAY_VISITING_COUNT = 320; -const EQUAL_ARRAY_VISITING_COUNT = 320; - -describe('ShellSort', () => { - it('should sort array', () => { - SortTester.testSort(ShellSort); - }); - - it('should sort array with custom comparator', () => { - SortTester.testSortWithCustomComparator(ShellSort); - }); - - it('should sort negative numbers', () => { - SortTester.testNegativeNumbersSort(ShellSort); - }); - - it('should visit EQUAL array element specified number of times', () => { - SortTester.testAlgorithmTimeComplexity( - ShellSort, - equalArr, - EQUAL_ARRAY_VISITING_COUNT, - ); - }); - - it('should visit SORTED array element specified number of times', () => { - SortTester.testAlgorithmTimeComplexity( - ShellSort, - sortedArr, - SORTED_ARRAY_VISITING_COUNT, - ); - }); - - it('should visit NOT SORTED array element specified number of times', () => { - SortTester.testAlgorithmTimeComplexity( - ShellSort, - notSortedArr, - NOT_SORTED_ARRAY_VISITING_COUNT, - ); - }); - - it('should visit REVERSE SORTED array element specified number of times', () => { - SortTester.testAlgorithmTimeComplexity( - ShellSort, - reverseArr, - REVERSE_SORTED_ARRAY_VISITING_COUNT, - ); - }); -}); diff --git a/src/algorithms/stack/valid-parentheses/README.md b/src/algorithms/stack/valid-parentheses/README.md deleted file mode 100644 index 31d7fd60f3..0000000000 --- a/src/algorithms/stack/valid-parentheses/README.md +++ /dev/null @@ -1,44 +0,0 @@ -# Valid Parentheses Problem - -Given a string s containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid. - -An input string is valid if: - -Open brackets must be closed by the same type of brackets. -Open brackets must be closed in the correct order. -Every close bracket has a corresponding open bracket of the same type. - - -Example 1: - -`Input: s = "()"` - -Output: true - -Example 2: - -`Input: s = "()[]{}"` - -Output: true - -Example 3: - -`Input: s = "(]"` - -Output: false - -This is actually a very common interview question and a very good example of how to use a stack data structure to solve problems. - -## Solution -The problem can be solved in two ways - -### Bruteforce Approach -We can iterate through the string and then for each character in the string, we check for it's last closing character in the the string. Once we find the last closing character in the string, we remove both characters and then repeat the iteration, if we don't find a closing character for an opening character, then the string is invalid. The time complexity of this would be O(n^2) which is not so efficient. - -### Using a Stack -We can use a hashtable to store all opening characters and the value would be the respective closing character. We can then iterate through the string and if we encounter an opening parantheses, we push it's closing character to the stack. If we ecounter a closing paraentheses, then we pop the stack and confirm that the popped element is equal to the current closing parentheses character. If it is not then the string is invalid. At the end of the iteration, we also need to check that the stack is empty. If it is not then the string is invalid. If it is, then the string is valid. This is a more efficient approach with a Time complexity and Space complexity of O(n). - - -## References - -- [Leetcode](https://leetcode.com/problems/valid-parentheses/) diff --git a/src/algorithms/stack/valid-parentheses/__test__/validParentheses.test.js b/src/algorithms/stack/valid-parentheses/__test__/validParentheses.test.js deleted file mode 100644 index e286688dfd..0000000000 --- a/src/algorithms/stack/valid-parentheses/__test__/validParentheses.test.js +++ /dev/null @@ -1,23 +0,0 @@ -import isValid from '../validParentheses'; - -describe('validParentheses', () => { - it('should return false when string is empty', () => { - expect(isValid('')).toBe(false); - }); - - it('should return true when string contains valid parentheses in correct order', () => { - expect(isValid('()')).toBe(true); - expect(isValid('()[]{}')).toBe(true); - expect(isValid('((({[]})))')).toBe(true); - }); - - it('should return false when string contains invalid parentheses', () => { - expect(isValid('(]')).toBe(false); - expect(isValid('()[]{} }')).toBe(false); - expect(isValid('((({[(]})))')).toBe(false); - }); - - it('should return false when string contains valid parentheses in wrong order', () => { - expect(isValid('({)}')).toBe(false); - }); -}); diff --git a/src/algorithms/stack/valid-parentheses/validParentheses.js b/src/algorithms/stack/valid-parentheses/validParentheses.js deleted file mode 100644 index a327780768..0000000000 --- a/src/algorithms/stack/valid-parentheses/validParentheses.js +++ /dev/null @@ -1,42 +0,0 @@ -import Stack from '../../../data-structures/stack/Stack'; -import HashTable from '../../../data-structures/hash-table/HashTable'; - -// Declare hashtable containg opening parentheses as key and it's closing parentheses as value. -const hashTable = new HashTable(3); -hashTable.set('{', '}'); -hashTable.set('(', ')'); -hashTable.set('[', ']'); - -/** - * Check if string has valid parentheses. - * - * @param {string} parenthesesString - * @return {boolean} - */ -export default function isValid(parenthesesString) { - // If string is empty return false - if (parenthesesString.length === 0) { - return false; - } - // Create stack - const stack = new Stack(); - - // Loop through each character of string - for (let i = 0; i < parenthesesString.length; i += 1) { - const currentCharacter = parenthesesString[i]; - // If character is opening parentheses push it's closing parentheses to stack - if (hashTable.has(currentCharacter)) { - stack.push(hashTable.get(currentCharacter)); - } else { - /* If character is a closing parentheses then,: - check If stack is empty, if it is return false. - if stack is not empty, pop from stack and compare it with current character. - If they are not same return false. */ - if (stack.isEmpty() || stack.pop() !== currentCharacter) { - return false; - } - } - } - // If stack is empty return true else return false - return stack.isEmpty(); -} diff --git a/src/algorithms/statistics/weighted-random/README.md b/src/algorithms/statistics/weighted-random/README.md deleted file mode 100644 index 16e459704b..0000000000 --- a/src/algorithms/statistics/weighted-random/README.md +++ /dev/null @@ -1,143 +0,0 @@ -# Weighted Random - -![Weighted Random](images/cover.png) - -## What is "Weighted Random" - -Let's say you have a list of **items**. Item could be anything. For example, we may have a list of fruits and vegetables that you like to eat: `[ '🍌', '🍎', '🥕' ]`. - -The list of **weights** represent the weight (or probability, or importance) of each item. Weights are numbers. For example, the weights like `[3, 7, 1]` would say that: - -- you would like to eat `🍎 apples` more often (`7` out of `3 + 7 + 1 = 11` times), -- then you would like to eat `bananas 🍌` less often (only `3` out of `11` times), -- and the `carrots 🥕` you really don't like (want to eat it only `1` out of `11` times). - -> If we speak in terms of probabilities than the weights list might be an array of floats that sum up to `1` (i.e. `[0.1, 0.5, 0.2, 0.2]`). - -The **Weighted Random** in this case will be the function that will randomly return you the item from the list, and it will take each item's weight into account, so that items with the higher weight will be picked more often. - -Example of the function interface: - -```javascript -const items = [ '🍌', '🍎', '🥕' ]; -const weights = [ 3, 7, 1 ]; - -function weightedRandom(items, weights) { - // implementation goes here ... -} - -const nextSnackToEat = weightedRandom(items, weights); // Could be '🍎' -``` - -## Applications of Weighted Random - -- In [Genetic Algorithm](https://en.wikipedia.org/wiki/Genetic_algorithm) the weighted random is used during the "Selection" phase, when we need to select the fittest/strongest individuums based on their fitness score for mating and for producing the next stronger generation. You may find an **example** in the [Self-Parking Car in 500 Lines of Code](https://trekhleb.dev/blog/2021/self-parking-car-evolution/) article. -- In [Recurrent Neural Networks (RNN)](https://en.wikipedia.org/wiki/Recurrent_neural_network) when trying to decide what letter to choose next (to form the sentence) based on the next letter probability. You may find an **example** in the [Recipe Generation using Recurrent Neural Network (RNN)](https://nbviewer.org/github/trekhleb/machine-learning-experiments/blob/master/experiments/recipe_generation_rnn/recipe_generation_rnn.ipynb) Jupyter notebook. -- In [Nginx Load Balancing](https://docs.nginx.com/nginx/admin-guide/load-balancer/http-load-balancer/) to send HTTP requests more often to the servers with the higher weights. -- And more... - -## The Algorithm - -The **straightforward approach** would be to: - -1. Repeat each item in the list according to its weight. -2. Pick the random item from the list. - -For example in our case with fruits and vegetables we could generate the following list of size `3 + 7 + 1 = 11`: - -```javascript -const items = [ '🍌', '🍎', '🥕' ]; -const weights = [ 3, 7, 1 ]; - -// Repeating the items based on weights. -const weightedItems = [ - '🍌', '🍌', '🍌', - '🍎', '🍎', '🍎', '🍎', '🍎', '🍎', '🍎', - '🥕', -]; - -// And now just pick the random item from weightedItems array. -``` - -However, as you may see, this approach may require a lot of memory, in case if we have a lot of items to repeat in `weightedItems` list. Think of it as if you would need to repeat a string like `"some-random-string"` (`18` bytes) a ten million times. You will need to allocate around `180Mb` of additional memory space just for this array. - -The **more efficient approach** would be to: - -1. Prepare the list of cumulative weights for each item (i.e. the `cumulativeWeights` list which will have the same number of elements as the original `weights` list). In our case it will look like this: `cumulativeWeights = [3, 3 + 7, 3 + 7 + 1] = [3, 10, 11]` -2. Generate the random number `randomNumber` from `0` to the highest cumulative weight value. In our case the random number will be in a range of `[0..11]`. Let's say that we have `randomNumber = 8`. -3. Go through the `cumulativeWeights` list from left to right and pick the first element which is higher or equal to the `randomNumber`. The index of such element we will use to pick the item from the `items` array. - -The idea behind this approach is that the higher weights will "occupy" more numeric space. Therefore, there is a higher chance that the random number will fall into the "higher weight numeric bucket". - -```javascript -const weights = [3, 7, 1 ]; -const cumulativeWeights = [3, 10, 11]; - -// In a pseudo-representation we may think about the cumulativeWeights array like this. -const pseudoCumulativeWeights = [ - 1, 2, 3, // <-- [3] numbers - 4, 5, 6, 7, 8, 9, 10, // <-- [7] numbers - 11, // <-- [1] number -]; -``` - -Here is an example of how the `weightedRandom` function might be implemented: - -```javascript -/** - * Picks the random item based on its weight. - * The items with higher weight will be picked more often (with a higher probability). - * - * For example: - * - items = ['banana', 'orange', 'apple'] - * - weights = [0, 0.2, 0.8] - * - weightedRandom(items, weights) in 80% of cases will return 'apple', in 20% of cases will return - * 'orange' and it will never return 'banana' (because probability of picking the banana is 0%) - * - * @param {any[]} items - * @param {number[]} weights - * @returns {{item: any, index: number}} - */ -export default function weightedRandom(items, weights) { - if (items.length !== weights.length) { - throw new Error('Items and weights must be of the same size'); - } - - if (!items.length) { - throw new Error('Items must not be empty'); - } - - // Preparing the cumulative weights array. - // For example: - // - weights = [1, 4, 3] - // - cumulativeWeights = [1, 5, 8] - const cumulativeWeights = []; - for (let i = 0; i < weights.length; i += 1) { - cumulativeWeights[i] = weights[i] + (cumulativeWeights[i - 1] || 0); - } - - // Getting the random number in a range of [0...sum(weights)] - // For example: - // - weights = [1, 4, 3] - // - maxCumulativeWeight = 8 - // - range for the random number is [0...8] - const maxCumulativeWeight = cumulativeWeights[cumulativeWeights.length - 1]; - const randomNumber = maxCumulativeWeight * Math.random(); - - // Picking the random item based on its weight. - // The items with higher weight will be picked more often. - for (let itemIndex = 0; itemIndex < items.length; itemIndex += 1) { - if (cumulativeWeights[itemIndex] >= randomNumber) { - return { - item: items[itemIndex], - index: itemIndex, - }; - } - } -} -``` - -## Implementation - -- Check the [weightedRandom.js](weightedRandom.js) file for the implementation of the `weightedRandom()` function. -- Check the [weightedRandom.test.js](__test__/weightedRandom.test.js) file for the tests-cases. diff --git a/src/algorithms/statistics/weighted-random/__test__/weightedRandom.test.js b/src/algorithms/statistics/weighted-random/__test__/weightedRandom.test.js deleted file mode 100644 index 1b0b267627..0000000000 --- a/src/algorithms/statistics/weighted-random/__test__/weightedRandom.test.js +++ /dev/null @@ -1,64 +0,0 @@ -import weightedRandom from '../weightedRandom'; - -describe('weightedRandom', () => { - it('should throw an error when the number of weights does not match the number of items', () => { - const getWeightedRandomWithInvalidInputs = () => { - weightedRandom(['a', 'b', 'c'], [10, 0]); - }; - expect(getWeightedRandomWithInvalidInputs).toThrow('Items and weights must be of the same size'); - }); - - it('should throw an error when the number of weights or items are empty', () => { - const getWeightedRandomWithInvalidInputs = () => { - weightedRandom([], []); - }; - expect(getWeightedRandomWithInvalidInputs).toThrow('Items must not be empty'); - }); - - it('should correctly do random selection based on wights in straightforward cases', () => { - expect(weightedRandom(['a', 'b', 'c'], [1, 0, 0])).toEqual({ index: 0, item: 'a' }); - expect(weightedRandom(['a', 'b', 'c'], [0, 1, 0])).toEqual({ index: 1, item: 'b' }); - expect(weightedRandom(['a', 'b', 'c'], [0, 0, 1])).toEqual({ index: 2, item: 'c' }); - expect(weightedRandom(['a', 'b', 'c'], [0, 1, 1])).not.toEqual({ index: 0, item: 'a' }); - expect(weightedRandom(['a', 'b', 'c'], [1, 0, 1])).not.toEqual({ index: 1, item: 'b' }); - expect(weightedRandom(['a', 'b', 'c'], [1, 1, 0])).not.toEqual({ index: 2, item: 'c' }); - }); - - it('should correctly do random selection based on wights', () => { - // Number of times we're going to select the random items based on their weights. - const ATTEMPTS_NUM = 1000; - // The +/- delta in the number of times each item has been actually selected. - // I.e. if we want the item 'a' to be selected 300 times out of 1000 cases (30%) - // then 267 times is acceptable since it is bigger that 250 (which is 300 - 50) - // ans smaller than 350 (which is 300 + 50) - const THRESHOLD = 50; - - const items = ['a', 'b', 'c']; // The actual items values don't matter. - const weights = [0.1, 0.3, 0.6]; - - const counter = []; - for (let i = 0; i < ATTEMPTS_NUM; i += 1) { - const randomItem = weightedRandom(items, weights); - if (!counter[randomItem.index]) { - counter[randomItem.index] = 1; - } else { - counter[randomItem.index] += 1; - } - } - - for (let itemIndex = 0; itemIndex < items.length; itemIndex += 1) { - /* - i.e. item with the index of 0 must be selected 100 times (ideally) - or with the threshold of [100 - 50, 100 + 50] times. - - i.e. item with the index of 1 must be selected 300 times (ideally) - or with the threshold of [300 - 50, 300 + 50] times. - - i.e. item with the index of 2 must be selected 600 times (ideally) - or with the threshold of [600 - 50, 600 + 50] times. - */ - expect(counter[itemIndex]).toBeGreaterThan(ATTEMPTS_NUM * weights[itemIndex] - THRESHOLD); - expect(counter[itemIndex]).toBeLessThan(ATTEMPTS_NUM * weights[itemIndex] + THRESHOLD); - } - }); -}); diff --git a/src/algorithms/statistics/weighted-random/images/cover.png b/src/algorithms/statistics/weighted-random/images/cover.png deleted file mode 100644 index a4bf41b65ffe1aa0598b6febb17a415ba70dc3a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 305130 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�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

_R-Yc>ozNzhs$}hg3-7n9i+Q0A??%N_$*7N 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 diff --git a/src/algorithms/sets/combinations/images/combinations-without-repetitions.jpg b/src/algorithms/sets/combinations/images/combinations-without-repetitions.jpg deleted file mode 100644 index 9262f99c862129f514295437d72f898673f7ba9d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 309391 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 UJ) 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 z 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%0AMF94Siyz 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