├── .gitIgnore ├── leet-code └── Easy │ └── two_sum │ ├── algo-analysis.png │ ├── README.MD │ └── solutions │ └── js │ ├── solution.js │ └── solution.test.js ├── package.json ├── hackerank └── Easy │ ├── counting_valleys │ ├── solutions │ │ ├── js │ │ │ ├── solution.test.js │ │ │ └── solution.js │ │ ├── go │ │ │ ├── solution._test.go │ │ │ └── solution.go │ │ └── python │ │ │ ├── solution.test.py │ │ │ └── solution.py │ └── README.MD │ ├── jumping_clouds │ ├── solutions │ │ ├── php │ │ │ ├── SolutionTest.php │ │ │ └── solution.php │ │ └── go │ │ │ ├── solution.go │ │ │ └── solution._test.go │ └── README.MD │ ├── repeated_strings │ ├── solutions │ │ └── go │ │ │ ├── solution._test.go │ │ │ └── solution.go │ └── README.MD │ └── staircase │ ├── solutions │ └── js │ │ ├── solution.test.js │ │ └── solution.js │ └── README.MD ├── composer.json ├── LICENSE.md ├── CONTRIBUTING.md ├── README.md └── composer.lock /.gitIgnore: -------------------------------------------------------------------------------- 1 | node_modules/ -------------------------------------------------------------------------------- /leet-code/Easy/two_sum/algo-analysis.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arausly/algo-rhymes/HEAD/leet-code/Easy/two_sum/algo-analysis.png -------------------------------------------------------------------------------- /leet-code/Easy/two_sum/README.MD: -------------------------------------------------------------------------------- 1 | # Question 2 | *[Link to LeetCode question](https://leetcode.com/problems/two-sum/) 3 | 4 | 5 | 6 | ## Explanation 7 | 8 | 9 | 10 | 11 | 12 | ## Algorithm Analysis 13 | 14 | ![LeetCode analysis](./algo-analysis.png) -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "algo-rhymes", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "jest" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC", 12 | "devDependencies": { 13 | "jest": "^26.6.3" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /hackerank/Easy/counting_valleys/solutions/js/solution.test.js: -------------------------------------------------------------------------------- 1 | const countingValleys = require("./solution"); 2 | 3 | test("returns 2 valleys for the path entries", () => { 4 | expect(countingValleys(12, "DDUUDDUDUUUD")).toBe(2); 5 | }); 6 | 7 | test("returns 1 valley for the path entries", () => { 8 | expect(countingValleys(8, "UDDDUDUU")).toBe(1); 9 | }); 10 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "donkovah/algorithms", 3 | "description": "Hackerrank & Leetcode Questions Solutions And Test Cases", 4 | "type": "project", 5 | "require-dev": { 6 | "phpunit/phpunit": "^9.5" 7 | }, 8 | "license": "MIT", 9 | "authors": [ 10 | { 11 | "name": "Oluwasegun Kesington", 12 | "email": "iamkesington@gmail.com" 13 | } 14 | ], 15 | "require": { 16 | "PHP": "^7.3" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /hackerank/Easy/jumping_clouds/solutions/php/SolutionTest.php: -------------------------------------------------------------------------------- 1 | assertSame(4, jumpingOnClouds($stack1)); 12 | $this->assertSame(3, jumpingOnClouds($stack2)); 13 | } 14 | } -------------------------------------------------------------------------------- /hackerank/Easy/jumping_clouds/solutions/php/solution.php: -------------------------------------------------------------------------------- 1 | } numbers 4 | * @param {number} target 5 | * @returns {Array} 6 | */ 7 | const twoSum = (numbers, target) => { 8 | for (let i = 0; i < numbers.length - 1; i++) { 9 | for (let j = i + 1; j < numbers.length; j++) { 10 | let n1 = numbers[i], 11 | n2 = numbers[j]; 12 | const sum = n1 + n2; 13 | if (sum === target) { 14 | return [i, j]; 15 | } 16 | } 17 | } 18 | }; 19 | 20 | module.exports = twoSum; 21 | -------------------------------------------------------------------------------- /hackerank/Easy/counting_valleys/solutions/python/solution.test.py: -------------------------------------------------------------------------------- 1 | 2 | from solution import counting_valleys 3 | 4 | 5 | def test_counting_valleys(): 6 | path1, steps1, paths2, step2 = "DDUUDDUDUUUD", 12, "UDDDUDUU", 8 7 | valleys1, valleys2 = counting_valleys( 8 | steps1, path1), counting_valleys(step2, paths2) 9 | assert(valleys1) == 2, "Expected the number of valleys to be 2" 10 | assert(valleys2) == 1, "Expected the number of valleys to be 1" 11 | 12 | 13 | if __name__ == "__main__": 14 | test_counting_valleys() 15 | print("PASS \n ok") 16 | -------------------------------------------------------------------------------- /hackerank/Easy/staircase/solutions/js/solution.test.js: -------------------------------------------------------------------------------- 1 | const staircase = require("./solution"); 2 | 3 | test("returns N stairs for N numbers", () => { 4 | let res = ' #' + '\n' + '##' + '\n'; 5 | expect(staircase.staircaseSolution1(2)).toBe(res); 6 | }); 7 | 8 | test("returns N stairs for N numbers", () => { 9 | let res = ' #' + '\n' + '##' + '\n'; 10 | expect(staircase.staircaseSolution2(2)).toBe(res); 11 | }); 12 | 13 | test("returns N stairs for N numbers", () => { 14 | let res = ' #' + '\n' + '##' + '\n'; 15 | expect(staircase.staircaseSolution3(2)).toBe(res); 16 | }); -------------------------------------------------------------------------------- /hackerank/Easy/counting_valleys/solutions/go/solution.go: -------------------------------------------------------------------------------- 1 | package countingvalleys 2 | 3 | import ( 4 | "strings" 5 | ) 6 | 7 | func countingValleys(n int, paths string) int { 8 | valleyCount, depthTracker, seaLevel := 0, 0, 0 9 | s := strings.Split(paths, "") 10 | for _, path := range s { 11 | if path == "U" { 12 | seaLevel++ 13 | } else { 14 | seaLevel-- 15 | } 16 | 17 | if seaLevel == -1 { 18 | depthTracker = seaLevel 19 | } 20 | 21 | if seaLevel == 0 && depthTracker == -1 { 22 | valleyCount++ 23 | depthTracker = 0 24 | } 25 | } 26 | return valleyCount 27 | } 28 | -------------------------------------------------------------------------------- /hackerank/Easy/counting_valleys/solutions/python/solution.py: -------------------------------------------------------------------------------- 1 | def counting_valleys(n, path): 2 | valley_count, depth_tracker, sea_level = 0, 0, 0 3 | paths_arr = list(path) 4 | for path in paths_arr: 5 | if path == "U": 6 | sea_level += 1 7 | else: 8 | sea_level -= 1 9 | 10 | if sea_level == -1: 11 | depth_tracker = sea_level 12 | 13 | if depth_tracker == -1 and sea_level == 0: 14 | valley_count += 1 15 | depth_tracker = 0 16 | 17 | return valley_count 18 | 19 | 20 | if __name__ == "__main__": 21 | pass 22 | -------------------------------------------------------------------------------- /leet-code/Easy/two_sum/solutions/js/solution.test.js: -------------------------------------------------------------------------------- 1 | const twoSum = require("./solution"); 2 | 3 | test("should return 0 and 1 for numbers provided", () => { 4 | const numbers = [2, 7, 11, 15]; 5 | const target = 9; 6 | const indices = twoSum(numbers, target); 7 | const expected = [1, 0]; 8 | expect(indices).toEqual(expect.arrayContaining(expected)); 9 | }); 10 | 11 | test("should return 0 and 1 for arrays with duplicate numbers", () => { 12 | const numbers = [3, 3, 3]; 13 | const target = 6; 14 | const indices = twoSum(numbers, target); 15 | const expected = [0, 1]; 16 | expect(indices).toEqual(expect.arrayContaining(expected)); 17 | }); 18 | -------------------------------------------------------------------------------- /hackerank/Easy/staircase/README.MD: -------------------------------------------------------------------------------- 1 | # Question 2 | *[Link to hackerRank](https://www.hackerrank.com/challenges/staircase/problem) 3 | 4 | 5 | ## Explanation 6 | My solution here is in Javascript and its pretty straightforward and follows a similar approach. The question has a number of N stairs and Its base and height are both equal to N. It is drawn using # symbols and spaces. The last line is not preceded by any spaces. 7 | 8 | 9 | Firstly, in the context of this question, there is a total number of N stairs and we are required to print as much space for each line till we get to the last line. 10 | 11 | By default, we would want to have a loop to run through N numbers and ensure we add the required space (N -1) before adding the harsh(#) character. Simple enough right. I though so too. 12 | -------------------------------------------------------------------------------- /hackerank/Easy/counting_valleys/solutions/js/solution.js: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * @param {number} n Number of steps taken for the hikes 4 | * @param {string} paths sequence of characters denoting the upward and downward movement above and below sea-level 5 | */ 6 | const countingValleys = (n, paths) => { 7 | let seaLevel = 0, 8 | valleyCount = 0, 9 | depthTracker = 0; 10 | 11 | paths.split("").forEach((path) => { 12 | if (path === "U") { 13 | seaLevel++; 14 | } else { 15 | seaLevel--; 16 | } 17 | 18 | //for a deep below sea-level 19 | if (seaLevel === -1) { 20 | depthTracker = -1; 21 | } 22 | 23 | if (depthTracker === -1 && seaLevel === 0) { 24 | valleyCount++; 25 | depthTracker = 0; 26 | } 27 | }); 28 | 29 | return valleyCount; 30 | }; 31 | 32 | module.exports = countingValleys; 33 | -------------------------------------------------------------------------------- /hackerank/Easy/jumping_clouds/README.MD: -------------------------------------------------------------------------------- 1 | # Question 2 | *[Link to hackerRank](https://www.hackerrank.com/challenges/jumping-on-the-clouds/problem?h_l=interview&playlist_slugs%5B%5D=interview-preparation-kit&playlist_slugs%5B%5D=warmup) 3 | 4 | 5 | 6 | ## Explanation 7 | My solution here in golang shows three main thought trends. First, I try to generate an array with just the indices, then I find the minimum jumps. The second approach was to work with the given array "c" directly, rather than getting the indices. 8 | 9 | NOTE: the first two approaches are both of linear time-complexity. 10 | ``` O(n) + O(n) === O(2n) === O(n)``` 11 | 12 | The final approach drew learnings from the previous solutions. I realized that I could focus on the given array "c" (idea from the second solution) and particularly only on the zeros. to explain further, I iterated through the array, and for every iteration, I tried to make the longest jump possible (2). if ```n + 2``` existed. I disregarded the next element and counted that as a valid jump. If ```n + 2``` didn't exist I will add the next element. -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Arausi Daniel 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /hackerank/Easy/counting_valleys/README.MD: -------------------------------------------------------------------------------- 1 | # Question 2 | *[Link to hackerRank](https://www.hackerrank.com/challenges/counting-valleys/problem?h_l=interview&playlist_slugs%5B%5D=interview-preparation-kit&playlist_slugs%5B%5D=warmup) 3 | 4 | 5 | ## Explanation 6 | My solution here in three languages is pretty straightforward and follows a similar approach. The question requires a total count of the number of valleys created by the path given. I will walk you through the mental leaps I had to take to arrive at my linear time complexity solution. 7 | 8 | 9 | Firstly, in the context of this question, what is a valley? A valley is created when the hiker moves below sea-level and touches back to the sea-level. Imagine the sea-level to be at point 0 on the vertical rule scale. A movement towards path "D" should cause a drop to about -1 for 1 unit movement and vice-versa a movement towards path "U" should raise to about 1 for 1 unit movement. 10 | 11 | 12 | Having this mental picture made it relatively easy to associate these ideas with variables. The "depthTracker" variable for example was declared to act as a watchman to ensure that for every deep in sea-level there was a commensurate touch to sea-level else it would not be counted as a valley. 13 | 14 | -------------------------------------------------------------------------------- /hackerank/Easy/repeated_strings/solutions/go/solution.go: -------------------------------------------------------------------------------- 1 | package repeatedstrings 2 | 3 | import ( 4 | "math" 5 | "strings" 6 | ) 7 | 8 | func countA(s string, f *int64) { 9 | for _, val := range s { 10 | if val == 'a' { 11 | *f++ 12 | } 13 | } 14 | } 15 | 16 | //accepted and most optimal solution ✅✅ 17 | func repeatedString(s string, n int64) int64 { 18 | var f int64 19 | l := int64(len(s)) 20 | 21 | switch { 22 | case !strings.Contains(s, "a"): 23 | return 0 24 | case l == 1: 25 | return n 26 | case l < n: 27 | g := math.Floor(float64(n / l)) 28 | m := n % l 29 | countA(s, &f) 30 | f *= int64(g) 31 | 32 | if m > 0 { 33 | countA(s[:m], &f) 34 | } 35 | return f 36 | default: 37 | countA(s[:n], &f) 38 | return f 39 | } 40 | } 41 | 42 | //⚠⚠⚠⚠⚠⚠⚠⚠⚠⚠ WARNING!! ⚠⚠⚠⚠⚠⚠⚠⚠⚠⚠⚠⚠⚠⚠ 43 | //valid solution but NOT optimal solution. 44 | //doesn't pass tests with time-limits on them 45 | func repeatedString2(s string, n int64) int64 { 46 | var f int64 47 | r, l := s, int64(len(s)) 48 | 49 | if !strings.Contains(s, "a") { 50 | return 0 51 | } 52 | 53 | if l == 1 { 54 | return n 55 | } 56 | 57 | //build the repeated string 58 | if l < n { 59 | for int64(len(r)) < n { 60 | d := n - int64(len(r)) 61 | if int(d) > len(s) { 62 | d = int64(len(s)) 63 | } 64 | r += s[:d] 65 | } 66 | } 67 | 68 | //count frquencies of a in repeated string 69 | for _, val := range r[:n] { 70 | if val == 'a' { 71 | f++ 72 | } 73 | } 74 | 75 | return f 76 | } 77 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contribution Guide for data-structures-all-langs 2 | 3 | Thank you for taking time out to learn the best practices for contributing to this repo! Your contributions will potentially help thousands of developers on their journeys to understand data structures intuitively. Please, read through carefully and feel free to open an issue if something is not clear. 4 | 5 | # Before you start coding 6 | 7 | If you are interested in contributing a feature, please [file an issue first](https://github.com/arausly/algo-rhymes/issues/new). Wait for a project maintainer to respond before you spend time coding. 8 | 9 | If you wish to work on an existing issue, please add a comment saying so, as someone may already be working on it. A project maintainer may respond with advice on how to get started. 10 | _Copied this paragraph from [vscode-go](https://github.com/golang/vscode-go/blob/master/docs/contributing.md#before-you-start-coding)._ 11 | 12 | # Guidelines 13 | 14 | As a contributor you can: 15 | 16 | - Implement a data structure in a language that doesn't exist 17 | - Improve any implementation 18 | - Improve the READMEs explaining any data structure (NO SPAMS, PLS) 19 | 20 | ## Adding/Editing a Coding File 21 | 22 | - Coding file should be created a directory that looks like `algo-ryhmes/diffculty/name_of_problem/solutions/programming.language/name.of.file` 23 | - Add a readme explaining your solution to the question 24 | - Add driver code (i.e. code in the "main" function to test the implementation) 25 | 26 | ## Creating PRs 27 | 28 | - The relevant issue links should be referenced in the PR 29 | -------------------------------------------------------------------------------- /hackerank/Easy/staircase/solutions/js/solution.js: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * @param {number} n Number of stairs 4 | */ 5 | 6 | function staircaseSolution1(n) { 7 | let spaceNum = 0; 8 | let space = ''; 9 | let harsh = ''; 10 | let res = ''; 11 | for(let i = 0; i < n; i++){ 12 | spaceNum = n - i; 13 | for(let j = 1; j < spaceNum; j++){ 14 | space = space + ' '; 15 | } 16 | harsh = harsh + '#'; 17 | res += space + harsh + '\n' 18 | space = ''; 19 | } 20 | return res; 21 | }; 22 | 23 | /** 24 | * Looking at the function above, you would notice the above 25 | * runs for O(n)square. I think we can make this even run better 26 | */ 27 | 28 | function staircaseSolution2(n) { 29 | let spaceNum = 0; 30 | let space = ''; 31 | let res = ''; 32 | let harsh = ''; 33 | for(let i = 0; i < n; i++){ 34 | spaceNum = (n - 1) - i; 35 | space = ' '.repeat(spaceNum); 36 | harsh = harsh + '#'; 37 | // console.log(space + harsh); 38 | res += space + harsh + '\n'; 39 | space = ''; 40 | } 41 | return res; 42 | }; 43 | 44 | /** 45 | * The function above runs faster (O(n)), However, I think we can 46 | * manage memory even more. 47 | */ 48 | 49 | function staircaseSolution3(n) { 50 | let stairs = ""; 51 | let harsh = "#"; 52 | for (let i = 1; i <= n; i++) { 53 | stairs += `${" ".repeat(n - i)}${harsh.repeat(i)}\n`; 54 | } 55 | return stairs; 56 | }; 57 | 58 | /** 59 | * The function above still runs fast (O(n)) and manages memory better IMO. 60 | */ 61 | 62 | module.exports = { 63 | staircaseSolution1, 64 | staircaseSolution2, 65 | staircaseSolution3 66 | } -------------------------------------------------------------------------------- /hackerank/Easy/jumping_clouds/solutions/go/solution.go: -------------------------------------------------------------------------------- 1 | package jumpingclouds 2 | 3 | //Initial thought process 4 | func jumpingOnClouds1(c []int32) int32 { 5 | var v []int32 6 | //get valid indices 7 | for index, val := range c { 8 | if val == 0 { 9 | v = append(v, int32(index)) 10 | } 11 | } 12 | 13 | counter, m := 0, []int32{v[0]} 14 | //get minimum jumps 15 | for counter+2 <= len(v) { 16 | n1, n2 := v[counter], v[counter+1] 17 | 18 | if n2-n1 == 1 && counter+2 <= len(v)-1 { 19 | n3 := v[counter+2] 20 | if n3-n1 == 2 { 21 | m = append(m, n3) 22 | counter += 2 23 | } else { 24 | m = append(m, n2) 25 | counter++ 26 | } 27 | } else { 28 | m = append(m, n2) 29 | counter++ 30 | } 31 | } 32 | return int32(len(m)) - 1 33 | } 34 | 35 | //second thought process 36 | func jumpingOnClouds2(c []int32) int32 { 37 | counter, m := 0, []int32{0} 38 | 39 | //get minimum jumps 40 | for counter+2 <= len(c) { 41 | n1, n2 := counter, counter+1 42 | if c[counter] == 0 { 43 | if n2-n1 == 1 && counter+2 <= len(c)-1 && c[counter+2] == 0 { 44 | n3 := counter + 2 45 | if n3-n1 == 2 { 46 | m = append(m, int32(n3)) 47 | counter += 2 48 | } else { 49 | m = append(m, int32(n2)) 50 | counter++ 51 | } 52 | } else { 53 | m = append(m, int32(n2)) 54 | counter++ 55 | } 56 | } 57 | } 58 | return int32(len(m)) - 1 59 | } 60 | 61 | //accepted and most optimal solution ✅✅ 62 | func jumpingOnClouds(c []int32) (j int32) { 63 | i := 0 64 | for { 65 | if i+2 < len(c) { 66 | if c[i+2] == 0 { 67 | j++ 68 | i += 2 69 | } else if c[i+1] == 0 { 70 | j++ 71 | i++ 72 | } 73 | } else if i+1 < len(c) { 74 | j++ 75 | i++ 76 | } else { 77 | break 78 | } 79 | } 80 | return j 81 | } 82 | -------------------------------------------------------------------------------- /hackerank/Easy/jumping_clouds/solutions/go/solution._test.go: -------------------------------------------------------------------------------- 1 | package jumpingclouds 2 | 3 | import ( 4 | "fmt" 5 | "testing" 6 | ) 7 | 8 | func TestJumpingOnClouds(t *testing.T) { 9 | ans := []int32{4, 3, 6, 28, 53, 54, 1, 46, 1} 10 | params := [][]int32{ 11 | []int32{0, 0, 1, 0, 0, 1, 0}, 12 | []int32{0, 0, 0, 1, 0, 0}, 13 | []int32{0, 0, 1, 0, 0, 0, 0, 1, 0, 0}, 14 | []int32{ 15 | 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 16 | 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 17 | 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 18 | 1, 0, 0, 1, 0, 1, 0, 0, 19 | }, 20 | []int32{ 21 | 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 22 | 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 23 | 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 24 | 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 25 | 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 26 | 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 27 | 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 28 | }, 29 | []int32{ 30 | 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 31 | 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 32 | 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 33 | 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 34 | 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 35 | 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 36 | 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 37 | }, 38 | []int32{0, 0}, 39 | []int32{ 40 | 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 41 | 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 42 | 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 43 | 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 44 | 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 45 | 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 46 | }, 47 | []int32{0, 1, 0}, 48 | } 49 | 50 | fmt.Printf("------------------------Jumping Clouds-----------------------\n") 51 | 52 | for i := 0; i < len(ans); i++ { 53 | j := jumpingOnClouds(params[i]) 54 | if j != ans[i] { 55 | t.Errorf("Expected %v but received %v", ans[i], j) 56 | } 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /hackerank/Easy/repeated_strings/README.MD: -------------------------------------------------------------------------------- 1 | # Question 2 | [Link to hackerRank Question](https://www.hackerrank.com/challenges/repeated-string/problem?h_l=interview&playlist_slugs%5B%5D=interview-preparation-kit&playlist_slugs%5B%5D=warmup) 3 | 4 | # Explanation 5 | Although this question is marked as easy, it can prove difficult if close attention to the input constraints is not considered in your algorithmic solution. I came up with three(3) different approaches shown only in my golang solution. For other languages, specifically javascript and python, I only showed the most optimal solution that passes all the test cases. 6 | 7 | 8 | The first approach had a quadratic (O(n^2)) time complexity. I decided that as long as the base string "s" is not up to the length "n", keep adding the characters (s) one after the other until it reached the target length (n) 9 | 10 | see code snippet below: 11 | 12 | ``` 13 | r := s 14 | sArr = strings.Split(s, "") 15 | for s < n { 16 | for _, val := range sArr { 17 | if len(s) == n { 18 | break 19 | } 20 | r += val 21 | } 22 | } 23 | ``` 24 | 25 | This was a valid solution, however, given the input constraints (1 <= n <= 10 ^ 12) our current solution would timeout for really large values of n. This is because depending on the length of s and the value of n, I would have to loop at least twice to construct the repeated string. 26 | 27 | My second approach was similar but nearly linear time complexity. 28 | see below code snippet: 29 | 30 | ``` 31 | for int64(len(r)) < n { 32 | d := n - int64(len(r)) 33 | if int(d) > len(s) { 34 | d = int64(len(s)) 35 | } 36 | r += s[:d] 37 | } 38 | ``` 39 | 40 | This also is a valid solution but doesn't pass the time-limit set in some test cases. In this approach, I get the difference per iteration and append a slice of the base string with reference to the difference. 41 | 42 | NOTE: a quick note here, for the two approaches above I focused on generating the repeated infinite string and then counting the occurrences of "a" in that repeated string. 43 | 44 | 45 | 46 | My final and the optimal solution totally disregards the approach of trying to generate the repeated string first. Instead, it counts the occurrences in the first string, then it multiplies it by the possible number of times the base string "s" will be repeated given n. And then adds any excess remainder if available. 47 | 48 | see main code snippets below: 49 | 50 | ``` 51 | g := math.Floor(float64(n / l)) 52 | m := n % l 53 | ... 54 | ... 55 | ... 56 | f *= int64(g) 57 | 58 | // where m is the remainder 59 | // g is the number of times the length of the base string goes into the target "n" 60 | // f is the frequency of the letter "a" 61 | ``` 62 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Hackerank and LeetCode Solutions 2 | 3 |

This project contains algorithm questions and solutions from Hackeraank and LeetCode. The Solutions to this questions are written in different languages such as JavaSript, Python and Golang. Most of these are real interview questions of Google, Facebook, LinkedIn, Apple, etc. and it always help to sharp our algorithm Skills. Level up your coding skills and quickly land a job. This Repo is here to help you prepare for your next interview and expand your knowledge.

4 |

Most solutions have a test file, a readme and a link to the hackerank question itself. The readme contains the thought process and a detailed explanation of what the developer did.

5 | 6 | # Hackerank Problems 7 | 8 | | No. | Title | Language | Solution | Diffculty | 9 | | :--: | :--------------- | :-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------: | :-------: | 10 | | 0001 | Counting Valleys | JavaScript Language Python Language Go | [Go](https://github.com/arausly/algo-rhymes/tree/master/hackerank/Easy/counting_valleys/solutions) | Easy | 11 | | 0002 | Jumping Clouds | Php Golang | [Go](https://github.com/arausly/algo-rhymes/tree/master/hackerank/Easy/jumping_clouds/solutions) | Easy | 12 | | 0003 | Repeated Strings | Golang | [Go](https://github.com/arausly/algo-rhymes/tree/master/hackerank/Easy/jumping_cloudss/solutions) | Easy | 13 | | 0004 | Staircase | JavaScript Language | [Go](https://github.com/arausly/algo-rhymes/tree/master/hackerank/Easy/stairecase/solutions) | Easy | 14 | | | | | | 15 | 16 | # LeetCode Solutions 17 | 18 | | No. | Title | Language | Solution | Diffculty | 19 | | :--: | :------- | :-----------------------------------------------------------------------------: | :-----------------------------------------------------------------------------: | :-------: | 20 | | 0001 | Two Sums | JavaScript | [Go](https://github.com/arausly/algo-rhymes/tree/master/leet-code/Easy/two_sum) | Easy | 21 | | | | | | | 22 | 23 | # License 24 | 25 | This project is licensed under the MIT License - see the LICENSE.md file for details 26 | 27 | # Contributions 28 | 29 | Contributions are very welcome. Read the [contributing guide](https://github.com/arausly/algo-rhymes/blob/main/CONTRIBUTING.md). 30 | 31 | ## Contributors 32 | 33 | 38 | -------------------------------------------------------------------------------- /composer.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_readme": [ 3 | "This file locks the dependencies of your project to a known state", 4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", 5 | "This file is @generated automatically" 6 | ], 7 | "content-hash": "f5cf4496acc6504086226352836b62d2", 8 | "packages": [], 9 | "packages-dev": [ 10 | { 11 | "name": "doctrine/instantiator", 12 | "version": "1.4.0", 13 | "source": { 14 | "type": "git", 15 | "url": "https://github.com/doctrine/instantiator.git", 16 | "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b" 17 | }, 18 | "dist": { 19 | "type": "zip", 20 | "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b", 21 | "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b", 22 | "shasum": "" 23 | }, 24 | "require": { 25 | "php": "^7.1 || ^8.0" 26 | }, 27 | "require-dev": { 28 | "doctrine/coding-standard": "^8.0", 29 | "ext-pdo": "*", 30 | "ext-phar": "*", 31 | "phpbench/phpbench": "^0.13 || 1.0.0-alpha2", 32 | "phpstan/phpstan": "^0.12", 33 | "phpstan/phpstan-phpunit": "^0.12", 34 | "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" 35 | }, 36 | "type": "library", 37 | "autoload": { 38 | "psr-4": { 39 | "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" 40 | } 41 | }, 42 | "notification-url": "https://packagist.org/downloads/", 43 | "license": [ 44 | "MIT" 45 | ], 46 | "authors": [ 47 | { 48 | "name": "Marco Pivetta", 49 | "email": "ocramius@gmail.com", 50 | "homepage": "https://ocramius.github.io/" 51 | } 52 | ], 53 | "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", 54 | "homepage": "https://www.doctrine-project.org/projects/instantiator.html", 55 | "keywords": [ 56 | "constructor", 57 | "instantiate" 58 | ], 59 | "time": "2020-11-10T18:47:58+00:00" 60 | }, 61 | { 62 | "name": "myclabs/deep-copy", 63 | "version": "1.10.2", 64 | "source": { 65 | "type": "git", 66 | "url": "https://github.com/myclabs/DeepCopy.git", 67 | "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" 68 | }, 69 | "dist": { 70 | "type": "zip", 71 | "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", 72 | "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", 73 | "shasum": "" 74 | }, 75 | "require": { 76 | "php": "^7.1 || ^8.0" 77 | }, 78 | "replace": { 79 | "myclabs/deep-copy": "self.version" 80 | }, 81 | "require-dev": { 82 | "doctrine/collections": "^1.0", 83 | "doctrine/common": "^2.6", 84 | "phpunit/phpunit": "^7.1" 85 | }, 86 | "type": "library", 87 | "autoload": { 88 | "psr-4": { 89 | "DeepCopy\\": "src/DeepCopy/" 90 | }, 91 | "files": [ 92 | "src/DeepCopy/deep_copy.php" 93 | ] 94 | }, 95 | "notification-url": "https://packagist.org/downloads/", 96 | "license": [ 97 | "MIT" 98 | ], 99 | "description": "Create deep copies (clones) of your objects", 100 | "keywords": [ 101 | "clone", 102 | "copy", 103 | "duplicate", 104 | "object", 105 | "object graph" 106 | ], 107 | "time": "2020-11-13T09:40:50+00:00" 108 | }, 109 | { 110 | "name": "nikic/php-parser", 111 | "version": "v4.10.4", 112 | "source": { 113 | "type": "git", 114 | "url": "https://github.com/nikic/PHP-Parser.git", 115 | "reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e" 116 | }, 117 | "dist": { 118 | "type": "zip", 119 | "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/c6d052fc58cb876152f89f532b95a8d7907e7f0e", 120 | "reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e", 121 | "shasum": "" 122 | }, 123 | "require": { 124 | "ext-tokenizer": "*", 125 | "php": ">=7.0" 126 | }, 127 | "require-dev": { 128 | "ircmaxell/php-yacc": "^0.0.7", 129 | "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" 130 | }, 131 | "bin": [ 132 | "bin/php-parse" 133 | ], 134 | "type": "library", 135 | "extra": { 136 | "branch-alias": { 137 | "dev-master": "4.9-dev" 138 | } 139 | }, 140 | "autoload": { 141 | "psr-4": { 142 | "PhpParser\\": "lib/PhpParser" 143 | } 144 | }, 145 | "notification-url": "https://packagist.org/downloads/", 146 | "license": [ 147 | "BSD-3-Clause" 148 | ], 149 | "authors": [ 150 | { 151 | "name": "Nikita Popov" 152 | } 153 | ], 154 | "description": "A PHP parser written in PHP", 155 | "keywords": [ 156 | "parser", 157 | "php" 158 | ], 159 | "time": "2020-12-20T10:01:03+00:00" 160 | }, 161 | { 162 | "name": "phar-io/manifest", 163 | "version": "2.0.1", 164 | "source": { 165 | "type": "git", 166 | "url": "https://github.com/phar-io/manifest.git", 167 | "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133" 168 | }, 169 | "dist": { 170 | "type": "zip", 171 | "url": "https://api.github.com/repos/phar-io/manifest/zipball/85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", 172 | "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", 173 | "shasum": "" 174 | }, 175 | "require": { 176 | "ext-dom": "*", 177 | "ext-phar": "*", 178 | "ext-xmlwriter": "*", 179 | "phar-io/version": "^3.0.1", 180 | "php": "^7.2 || ^8.0" 181 | }, 182 | "type": "library", 183 | "extra": { 184 | "branch-alias": { 185 | "dev-master": "2.0.x-dev" 186 | } 187 | }, 188 | "autoload": { 189 | "classmap": [ 190 | "src/" 191 | ] 192 | }, 193 | "notification-url": "https://packagist.org/downloads/", 194 | "license": [ 195 | "BSD-3-Clause" 196 | ], 197 | "authors": [ 198 | { 199 | "name": "Arne Blankerts", 200 | "email": "arne@blankerts.de", 201 | "role": "Developer" 202 | }, 203 | { 204 | "name": "Sebastian Heuer", 205 | "email": "sebastian@phpeople.de", 206 | "role": "Developer" 207 | }, 208 | { 209 | "name": "Sebastian Bergmann", 210 | "email": "sebastian@phpunit.de", 211 | "role": "Developer" 212 | } 213 | ], 214 | "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", 215 | "time": "2020-06-27T14:33:11+00:00" 216 | }, 217 | { 218 | "name": "phar-io/version", 219 | "version": "3.0.4", 220 | "source": { 221 | "type": "git", 222 | "url": "https://github.com/phar-io/version.git", 223 | "reference": "e4782611070e50613683d2b9a57730e9a3ba5451" 224 | }, 225 | "dist": { 226 | "type": "zip", 227 | "url": "https://api.github.com/repos/phar-io/version/zipball/e4782611070e50613683d2b9a57730e9a3ba5451", 228 | "reference": "e4782611070e50613683d2b9a57730e9a3ba5451", 229 | "shasum": "" 230 | }, 231 | "require": { 232 | "php": "^7.2 || ^8.0" 233 | }, 234 | "type": "library", 235 | "autoload": { 236 | "classmap": [ 237 | "src/" 238 | ] 239 | }, 240 | "notification-url": "https://packagist.org/downloads/", 241 | "license": [ 242 | "BSD-3-Clause" 243 | ], 244 | "authors": [ 245 | { 246 | "name": "Arne Blankerts", 247 | "email": "arne@blankerts.de", 248 | "role": "Developer" 249 | }, 250 | { 251 | "name": "Sebastian Heuer", 252 | "email": "sebastian@phpeople.de", 253 | "role": "Developer" 254 | }, 255 | { 256 | "name": "Sebastian Bergmann", 257 | "email": "sebastian@phpunit.de", 258 | "role": "Developer" 259 | } 260 | ], 261 | "description": "Library for handling version information and constraints", 262 | "time": "2020-12-13T23:18:30+00:00" 263 | }, 264 | { 265 | "name": "phpdocumentor/reflection-common", 266 | "version": "2.2.0", 267 | "source": { 268 | "type": "git", 269 | "url": "https://github.com/phpDocumentor/ReflectionCommon.git", 270 | "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" 271 | }, 272 | "dist": { 273 | "type": "zip", 274 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", 275 | "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", 276 | "shasum": "" 277 | }, 278 | "require": { 279 | "php": "^7.2 || ^8.0" 280 | }, 281 | "type": "library", 282 | "extra": { 283 | "branch-alias": { 284 | "dev-2.x": "2.x-dev" 285 | } 286 | }, 287 | "autoload": { 288 | "psr-4": { 289 | "phpDocumentor\\Reflection\\": "src/" 290 | } 291 | }, 292 | "notification-url": "https://packagist.org/downloads/", 293 | "license": [ 294 | "MIT" 295 | ], 296 | "authors": [ 297 | { 298 | "name": "Jaap van Otterdijk", 299 | "email": "opensource@ijaap.nl" 300 | } 301 | ], 302 | "description": "Common reflection classes used by phpdocumentor to reflect the code structure", 303 | "homepage": "http://www.phpdoc.org", 304 | "keywords": [ 305 | "FQSEN", 306 | "phpDocumentor", 307 | "phpdoc", 308 | "reflection", 309 | "static analysis" 310 | ], 311 | "time": "2020-06-27T09:03:43+00:00" 312 | }, 313 | { 314 | "name": "phpdocumentor/reflection-docblock", 315 | "version": "5.2.2", 316 | "source": { 317 | "type": "git", 318 | "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", 319 | "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556" 320 | }, 321 | "dist": { 322 | "type": "zip", 323 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556", 324 | "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556", 325 | "shasum": "" 326 | }, 327 | "require": { 328 | "ext-filter": "*", 329 | "php": "^7.2 || ^8.0", 330 | "phpdocumentor/reflection-common": "^2.2", 331 | "phpdocumentor/type-resolver": "^1.3", 332 | "webmozart/assert": "^1.9.1" 333 | }, 334 | "require-dev": { 335 | "mockery/mockery": "~1.3.2" 336 | }, 337 | "type": "library", 338 | "extra": { 339 | "branch-alias": { 340 | "dev-master": "5.x-dev" 341 | } 342 | }, 343 | "autoload": { 344 | "psr-4": { 345 | "phpDocumentor\\Reflection\\": "src" 346 | } 347 | }, 348 | "notification-url": "https://packagist.org/downloads/", 349 | "license": [ 350 | "MIT" 351 | ], 352 | "authors": [ 353 | { 354 | "name": "Mike van Riel", 355 | "email": "me@mikevanriel.com" 356 | }, 357 | { 358 | "name": "Jaap van Otterdijk", 359 | "email": "account@ijaap.nl" 360 | } 361 | ], 362 | "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", 363 | "time": "2020-09-03T19:13:55+00:00" 364 | }, 365 | { 366 | "name": "phpdocumentor/type-resolver", 367 | "version": "1.4.0", 368 | "source": { 369 | "type": "git", 370 | "url": "https://github.com/phpDocumentor/TypeResolver.git", 371 | "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0" 372 | }, 373 | "dist": { 374 | "type": "zip", 375 | "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", 376 | "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", 377 | "shasum": "" 378 | }, 379 | "require": { 380 | "php": "^7.2 || ^8.0", 381 | "phpdocumentor/reflection-common": "^2.0" 382 | }, 383 | "require-dev": { 384 | "ext-tokenizer": "*" 385 | }, 386 | "type": "library", 387 | "extra": { 388 | "branch-alias": { 389 | "dev-1.x": "1.x-dev" 390 | } 391 | }, 392 | "autoload": { 393 | "psr-4": { 394 | "phpDocumentor\\Reflection\\": "src" 395 | } 396 | }, 397 | "notification-url": "https://packagist.org/downloads/", 398 | "license": [ 399 | "MIT" 400 | ], 401 | "authors": [ 402 | { 403 | "name": "Mike van Riel", 404 | "email": "me@mikevanriel.com" 405 | } 406 | ], 407 | "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", 408 | "time": "2020-09-17T18:55:26+00:00" 409 | }, 410 | { 411 | "name": "phpspec/prophecy", 412 | "version": "1.12.2", 413 | "source": { 414 | "type": "git", 415 | "url": "https://github.com/phpspec/prophecy.git", 416 | "reference": "245710e971a030f42e08f4912863805570f23d39" 417 | }, 418 | "dist": { 419 | "type": "zip", 420 | "url": "https://api.github.com/repos/phpspec/prophecy/zipball/245710e971a030f42e08f4912863805570f23d39", 421 | "reference": "245710e971a030f42e08f4912863805570f23d39", 422 | "shasum": "" 423 | }, 424 | "require": { 425 | "doctrine/instantiator": "^1.2", 426 | "php": "^7.2 || ~8.0, <8.1", 427 | "phpdocumentor/reflection-docblock": "^5.2", 428 | "sebastian/comparator": "^3.0 || ^4.0", 429 | "sebastian/recursion-context": "^3.0 || ^4.0" 430 | }, 431 | "require-dev": { 432 | "phpspec/phpspec": "^6.0", 433 | "phpunit/phpunit": "^8.0 || ^9.0" 434 | }, 435 | "type": "library", 436 | "extra": { 437 | "branch-alias": { 438 | "dev-master": "1.11.x-dev" 439 | } 440 | }, 441 | "autoload": { 442 | "psr-4": { 443 | "Prophecy\\": "src/Prophecy" 444 | } 445 | }, 446 | "notification-url": "https://packagist.org/downloads/", 447 | "license": [ 448 | "MIT" 449 | ], 450 | "authors": [ 451 | { 452 | "name": "Konstantin Kudryashov", 453 | "email": "ever.zet@gmail.com", 454 | "homepage": "http://everzet.com" 455 | }, 456 | { 457 | "name": "Marcello Duarte", 458 | "email": "marcello.duarte@gmail.com" 459 | } 460 | ], 461 | "description": "Highly opinionated mocking framework for PHP 5.3+", 462 | "homepage": "https://github.com/phpspec/prophecy", 463 | "keywords": [ 464 | "Double", 465 | "Dummy", 466 | "fake", 467 | "mock", 468 | "spy", 469 | "stub" 470 | ], 471 | "time": "2020-12-19T10:15:11+00:00" 472 | }, 473 | { 474 | "name": "phpunit/php-code-coverage", 475 | "version": "9.2.5", 476 | "source": { 477 | "type": "git", 478 | "url": "https://github.com/sebastianbergmann/php-code-coverage.git", 479 | "reference": "f3e026641cc91909d421802dd3ac7827ebfd97e1" 480 | }, 481 | "dist": { 482 | "type": "zip", 483 | "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f3e026641cc91909d421802dd3ac7827ebfd97e1", 484 | "reference": "f3e026641cc91909d421802dd3ac7827ebfd97e1", 485 | "shasum": "" 486 | }, 487 | "require": { 488 | "ext-dom": "*", 489 | "ext-libxml": "*", 490 | "ext-xmlwriter": "*", 491 | "nikic/php-parser": "^4.10.2", 492 | "php": ">=7.3", 493 | "phpunit/php-file-iterator": "^3.0.3", 494 | "phpunit/php-text-template": "^2.0.2", 495 | "sebastian/code-unit-reverse-lookup": "^2.0.2", 496 | "sebastian/complexity": "^2.0", 497 | "sebastian/environment": "^5.1.2", 498 | "sebastian/lines-of-code": "^1.0.3", 499 | "sebastian/version": "^3.0.1", 500 | "theseer/tokenizer": "^1.2.0" 501 | }, 502 | "require-dev": { 503 | "phpunit/phpunit": "^9.3" 504 | }, 505 | "suggest": { 506 | "ext-pcov": "*", 507 | "ext-xdebug": "*" 508 | }, 509 | "type": "library", 510 | "extra": { 511 | "branch-alias": { 512 | "dev-master": "9.2-dev" 513 | } 514 | }, 515 | "autoload": { 516 | "classmap": [ 517 | "src/" 518 | ] 519 | }, 520 | "notification-url": "https://packagist.org/downloads/", 521 | "license": [ 522 | "BSD-3-Clause" 523 | ], 524 | "authors": [ 525 | { 526 | "name": "Sebastian Bergmann", 527 | "email": "sebastian@phpunit.de", 528 | "role": "lead" 529 | } 530 | ], 531 | "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", 532 | "homepage": "https://github.com/sebastianbergmann/php-code-coverage", 533 | "keywords": [ 534 | "coverage", 535 | "testing", 536 | "xunit" 537 | ], 538 | "time": "2020-11-28T06:44:49+00:00" 539 | }, 540 | { 541 | "name": "phpunit/php-file-iterator", 542 | "version": "3.0.5", 543 | "source": { 544 | "type": "git", 545 | "url": "https://github.com/sebastianbergmann/php-file-iterator.git", 546 | "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8" 547 | }, 548 | "dist": { 549 | "type": "zip", 550 | "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/aa4be8575f26070b100fccb67faabb28f21f66f8", 551 | "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8", 552 | "shasum": "" 553 | }, 554 | "require": { 555 | "php": ">=7.3" 556 | }, 557 | "require-dev": { 558 | "phpunit/phpunit": "^9.3" 559 | }, 560 | "type": "library", 561 | "extra": { 562 | "branch-alias": { 563 | "dev-master": "3.0-dev" 564 | } 565 | }, 566 | "autoload": { 567 | "classmap": [ 568 | "src/" 569 | ] 570 | }, 571 | "notification-url": "https://packagist.org/downloads/", 572 | "license": [ 573 | "BSD-3-Clause" 574 | ], 575 | "authors": [ 576 | { 577 | "name": "Sebastian Bergmann", 578 | "email": "sebastian@phpunit.de", 579 | "role": "lead" 580 | } 581 | ], 582 | "description": "FilterIterator implementation that filters files based on a list of suffixes.", 583 | "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", 584 | "keywords": [ 585 | "filesystem", 586 | "iterator" 587 | ], 588 | "time": "2020-09-28T05:57:25+00:00" 589 | }, 590 | { 591 | "name": "phpunit/php-invoker", 592 | "version": "3.1.1", 593 | "source": { 594 | "type": "git", 595 | "url": "https://github.com/sebastianbergmann/php-invoker.git", 596 | "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" 597 | }, 598 | "dist": { 599 | "type": "zip", 600 | "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", 601 | "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", 602 | "shasum": "" 603 | }, 604 | "require": { 605 | "php": ">=7.3" 606 | }, 607 | "require-dev": { 608 | "ext-pcntl": "*", 609 | "phpunit/phpunit": "^9.3" 610 | }, 611 | "suggest": { 612 | "ext-pcntl": "*" 613 | }, 614 | "type": "library", 615 | "extra": { 616 | "branch-alias": { 617 | "dev-master": "3.1-dev" 618 | } 619 | }, 620 | "autoload": { 621 | "classmap": [ 622 | "src/" 623 | ] 624 | }, 625 | "notification-url": "https://packagist.org/downloads/", 626 | "license": [ 627 | "BSD-3-Clause" 628 | ], 629 | "authors": [ 630 | { 631 | "name": "Sebastian Bergmann", 632 | "email": "sebastian@phpunit.de", 633 | "role": "lead" 634 | } 635 | ], 636 | "description": "Invoke callables with a timeout", 637 | "homepage": "https://github.com/sebastianbergmann/php-invoker/", 638 | "keywords": [ 639 | "process" 640 | ], 641 | "time": "2020-09-28T05:58:55+00:00" 642 | }, 643 | { 644 | "name": "phpunit/php-text-template", 645 | "version": "2.0.4", 646 | "source": { 647 | "type": "git", 648 | "url": "https://github.com/sebastianbergmann/php-text-template.git", 649 | "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" 650 | }, 651 | "dist": { 652 | "type": "zip", 653 | "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", 654 | "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", 655 | "shasum": "" 656 | }, 657 | "require": { 658 | "php": ">=7.3" 659 | }, 660 | "require-dev": { 661 | "phpunit/phpunit": "^9.3" 662 | }, 663 | "type": "library", 664 | "extra": { 665 | "branch-alias": { 666 | "dev-master": "2.0-dev" 667 | } 668 | }, 669 | "autoload": { 670 | "classmap": [ 671 | "src/" 672 | ] 673 | }, 674 | "notification-url": "https://packagist.org/downloads/", 675 | "license": [ 676 | "BSD-3-Clause" 677 | ], 678 | "authors": [ 679 | { 680 | "name": "Sebastian Bergmann", 681 | "email": "sebastian@phpunit.de", 682 | "role": "lead" 683 | } 684 | ], 685 | "description": "Simple template engine.", 686 | "homepage": "https://github.com/sebastianbergmann/php-text-template/", 687 | "keywords": [ 688 | "template" 689 | ], 690 | "time": "2020-10-26T05:33:50+00:00" 691 | }, 692 | { 693 | "name": "phpunit/php-timer", 694 | "version": "5.0.3", 695 | "source": { 696 | "type": "git", 697 | "url": "https://github.com/sebastianbergmann/php-timer.git", 698 | "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" 699 | }, 700 | "dist": { 701 | "type": "zip", 702 | "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", 703 | "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", 704 | "shasum": "" 705 | }, 706 | "require": { 707 | "php": ">=7.3" 708 | }, 709 | "require-dev": { 710 | "phpunit/phpunit": "^9.3" 711 | }, 712 | "type": "library", 713 | "extra": { 714 | "branch-alias": { 715 | "dev-master": "5.0-dev" 716 | } 717 | }, 718 | "autoload": { 719 | "classmap": [ 720 | "src/" 721 | ] 722 | }, 723 | "notification-url": "https://packagist.org/downloads/", 724 | "license": [ 725 | "BSD-3-Clause" 726 | ], 727 | "authors": [ 728 | { 729 | "name": "Sebastian Bergmann", 730 | "email": "sebastian@phpunit.de", 731 | "role": "lead" 732 | } 733 | ], 734 | "description": "Utility class for timing", 735 | "homepage": "https://github.com/sebastianbergmann/php-timer/", 736 | "keywords": [ 737 | "timer" 738 | ], 739 | "time": "2020-10-26T13:16:10+00:00" 740 | }, 741 | { 742 | "name": "phpunit/phpunit", 743 | "version": "9.5.0", 744 | "source": { 745 | "type": "git", 746 | "url": "https://github.com/sebastianbergmann/phpunit.git", 747 | "reference": "8e16c225d57c3d6808014df6b1dd7598d0a5bbbe" 748 | }, 749 | "dist": { 750 | "type": "zip", 751 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/8e16c225d57c3d6808014df6b1dd7598d0a5bbbe", 752 | "reference": "8e16c225d57c3d6808014df6b1dd7598d0a5bbbe", 753 | "shasum": "" 754 | }, 755 | "require": { 756 | "doctrine/instantiator": "^1.3.1", 757 | "ext-dom": "*", 758 | "ext-json": "*", 759 | "ext-libxml": "*", 760 | "ext-mbstring": "*", 761 | "ext-xml": "*", 762 | "ext-xmlwriter": "*", 763 | "myclabs/deep-copy": "^1.10.1", 764 | "phar-io/manifest": "^2.0.1", 765 | "phar-io/version": "^3.0.2", 766 | "php": ">=7.3", 767 | "phpspec/prophecy": "^1.12.1", 768 | "phpunit/php-code-coverage": "^9.2.3", 769 | "phpunit/php-file-iterator": "^3.0.5", 770 | "phpunit/php-invoker": "^3.1.1", 771 | "phpunit/php-text-template": "^2.0.3", 772 | "phpunit/php-timer": "^5.0.2", 773 | "sebastian/cli-parser": "^1.0.1", 774 | "sebastian/code-unit": "^1.0.6", 775 | "sebastian/comparator": "^4.0.5", 776 | "sebastian/diff": "^4.0.3", 777 | "sebastian/environment": "^5.1.3", 778 | "sebastian/exporter": "^4.0.3", 779 | "sebastian/global-state": "^5.0.1", 780 | "sebastian/object-enumerator": "^4.0.3", 781 | "sebastian/resource-operations": "^3.0.3", 782 | "sebastian/type": "^2.3", 783 | "sebastian/version": "^3.0.2" 784 | }, 785 | "require-dev": { 786 | "ext-pdo": "*", 787 | "phpspec/prophecy-phpunit": "^2.0.1" 788 | }, 789 | "suggest": { 790 | "ext-soap": "*", 791 | "ext-xdebug": "*" 792 | }, 793 | "bin": [ 794 | "phpunit" 795 | ], 796 | "type": "library", 797 | "extra": { 798 | "branch-alias": { 799 | "dev-master": "9.5-dev" 800 | } 801 | }, 802 | "autoload": { 803 | "classmap": [ 804 | "src/" 805 | ], 806 | "files": [ 807 | "src/Framework/Assert/Functions.php" 808 | ] 809 | }, 810 | "notification-url": "https://packagist.org/downloads/", 811 | "license": [ 812 | "BSD-3-Clause" 813 | ], 814 | "authors": [ 815 | { 816 | "name": "Sebastian Bergmann", 817 | "email": "sebastian@phpunit.de", 818 | "role": "lead" 819 | } 820 | ], 821 | "description": "The PHP Unit Testing framework.", 822 | "homepage": "https://phpunit.de/", 823 | "keywords": [ 824 | "phpunit", 825 | "testing", 826 | "xunit" 827 | ], 828 | "time": "2020-12-04T05:05:53+00:00" 829 | }, 830 | { 831 | "name": "sebastian/cli-parser", 832 | "version": "1.0.1", 833 | "source": { 834 | "type": "git", 835 | "url": "https://github.com/sebastianbergmann/cli-parser.git", 836 | "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" 837 | }, 838 | "dist": { 839 | "type": "zip", 840 | "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", 841 | "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", 842 | "shasum": "" 843 | }, 844 | "require": { 845 | "php": ">=7.3" 846 | }, 847 | "require-dev": { 848 | "phpunit/phpunit": "^9.3" 849 | }, 850 | "type": "library", 851 | "extra": { 852 | "branch-alias": { 853 | "dev-master": "1.0-dev" 854 | } 855 | }, 856 | "autoload": { 857 | "classmap": [ 858 | "src/" 859 | ] 860 | }, 861 | "notification-url": "https://packagist.org/downloads/", 862 | "license": [ 863 | "BSD-3-Clause" 864 | ], 865 | "authors": [ 866 | { 867 | "name": "Sebastian Bergmann", 868 | "email": "sebastian@phpunit.de", 869 | "role": "lead" 870 | } 871 | ], 872 | "description": "Library for parsing CLI options", 873 | "homepage": "https://github.com/sebastianbergmann/cli-parser", 874 | "time": "2020-09-28T06:08:49+00:00" 875 | }, 876 | { 877 | "name": "sebastian/code-unit", 878 | "version": "1.0.8", 879 | "source": { 880 | "type": "git", 881 | "url": "https://github.com/sebastianbergmann/code-unit.git", 882 | "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" 883 | }, 884 | "dist": { 885 | "type": "zip", 886 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", 887 | "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", 888 | "shasum": "" 889 | }, 890 | "require": { 891 | "php": ">=7.3" 892 | }, 893 | "require-dev": { 894 | "phpunit/phpunit": "^9.3" 895 | }, 896 | "type": "library", 897 | "extra": { 898 | "branch-alias": { 899 | "dev-master": "1.0-dev" 900 | } 901 | }, 902 | "autoload": { 903 | "classmap": [ 904 | "src/" 905 | ] 906 | }, 907 | "notification-url": "https://packagist.org/downloads/", 908 | "license": [ 909 | "BSD-3-Clause" 910 | ], 911 | "authors": [ 912 | { 913 | "name": "Sebastian Bergmann", 914 | "email": "sebastian@phpunit.de", 915 | "role": "lead" 916 | } 917 | ], 918 | "description": "Collection of value objects that represent the PHP code units", 919 | "homepage": "https://github.com/sebastianbergmann/code-unit", 920 | "time": "2020-10-26T13:08:54+00:00" 921 | }, 922 | { 923 | "name": "sebastian/code-unit-reverse-lookup", 924 | "version": "2.0.3", 925 | "source": { 926 | "type": "git", 927 | "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", 928 | "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" 929 | }, 930 | "dist": { 931 | "type": "zip", 932 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", 933 | "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", 934 | "shasum": "" 935 | }, 936 | "require": { 937 | "php": ">=7.3" 938 | }, 939 | "require-dev": { 940 | "phpunit/phpunit": "^9.3" 941 | }, 942 | "type": "library", 943 | "extra": { 944 | "branch-alias": { 945 | "dev-master": "2.0-dev" 946 | } 947 | }, 948 | "autoload": { 949 | "classmap": [ 950 | "src/" 951 | ] 952 | }, 953 | "notification-url": "https://packagist.org/downloads/", 954 | "license": [ 955 | "BSD-3-Clause" 956 | ], 957 | "authors": [ 958 | { 959 | "name": "Sebastian Bergmann", 960 | "email": "sebastian@phpunit.de" 961 | } 962 | ], 963 | "description": "Looks up which function or method a line of code belongs to", 964 | "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", 965 | "time": "2020-09-28T05:30:19+00:00" 966 | }, 967 | { 968 | "name": "sebastian/comparator", 969 | "version": "4.0.6", 970 | "source": { 971 | "type": "git", 972 | "url": "https://github.com/sebastianbergmann/comparator.git", 973 | "reference": "55f4261989e546dc112258c7a75935a81a7ce382" 974 | }, 975 | "dist": { 976 | "type": "zip", 977 | "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", 978 | "reference": "55f4261989e546dc112258c7a75935a81a7ce382", 979 | "shasum": "" 980 | }, 981 | "require": { 982 | "php": ">=7.3", 983 | "sebastian/diff": "^4.0", 984 | "sebastian/exporter": "^4.0" 985 | }, 986 | "require-dev": { 987 | "phpunit/phpunit": "^9.3" 988 | }, 989 | "type": "library", 990 | "extra": { 991 | "branch-alias": { 992 | "dev-master": "4.0-dev" 993 | } 994 | }, 995 | "autoload": { 996 | "classmap": [ 997 | "src/" 998 | ] 999 | }, 1000 | "notification-url": "https://packagist.org/downloads/", 1001 | "license": [ 1002 | "BSD-3-Clause" 1003 | ], 1004 | "authors": [ 1005 | { 1006 | "name": "Sebastian Bergmann", 1007 | "email": "sebastian@phpunit.de" 1008 | }, 1009 | { 1010 | "name": "Jeff Welch", 1011 | "email": "whatthejeff@gmail.com" 1012 | }, 1013 | { 1014 | "name": "Volker Dusch", 1015 | "email": "github@wallbash.com" 1016 | }, 1017 | { 1018 | "name": "Bernhard Schussek", 1019 | "email": "bschussek@2bepublished.at" 1020 | } 1021 | ], 1022 | "description": "Provides the functionality to compare PHP values for equality", 1023 | "homepage": "https://github.com/sebastianbergmann/comparator", 1024 | "keywords": [ 1025 | "comparator", 1026 | "compare", 1027 | "equality" 1028 | ], 1029 | "time": "2020-10-26T15:49:45+00:00" 1030 | }, 1031 | { 1032 | "name": "sebastian/complexity", 1033 | "version": "2.0.2", 1034 | "source": { 1035 | "type": "git", 1036 | "url": "https://github.com/sebastianbergmann/complexity.git", 1037 | "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" 1038 | }, 1039 | "dist": { 1040 | "type": "zip", 1041 | "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", 1042 | "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", 1043 | "shasum": "" 1044 | }, 1045 | "require": { 1046 | "nikic/php-parser": "^4.7", 1047 | "php": ">=7.3" 1048 | }, 1049 | "require-dev": { 1050 | "phpunit/phpunit": "^9.3" 1051 | }, 1052 | "type": "library", 1053 | "extra": { 1054 | "branch-alias": { 1055 | "dev-master": "2.0-dev" 1056 | } 1057 | }, 1058 | "autoload": { 1059 | "classmap": [ 1060 | "src/" 1061 | ] 1062 | }, 1063 | "notification-url": "https://packagist.org/downloads/", 1064 | "license": [ 1065 | "BSD-3-Clause" 1066 | ], 1067 | "authors": [ 1068 | { 1069 | "name": "Sebastian Bergmann", 1070 | "email": "sebastian@phpunit.de", 1071 | "role": "lead" 1072 | } 1073 | ], 1074 | "description": "Library for calculating the complexity of PHP code units", 1075 | "homepage": "https://github.com/sebastianbergmann/complexity", 1076 | "time": "2020-10-26T15:52:27+00:00" 1077 | }, 1078 | { 1079 | "name": "sebastian/diff", 1080 | "version": "4.0.4", 1081 | "source": { 1082 | "type": "git", 1083 | "url": "https://github.com/sebastianbergmann/diff.git", 1084 | "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" 1085 | }, 1086 | "dist": { 1087 | "type": "zip", 1088 | "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", 1089 | "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", 1090 | "shasum": "" 1091 | }, 1092 | "require": { 1093 | "php": ">=7.3" 1094 | }, 1095 | "require-dev": { 1096 | "phpunit/phpunit": "^9.3", 1097 | "symfony/process": "^4.2 || ^5" 1098 | }, 1099 | "type": "library", 1100 | "extra": { 1101 | "branch-alias": { 1102 | "dev-master": "4.0-dev" 1103 | } 1104 | }, 1105 | "autoload": { 1106 | "classmap": [ 1107 | "src/" 1108 | ] 1109 | }, 1110 | "notification-url": "https://packagist.org/downloads/", 1111 | "license": [ 1112 | "BSD-3-Clause" 1113 | ], 1114 | "authors": [ 1115 | { 1116 | "name": "Sebastian Bergmann", 1117 | "email": "sebastian@phpunit.de" 1118 | }, 1119 | { 1120 | "name": "Kore Nordmann", 1121 | "email": "mail@kore-nordmann.de" 1122 | } 1123 | ], 1124 | "description": "Diff implementation", 1125 | "homepage": "https://github.com/sebastianbergmann/diff", 1126 | "keywords": [ 1127 | "diff", 1128 | "udiff", 1129 | "unidiff", 1130 | "unified diff" 1131 | ], 1132 | "time": "2020-10-26T13:10:38+00:00" 1133 | }, 1134 | { 1135 | "name": "sebastian/environment", 1136 | "version": "5.1.3", 1137 | "source": { 1138 | "type": "git", 1139 | "url": "https://github.com/sebastianbergmann/environment.git", 1140 | "reference": "388b6ced16caa751030f6a69e588299fa09200ac" 1141 | }, 1142 | "dist": { 1143 | "type": "zip", 1144 | "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac", 1145 | "reference": "388b6ced16caa751030f6a69e588299fa09200ac", 1146 | "shasum": "" 1147 | }, 1148 | "require": { 1149 | "php": ">=7.3" 1150 | }, 1151 | "require-dev": { 1152 | "phpunit/phpunit": "^9.3" 1153 | }, 1154 | "suggest": { 1155 | "ext-posix": "*" 1156 | }, 1157 | "type": "library", 1158 | "extra": { 1159 | "branch-alias": { 1160 | "dev-master": "5.1-dev" 1161 | } 1162 | }, 1163 | "autoload": { 1164 | "classmap": [ 1165 | "src/" 1166 | ] 1167 | }, 1168 | "notification-url": "https://packagist.org/downloads/", 1169 | "license": [ 1170 | "BSD-3-Clause" 1171 | ], 1172 | "authors": [ 1173 | { 1174 | "name": "Sebastian Bergmann", 1175 | "email": "sebastian@phpunit.de" 1176 | } 1177 | ], 1178 | "description": "Provides functionality to handle HHVM/PHP environments", 1179 | "homepage": "http://www.github.com/sebastianbergmann/environment", 1180 | "keywords": [ 1181 | "Xdebug", 1182 | "environment", 1183 | "hhvm" 1184 | ], 1185 | "time": "2020-09-28T05:52:38+00:00" 1186 | }, 1187 | { 1188 | "name": "sebastian/exporter", 1189 | "version": "4.0.3", 1190 | "source": { 1191 | "type": "git", 1192 | "url": "https://github.com/sebastianbergmann/exporter.git", 1193 | "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65" 1194 | }, 1195 | "dist": { 1196 | "type": "zip", 1197 | "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/d89cc98761b8cb5a1a235a6b703ae50d34080e65", 1198 | "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65", 1199 | "shasum": "" 1200 | }, 1201 | "require": { 1202 | "php": ">=7.3", 1203 | "sebastian/recursion-context": "^4.0" 1204 | }, 1205 | "require-dev": { 1206 | "ext-mbstring": "*", 1207 | "phpunit/phpunit": "^9.3" 1208 | }, 1209 | "type": "library", 1210 | "extra": { 1211 | "branch-alias": { 1212 | "dev-master": "4.0-dev" 1213 | } 1214 | }, 1215 | "autoload": { 1216 | "classmap": [ 1217 | "src/" 1218 | ] 1219 | }, 1220 | "notification-url": "https://packagist.org/downloads/", 1221 | "license": [ 1222 | "BSD-3-Clause" 1223 | ], 1224 | "authors": [ 1225 | { 1226 | "name": "Sebastian Bergmann", 1227 | "email": "sebastian@phpunit.de" 1228 | }, 1229 | { 1230 | "name": "Jeff Welch", 1231 | "email": "whatthejeff@gmail.com" 1232 | }, 1233 | { 1234 | "name": "Volker Dusch", 1235 | "email": "github@wallbash.com" 1236 | }, 1237 | { 1238 | "name": "Adam Harvey", 1239 | "email": "aharvey@php.net" 1240 | }, 1241 | { 1242 | "name": "Bernhard Schussek", 1243 | "email": "bschussek@gmail.com" 1244 | } 1245 | ], 1246 | "description": "Provides the functionality to export PHP variables for visualization", 1247 | "homepage": "http://www.github.com/sebastianbergmann/exporter", 1248 | "keywords": [ 1249 | "export", 1250 | "exporter" 1251 | ], 1252 | "time": "2020-09-28T05:24:23+00:00" 1253 | }, 1254 | { 1255 | "name": "sebastian/global-state", 1256 | "version": "5.0.2", 1257 | "source": { 1258 | "type": "git", 1259 | "url": "https://github.com/sebastianbergmann/global-state.git", 1260 | "reference": "a90ccbddffa067b51f574dea6eb25d5680839455" 1261 | }, 1262 | "dist": { 1263 | "type": "zip", 1264 | "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/a90ccbddffa067b51f574dea6eb25d5680839455", 1265 | "reference": "a90ccbddffa067b51f574dea6eb25d5680839455", 1266 | "shasum": "" 1267 | }, 1268 | "require": { 1269 | "php": ">=7.3", 1270 | "sebastian/object-reflector": "^2.0", 1271 | "sebastian/recursion-context": "^4.0" 1272 | }, 1273 | "require-dev": { 1274 | "ext-dom": "*", 1275 | "phpunit/phpunit": "^9.3" 1276 | }, 1277 | "suggest": { 1278 | "ext-uopz": "*" 1279 | }, 1280 | "type": "library", 1281 | "extra": { 1282 | "branch-alias": { 1283 | "dev-master": "5.0-dev" 1284 | } 1285 | }, 1286 | "autoload": { 1287 | "classmap": [ 1288 | "src/" 1289 | ] 1290 | }, 1291 | "notification-url": "https://packagist.org/downloads/", 1292 | "license": [ 1293 | "BSD-3-Clause" 1294 | ], 1295 | "authors": [ 1296 | { 1297 | "name": "Sebastian Bergmann", 1298 | "email": "sebastian@phpunit.de" 1299 | } 1300 | ], 1301 | "description": "Snapshotting of global state", 1302 | "homepage": "http://www.github.com/sebastianbergmann/global-state", 1303 | "keywords": [ 1304 | "global state" 1305 | ], 1306 | "time": "2020-10-26T15:55:19+00:00" 1307 | }, 1308 | { 1309 | "name": "sebastian/lines-of-code", 1310 | "version": "1.0.3", 1311 | "source": { 1312 | "type": "git", 1313 | "url": "https://github.com/sebastianbergmann/lines-of-code.git", 1314 | "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" 1315 | }, 1316 | "dist": { 1317 | "type": "zip", 1318 | "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", 1319 | "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", 1320 | "shasum": "" 1321 | }, 1322 | "require": { 1323 | "nikic/php-parser": "^4.6", 1324 | "php": ">=7.3" 1325 | }, 1326 | "require-dev": { 1327 | "phpunit/phpunit": "^9.3" 1328 | }, 1329 | "type": "library", 1330 | "extra": { 1331 | "branch-alias": { 1332 | "dev-master": "1.0-dev" 1333 | } 1334 | }, 1335 | "autoload": { 1336 | "classmap": [ 1337 | "src/" 1338 | ] 1339 | }, 1340 | "notification-url": "https://packagist.org/downloads/", 1341 | "license": [ 1342 | "BSD-3-Clause" 1343 | ], 1344 | "authors": [ 1345 | { 1346 | "name": "Sebastian Bergmann", 1347 | "email": "sebastian@phpunit.de", 1348 | "role": "lead" 1349 | } 1350 | ], 1351 | "description": "Library for counting the lines of code in PHP source code", 1352 | "homepage": "https://github.com/sebastianbergmann/lines-of-code", 1353 | "time": "2020-11-28T06:42:11+00:00" 1354 | }, 1355 | { 1356 | "name": "sebastian/object-enumerator", 1357 | "version": "4.0.4", 1358 | "source": { 1359 | "type": "git", 1360 | "url": "https://github.com/sebastianbergmann/object-enumerator.git", 1361 | "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" 1362 | }, 1363 | "dist": { 1364 | "type": "zip", 1365 | "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", 1366 | "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", 1367 | "shasum": "" 1368 | }, 1369 | "require": { 1370 | "php": ">=7.3", 1371 | "sebastian/object-reflector": "^2.0", 1372 | "sebastian/recursion-context": "^4.0" 1373 | }, 1374 | "require-dev": { 1375 | "phpunit/phpunit": "^9.3" 1376 | }, 1377 | "type": "library", 1378 | "extra": { 1379 | "branch-alias": { 1380 | "dev-master": "4.0-dev" 1381 | } 1382 | }, 1383 | "autoload": { 1384 | "classmap": [ 1385 | "src/" 1386 | ] 1387 | }, 1388 | "notification-url": "https://packagist.org/downloads/", 1389 | "license": [ 1390 | "BSD-3-Clause" 1391 | ], 1392 | "authors": [ 1393 | { 1394 | "name": "Sebastian Bergmann", 1395 | "email": "sebastian@phpunit.de" 1396 | } 1397 | ], 1398 | "description": "Traverses array structures and object graphs to enumerate all referenced objects", 1399 | "homepage": "https://github.com/sebastianbergmann/object-enumerator/", 1400 | "time": "2020-10-26T13:12:34+00:00" 1401 | }, 1402 | { 1403 | "name": "sebastian/object-reflector", 1404 | "version": "2.0.4", 1405 | "source": { 1406 | "type": "git", 1407 | "url": "https://github.com/sebastianbergmann/object-reflector.git", 1408 | "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" 1409 | }, 1410 | "dist": { 1411 | "type": "zip", 1412 | "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", 1413 | "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", 1414 | "shasum": "" 1415 | }, 1416 | "require": { 1417 | "php": ">=7.3" 1418 | }, 1419 | "require-dev": { 1420 | "phpunit/phpunit": "^9.3" 1421 | }, 1422 | "type": "library", 1423 | "extra": { 1424 | "branch-alias": { 1425 | "dev-master": "2.0-dev" 1426 | } 1427 | }, 1428 | "autoload": { 1429 | "classmap": [ 1430 | "src/" 1431 | ] 1432 | }, 1433 | "notification-url": "https://packagist.org/downloads/", 1434 | "license": [ 1435 | "BSD-3-Clause" 1436 | ], 1437 | "authors": [ 1438 | { 1439 | "name": "Sebastian Bergmann", 1440 | "email": "sebastian@phpunit.de" 1441 | } 1442 | ], 1443 | "description": "Allows reflection of object attributes, including inherited and non-public ones", 1444 | "homepage": "https://github.com/sebastianbergmann/object-reflector/", 1445 | "time": "2020-10-26T13:14:26+00:00" 1446 | }, 1447 | { 1448 | "name": "sebastian/recursion-context", 1449 | "version": "4.0.4", 1450 | "source": { 1451 | "type": "git", 1452 | "url": "https://github.com/sebastianbergmann/recursion-context.git", 1453 | "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" 1454 | }, 1455 | "dist": { 1456 | "type": "zip", 1457 | "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", 1458 | "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", 1459 | "shasum": "" 1460 | }, 1461 | "require": { 1462 | "php": ">=7.3" 1463 | }, 1464 | "require-dev": { 1465 | "phpunit/phpunit": "^9.3" 1466 | }, 1467 | "type": "library", 1468 | "extra": { 1469 | "branch-alias": { 1470 | "dev-master": "4.0-dev" 1471 | } 1472 | }, 1473 | "autoload": { 1474 | "classmap": [ 1475 | "src/" 1476 | ] 1477 | }, 1478 | "notification-url": "https://packagist.org/downloads/", 1479 | "license": [ 1480 | "BSD-3-Clause" 1481 | ], 1482 | "authors": [ 1483 | { 1484 | "name": "Sebastian Bergmann", 1485 | "email": "sebastian@phpunit.de" 1486 | }, 1487 | { 1488 | "name": "Jeff Welch", 1489 | "email": "whatthejeff@gmail.com" 1490 | }, 1491 | { 1492 | "name": "Adam Harvey", 1493 | "email": "aharvey@php.net" 1494 | } 1495 | ], 1496 | "description": "Provides functionality to recursively process PHP variables", 1497 | "homepage": "http://www.github.com/sebastianbergmann/recursion-context", 1498 | "time": "2020-10-26T13:17:30+00:00" 1499 | }, 1500 | { 1501 | "name": "sebastian/resource-operations", 1502 | "version": "3.0.3", 1503 | "source": { 1504 | "type": "git", 1505 | "url": "https://github.com/sebastianbergmann/resource-operations.git", 1506 | "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" 1507 | }, 1508 | "dist": { 1509 | "type": "zip", 1510 | "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", 1511 | "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", 1512 | "shasum": "" 1513 | }, 1514 | "require": { 1515 | "php": ">=7.3" 1516 | }, 1517 | "require-dev": { 1518 | "phpunit/phpunit": "^9.0" 1519 | }, 1520 | "type": "library", 1521 | "extra": { 1522 | "branch-alias": { 1523 | "dev-master": "3.0-dev" 1524 | } 1525 | }, 1526 | "autoload": { 1527 | "classmap": [ 1528 | "src/" 1529 | ] 1530 | }, 1531 | "notification-url": "https://packagist.org/downloads/", 1532 | "license": [ 1533 | "BSD-3-Clause" 1534 | ], 1535 | "authors": [ 1536 | { 1537 | "name": "Sebastian Bergmann", 1538 | "email": "sebastian@phpunit.de" 1539 | } 1540 | ], 1541 | "description": "Provides a list of PHP built-in functions that operate on resources", 1542 | "homepage": "https://www.github.com/sebastianbergmann/resource-operations", 1543 | "time": "2020-09-28T06:45:17+00:00" 1544 | }, 1545 | { 1546 | "name": "sebastian/type", 1547 | "version": "2.3.1", 1548 | "source": { 1549 | "type": "git", 1550 | "url": "https://github.com/sebastianbergmann/type.git", 1551 | "reference": "81cd61ab7bbf2de744aba0ea61fae32f721df3d2" 1552 | }, 1553 | "dist": { 1554 | "type": "zip", 1555 | "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/81cd61ab7bbf2de744aba0ea61fae32f721df3d2", 1556 | "reference": "81cd61ab7bbf2de744aba0ea61fae32f721df3d2", 1557 | "shasum": "" 1558 | }, 1559 | "require": { 1560 | "php": ">=7.3" 1561 | }, 1562 | "require-dev": { 1563 | "phpunit/phpunit": "^9.3" 1564 | }, 1565 | "type": "library", 1566 | "extra": { 1567 | "branch-alias": { 1568 | "dev-master": "2.3-dev" 1569 | } 1570 | }, 1571 | "autoload": { 1572 | "classmap": [ 1573 | "src/" 1574 | ] 1575 | }, 1576 | "notification-url": "https://packagist.org/downloads/", 1577 | "license": [ 1578 | "BSD-3-Clause" 1579 | ], 1580 | "authors": [ 1581 | { 1582 | "name": "Sebastian Bergmann", 1583 | "email": "sebastian@phpunit.de", 1584 | "role": "lead" 1585 | } 1586 | ], 1587 | "description": "Collection of value objects that represent the types of the PHP type system", 1588 | "homepage": "https://github.com/sebastianbergmann/type", 1589 | "time": "2020-10-26T13:18:59+00:00" 1590 | }, 1591 | { 1592 | "name": "sebastian/version", 1593 | "version": "3.0.2", 1594 | "source": { 1595 | "type": "git", 1596 | "url": "https://github.com/sebastianbergmann/version.git", 1597 | "reference": "c6c1022351a901512170118436c764e473f6de8c" 1598 | }, 1599 | "dist": { 1600 | "type": "zip", 1601 | "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", 1602 | "reference": "c6c1022351a901512170118436c764e473f6de8c", 1603 | "shasum": "" 1604 | }, 1605 | "require": { 1606 | "php": ">=7.3" 1607 | }, 1608 | "type": "library", 1609 | "extra": { 1610 | "branch-alias": { 1611 | "dev-master": "3.0-dev" 1612 | } 1613 | }, 1614 | "autoload": { 1615 | "classmap": [ 1616 | "src/" 1617 | ] 1618 | }, 1619 | "notification-url": "https://packagist.org/downloads/", 1620 | "license": [ 1621 | "BSD-3-Clause" 1622 | ], 1623 | "authors": [ 1624 | { 1625 | "name": "Sebastian Bergmann", 1626 | "email": "sebastian@phpunit.de", 1627 | "role": "lead" 1628 | } 1629 | ], 1630 | "description": "Library that helps with managing the version number of Git-hosted PHP projects", 1631 | "homepage": "https://github.com/sebastianbergmann/version", 1632 | "time": "2020-09-28T06:39:44+00:00" 1633 | }, 1634 | { 1635 | "name": "symfony/polyfill-ctype", 1636 | "version": "v1.20.0", 1637 | "source": { 1638 | "type": "git", 1639 | "url": "https://github.com/symfony/polyfill-ctype.git", 1640 | "reference": "f4ba089a5b6366e453971d3aad5fe8e897b37f41" 1641 | }, 1642 | "dist": { 1643 | "type": "zip", 1644 | "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/f4ba089a5b6366e453971d3aad5fe8e897b37f41", 1645 | "reference": "f4ba089a5b6366e453971d3aad5fe8e897b37f41", 1646 | "shasum": "" 1647 | }, 1648 | "require": { 1649 | "php": ">=7.1" 1650 | }, 1651 | "suggest": { 1652 | "ext-ctype": "For best performance" 1653 | }, 1654 | "type": "library", 1655 | "extra": { 1656 | "branch-alias": { 1657 | "dev-main": "1.20-dev" 1658 | }, 1659 | "thanks": { 1660 | "name": "symfony/polyfill", 1661 | "url": "https://github.com/symfony/polyfill" 1662 | } 1663 | }, 1664 | "autoload": { 1665 | "psr-4": { 1666 | "Symfony\\Polyfill\\Ctype\\": "" 1667 | }, 1668 | "files": [ 1669 | "bootstrap.php" 1670 | ] 1671 | }, 1672 | "notification-url": "https://packagist.org/downloads/", 1673 | "license": [ 1674 | "MIT" 1675 | ], 1676 | "authors": [ 1677 | { 1678 | "name": "Gert de Pagter", 1679 | "email": "BackEndTea@gmail.com" 1680 | }, 1681 | { 1682 | "name": "Symfony Community", 1683 | "homepage": "https://symfony.com/contributors" 1684 | } 1685 | ], 1686 | "description": "Symfony polyfill for ctype functions", 1687 | "homepage": "https://symfony.com", 1688 | "keywords": [ 1689 | "compatibility", 1690 | "ctype", 1691 | "polyfill", 1692 | "portable" 1693 | ], 1694 | "time": "2020-10-23T14:02:19+00:00" 1695 | }, 1696 | { 1697 | "name": "theseer/tokenizer", 1698 | "version": "1.2.0", 1699 | "source": { 1700 | "type": "git", 1701 | "url": "https://github.com/theseer/tokenizer.git", 1702 | "reference": "75a63c33a8577608444246075ea0af0d052e452a" 1703 | }, 1704 | "dist": { 1705 | "type": "zip", 1706 | "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a", 1707 | "reference": "75a63c33a8577608444246075ea0af0d052e452a", 1708 | "shasum": "" 1709 | }, 1710 | "require": { 1711 | "ext-dom": "*", 1712 | "ext-tokenizer": "*", 1713 | "ext-xmlwriter": "*", 1714 | "php": "^7.2 || ^8.0" 1715 | }, 1716 | "type": "library", 1717 | "autoload": { 1718 | "classmap": [ 1719 | "src/" 1720 | ] 1721 | }, 1722 | "notification-url": "https://packagist.org/downloads/", 1723 | "license": [ 1724 | "BSD-3-Clause" 1725 | ], 1726 | "authors": [ 1727 | { 1728 | "name": "Arne Blankerts", 1729 | "email": "arne@blankerts.de", 1730 | "role": "Developer" 1731 | } 1732 | ], 1733 | "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", 1734 | "time": "2020-07-12T23:59:07+00:00" 1735 | }, 1736 | { 1737 | "name": "webmozart/assert", 1738 | "version": "1.9.1", 1739 | "source": { 1740 | "type": "git", 1741 | "url": "https://github.com/webmozart/assert.git", 1742 | "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389" 1743 | }, 1744 | "dist": { 1745 | "type": "zip", 1746 | "url": "https://api.github.com/repos/webmozart/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389", 1747 | "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389", 1748 | "shasum": "" 1749 | }, 1750 | "require": { 1751 | "php": "^5.3.3 || ^7.0 || ^8.0", 1752 | "symfony/polyfill-ctype": "^1.8" 1753 | }, 1754 | "conflict": { 1755 | "phpstan/phpstan": "<0.12.20", 1756 | "vimeo/psalm": "<3.9.1" 1757 | }, 1758 | "require-dev": { 1759 | "phpunit/phpunit": "^4.8.36 || ^7.5.13" 1760 | }, 1761 | "type": "library", 1762 | "autoload": { 1763 | "psr-4": { 1764 | "Webmozart\\Assert\\": "src/" 1765 | } 1766 | }, 1767 | "notification-url": "https://packagist.org/downloads/", 1768 | "license": [ 1769 | "MIT" 1770 | ], 1771 | "authors": [ 1772 | { 1773 | "name": "Bernhard Schussek", 1774 | "email": "bschussek@gmail.com" 1775 | } 1776 | ], 1777 | "description": "Assertions to validate method input/output with nice error messages.", 1778 | "keywords": [ 1779 | "assert", 1780 | "check", 1781 | "validate" 1782 | ], 1783 | "time": "2020-07-08T17:02:28+00:00" 1784 | } 1785 | ], 1786 | "aliases": [], 1787 | "minimum-stability": "stable", 1788 | "stability-flags": [], 1789 | "prefer-stable": false, 1790 | "prefer-lowest": false, 1791 | "platform": { 1792 | "php": "^7.3" 1793 | }, 1794 | "platform-dev": [] 1795 | } 1796 | --------------------------------------------------------------------------------