Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/filipe1309/algoexpert-ts-solutions
This repository contains some solutions for the challenges from AlgoExpert Coding Questions.
https://github.com/filipe1309/algoexpert-ts-solutions
algoexpert algoexpert-solutions algoexpert-typescript-solutions algorithms algorithms-and-data-structures conventional-commits data-structures git-hooks interview-preparation jest nodejs typescript
Last synced: 5 days ago
JSON representation
This repository contains some solutions for the challenges from AlgoExpert Coding Questions.
- Host: GitHub
- URL: https://github.com/filipe1309/algoexpert-ts-solutions
- Owner: filipe1309
- License: mit
- Created: 2023-07-13T22:27:02.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2023-12-02T18:47:10.000Z (about 1 year ago)
- Last Synced: 2024-11-16T08:16:39.155Z (2 months ago)
- Topics: algoexpert, algoexpert-solutions, algoexpert-typescript-solutions, algorithms, algorithms-and-data-structures, conventional-commits, data-structures, git-hooks, interview-preparation, jest, nodejs, typescript
- Language: TypeScript
- Homepage: https://www.algoexpert.io/
- Size: 1.05 MB
- Stars: 6
- Watchers: 2
- Forks: 5
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
AlgoExpert TS Solutions
![Github Action - Deploy Badge](https://github.com/filipe1309/algoexpert-solutions/actions/workflows/tests.yaml/badge.svg?event=push)
![TypeScript](https://img.shields.io/badge/Code-TypeScript-informational?style=flat-square&logo=typescript&color=3178C6)
![NodeJS](https://img.shields.io/badge/Code-NodeJS-informational?style=flat-square&logo=node.js&color=339933)
![Jest](https://img.shields.io/badge/Code-Jest-informational?style=flat-square&logo=jest&color=C21325)## 💬 About
This repository contains some solutions for the challenges from [AlgoExpert](https://www.algoexpert.io/) Coding Questions.
> :memo: **Note:**
> I've not finished all challenges yet, and I'm constantly updating this
> repository with new solutions, new structures, new tests, etc. So, if you want
> to see the most recent changes, check the last challenge that is marked as
> completed in the challenge list section below.[Improve this about section]: #
## :rocket: Challenge List
😎 Easy (31)
😅 Medium (73)
😰 Hard (58)
😱 Very Hard (38)
- [x] [`Two Number Sum`](./src/easy/two-number-sum)
- [x] [`Validate Subsequence`](./src/easy/validate-subsequence)
- [x] [`Sorted Squared Array`](./src/easy/sorted-squared-array)
- [x] [`Tournament Winner`](./src/easy/tournament-winner)
- [x] [`Non-Constructible Change`](./src/easy/non-constructible-change)
- [x] [`Three Number Sum`](./src/medium/three-number-sum)
- [x] [`Smallest Difference`](./src/medium/smallest-difference)
- [x] [`Move Element To End`](./src/medium/move-element-to-end)
- [x] [`Monotonic Array`](./src/medium/monotonic-array)
- [x] [`Spiral Traverse`](./src/medium/spiral-traverse)
- [ ] [`Four Number Sum`](./src/hard/four-number-sum)
- [ ] [`Subarray Sort`](./src/hard/subarray-sort)
- [ ] [`Largest Range`](./src/hard/largest-range)
- [ ] [`Min Rewards`](./src/hard/min-rewards)
- [ ] [`Zigzag Traverse`](./src/hard/zigzag-traverse)
- [ ] [`Apartment Hunting`](./src/very-hard/apartment-hunting)
- [ ] [`Calendar Matching`](./src/very-hard/calendar-matching)
- [ ] [`Waterfall Streams`](./src/very-hard/waterfall-streams)
- [ ] [`Minimum Area Rectangle`](./src/very-hard/minimum-area-rectangle)
- [ ] [`Line Through Points`](./src/very-hard/line-through-points)
More...
- [x] [`Transpose Matrix`](./src/easy/transpose-matrix)
- [x] [`Find Closest Value In BST`](./src/easy/find-closest-value-in-bst)
- [x] [`Branch Sums`](./src/easy/branch-sums)
- [x] [`Node Depths`](./src/easy/node-depths)
- [x] [`Evaluate Expression Tree`](./src/easy/evaluate-expression-tree)
- [x] [`Depth-first Search`](./src/easy/depth-first-search)
- [x] [`Minimum Waiting Time`](./src/easy/minimum-waiting-time)
- [x] [`Class Photos`](./src/easy/class-photos)
- [x] [`Tandem Bicycle`](./src/easy/tandem-bicycle)
- [x] [`Optimal Freelancing`](./src/easy/optimal-freelancing)
- [x] [`Remove Duplicates From Linked List`](./src/easy/remove-duplicates-from-linked-list)
- [x] [`Middle Node`](./src/easy/middle-node)
- [x] [`Nth Fibonacci`](./src/easy/nth-fibonacci)
- [x] [`Product Sum`](./src/easy/product-sum)
- [x] [`Binary Search`](./src/easy/binary-search)
- [x] [`Find Three Largest Numbers`](./src/easy/find-three-largest-numbers)
- [x] [`Bubble Sort`](./src/easy/bubble-sort)
- [x] [`Insertion Sort`](./src/easy/insertion-sort)
- [x] [`Selection Sort`](./src/easy/selection-sort)
- [x] [`Palindrome Check`](./src/easy/palindrome-check)
- [x] [`Caesar Cipher Encryptor`](./src/easy/caesar-cipher-encryptor)
- [x] [`Run-Length Encoding`](./src/easy/run-length-encoding)
- [x] [`Common Characters`](./src/easy/common-characters)
- [x] [`Generate Document`](./src/easy/generate-document)
- [x] [`First Non-Repeating Character`](./src/easy/first-non-repeating-character)
- [x] [`Semordnilap`](./src/easy/semordnilap)
More...
- [x] [`Longest Peak`](./src/medium/longest-peak)
- [x] [`Array Of Products`](./src/medium/array-of-products)
- [x] [`First Duplicate Value`](./src/medium/first-duplicate-value)
- [x] [`Merge Overlapping Intervals`](./src/medium/merge-overlapping-intervals)
- [x] [`Best Seat`](./src/medium/best-seat)
- [x] [`Zero Sum Subarray`](./src/medium/zero-sum-subarray)
- [x] [`Missing Numbers`](./src/medium/missing-numbers)
- [x] [`Majority Element`](./src/medium/majority-element)
- [x] [`Sweet And Savory`](./src/medium/sweet-and-savory)
- [x] [`BST Construction`](./src/medium/bst-construction)
- [x] [`Validate BST`](./src/medium/validate-bst)
- [x] [`BST Traversal`](./src/medium/bst-traversal)
- [x] [`Min Height BST`](./src/medium/min-height-bst)
- [x] [`Find Kth Largest Value In BST`](./src/medium/find-kth-largest-value-in-bst)
- [x] [`Reconstruct BST`](./src/medium/reconstruct-bst)
- [x] [`Invert Binary Tree`](./src/medium/invert-binary-tree)
- [x] [`Binary Tree Diameter`](./src/medium/binary-tree-diameter)
- [x] [`Find Successor`](./src/medium/find-successor)
- [x] [`Height Balanced Binary Tree`](./src/medium/height-balanced-binary-tree)
- [x] [`Merge Binary Trees`](./src/medium/merge-binary-trees)
- [x] [`Symmetrical Tree`](./src/medium/symmetrical-tree)
- [x] [`Split Binary Tree`](./src/medium/split-binary-tree)
- [x] [`Max Subset Sum No Adjacent`](./src/medium/max-subset-sum-no-adjacent)
- [x] [`Number Of Ways To Make Change`](./src/medium/number-of-ways-to-make-change)
- [x] [`Min Number Of Coins For Change`](./src/medium/min-number-of-coins-for-change)
- [x] [`Levenshtein Distance`](./src/medium/levenshtein-distance)
- [x] [`Number Of Ways To Traverse Graph`](./src/medium/number-of-ways-to-traverse-graph)
- [x] [`Kadane's Algorithm`](./src/medium/kadanes-algorithm)
- [x] [`Stable internships`](./src/medium/stable-internships)
- [x] [`Union Find`](./src/medium/union-find)
- [x] [`Single Cycle Check`](./src/medium/single-cycle-check)
- [x] [`Breadth-first Search`](./src/medium/breadth-first-search)
- [x] [`River Sizes`](./src/medium/river-sizes)
- [x] [`Youngest Common Ancestor`](./src/medium/youngest-common-ancestor)
- [x] [`Remove Islands`](./src/medium/remove-islands)
- [x] [`Cycle In Graph`](./src/medium/cycle-in-graph)
- [x] [`Minimum Passes Of Matrix`](./src/medium/minimum-passes-of-matrix)
- [x] [`Two-Colorable`](./src/medium/two-colorable)
- [x] [`Task Assignment`](./src/medium/task-assignment)
- [x] [`Valid Starting City`](./src/medium/valid-starting-city)
- [x] [`Min Heap Construction`](./src/medium/min-heap-construction)
- [x] [`Linked List Construction`](./src/medium/linked-list-construction)
- [x] [`Remove Kth Node From End`](./src/medium/remove-kth-node-from-end)
- [x] [`Sum of Linked Lists`](./src/medium/sum-of-linked-lists)
- [x] [`Merging Linked Lists`](./src/medium/merging-linked-lists)
- [x] [`Permutations`](./src/medium/permutations)
- [x] [`Powerset`](./src/medium/powerset)
- [x] [`Phone Number Mnemonics`](./src/medium/phone-number-mnemonics)
- [x] [`Staircase Traversal`](./src/medium/staircase-traversal)
- [x] [`Blackjack Probability`](./src/medium/blackjack-probability)
- [x] [`Reveal Minesweeper`](./src/medium/reveal-minesweeper)
- [x] [`Search In Sorted Matrix`](./src/medium/search-in-sorted-matrix)
- [x] [`Three Number Sort`](./src/medium/three-number-sort)
- [ ] [`Min Max Stack Construction`](./src/medium/min-max-stack-construction)
- [ ] [`Balanced Brackets`](./src/medium/balanced-brackets)
- [ ] [`Sunset Views`](./src/medium/sunset-views)
- [ ] [`Best Digits`](./src/medium/best-digits)
- [ ] [`Sort Stack`](./src/medium/sort-stack)
- [ ] [`Next Greater Element`](./src/medium/next-greater-element)
- [ ] [`Reverse Polish Notation`](./src/medium/reverse-polish-notation)
- [ ] [`Colliding Asteroids`](./src/medium/colliding-asteroids)
- [ ] [`Longest Palindromic Substring`](./src/medium/longest-palindromic-substring)
- [ ] [`Group Anagrams`](./src/medium/group-anagrams)
- [ ] [`Valid IP Addresses`](./src/medium/valid-ip-addresses)
- [ ] [`Reverse Words In String`](./src/medium/reverse-words-in-string)
- [ ] [`Minimum Characters For Words`](./src/medium/minimum-characters-for-words)
- [ ] [`One Edit`](./src/medium/one-edit)
- [ ] [`Suffix Trie Construction`](./src/medium/suffix-trie-construction)
More...
- [ ] [`Longest Subarray With Sum`](./src/hard/longest-subarray-with-sum)
- [ ] [`Knight Connection`](./src/hard/knight-connection)
- [ ] [`Count Squares`](./src/hard/count-squares)
- [ ] [`Same BSTs`](./src/hard/same-bsts)
- [ ] [`Validate Three Nodes`](./src/hard/validate-three-nodes)
- [ ] [`Repair BST`](./src/hard/repair-bst)
- [ ] [`Sum BSTs`](./src/hard/sum-bsts)
- [ ] [`Max Path Sum In Binary Tree`](./src/hard/max-path-sum-in-binary-tree)
- [ ] [`Find Nodes Distance K`](./src/hard/find-nodes-distance-k)
- [ ] [`Max Sum Increasing Subsequence`](./src/hard/max-sum-increasing-subsequence)
- [ ] [`Longest Common Subsequence`](./src/hard/longest-common-subsequence)
- [ ] [`Min Number Of Jumps`](./src/hard/min-number-of-jumps)
- [ ] [`Water Area`](./src/hard/water-area)
- [ ] [`Knapsack Problem`](./src/hard/knapsack-problem)
- [ ] [`Disk Stacking`](./src/hard/disk-stacking)
- [ ] [`Numbers In Pi`](./src/hard/numbers-in-pi)
- [ ] [`Maximum Sum Submatrix`](./src/hard/maximum-sum-submatrix)
- [ ] [`Maximize Expression`](./src/hard/maximize-expression)
- [ ] [`Dice Throws`](./src/hard/dice-throws)
- [ ] [`Juice Bottling`](./src/hard/juice-bottling)
- [ ] [`Dijkstra's Algorithm`](./src/hard/dijkstras-algorithm)
- [ ] [`Topological Sort`](./src/hard/topological-sort)
- [ ] [`Kruskal's Algorithm`](./src/hard/kruskals-algorithm)
- [ ] [`Prim's Algorithm`](./src/hard/prims-algorithm)
- [ ] [`Boggle Board`](./src/hard/boggle-board)
- [ ] [`Largest Island`](./src/hard/largest-island)
- [ ] [`Continuous Median`](./src/hard/continuous-median)
- [ ] [`Sort K-Sorted Array`](./src/hard/sort-k-sorted-array)
- [ ] [`Laptop Rentals`](./src/hard/laptop-rentals)
- [ ] [`Find Loop`](./src/hard/find-loop)
- [ ] [`Reverse Linked List`](./src/hard/reverse-linked-list)
- [ ] [`Merge Linked Lists`](./src/hard/merge-linked-lists)
- [ ] [`Shift Linked List`](./src/hard/shift-linked-list)
- [ ] [`Lowest Common Manager`](./src/hard/lowest-common-manager)
- [ ] [`Interweaving Strings`](./src/hard/interweaving-strings)
- [ ] [`Solve Sudoku`](./src/hard/solve-sudoku)
- [ ] [`Generate Div Tags`](./src/hard/generate-div-tags)
- [ ] [`Ambiguous Measurements`](./src/hard/ambiguous-measurements)
- [ ] [`Shifted Binary Search`](./src/hard/shifted-binary-search)
- [ ] [`Search For Range`](./src/hard/search-for-range)
- [ ] [`Quickselect`](./src/hard/quickselect)
- [ ] [`Index Equals Value`](./src/hard/index-equals-value)
- [ ] [`Quick Sort`](./src/hard/quick-sort)
- [ ] [`Heap Sort`](./src/hard/heap-sort)
- [ ] [`Radix Sort`](./src/hard/radix-sort)
- [ ] [`Shorten Path`](./src/hard/shorten-path)
- [ ] [`Largest Rectangle Under Skyline`](./src/hard/largest-rectangle-under-skyline)
- [ ] [`Longest Substring Without Duplication`](./src/hard/longest-substring-without-duplication)
- [ ] [`Underscorify Substring`](./src/hard/underscorify-substring)
- [ ] [`Pattern Matcher`](./src/hard/pattern-matcher)
- [ ] [`Multi String Search`](./src/hard/multi-string-search)
- [ ] [`Longest Most Frequent Prefix`](./src/hard/longest-most-frequent-prefix)
- [ ] [`Shortest Unique Prefixes`](./src/hard/shortest-unique-prefixes)
More...
- [ ] [`Right Smaller Than`](./src/very-hard/right-smaller-than)
- [ ] [`Iterative In-order Traversal`](./src/very-hard/iterative-in-order-traversal)
- [ ] [`Flatten Binary Tree`](./src/very-hard/flatten-binary-tree)
- [ ] [`Right Sibling Tree`](./src/very-hard/right-sibling-tree)
- [ ] [`All Kinds Of Node Depths`](./src/very-hard/all-kinds-of-node-depths)
- [ ] [`Compare Leaf Traversal`](./src/very-hard/compare-leaf-traversal)
- [ ] [`Max Profit With K Transactions`](./src/very-hard/max-profit-with-k-transactions)
- [ ] [`Palindrome Partitioning Min Cuts`](./src/very-hard/palindrome-partitioning-min-cuts)
- [ ] [`Longest Increasing Subsequence`](./src/very-hard/longest-increasing-subsequence)
- [ ] [`Longest String Chain`](./src/very-hard/longest-string-chain)
- [ ] [`Square Of Zeroes`](./src/very-hard/square-of-zeroes)
- [ ] [`Knut Morris Pratt Algorithm`](./src/very-hard/knut-morris-pratt-algorithm)
- [ ] [`A* Algorithm`](./src/very-hard/a-star-algorithm)
- [ ] [`Rectangle Mania`](./src/very-hard/rectangle-mania)
- [ ] [`Detect Arbitrage`](./src/very-hard/detect-arbitrage)
- [ ] [`Two Edge Connected Graph`](./src/very-hard/two-edge-connected-graph)
- [ ] [`Airport Connections`](./src/very-hard/airport-connections)
- [ ] [`Merge Sorted Arrays`](./src/very-hard/merge-sorted-arrays)
- [ ] [`LRU Cache`](./src/very-hard/lru-cache)
- [ ] [`Rearrange Linked List`](./src/very-hard/rearrange-linked-list)
- [ ] [`Linked List Palindrome`](./src/very-hard/linked-list-palindrome)
- [ ] [`Zip Linked List`](./src/very-hard/zip-linked-list)
- [ ] [`Node Swap`](./src/very-hard/node-swap)
- [ ] [`Number Of Binary Tree Topologies`](./src/very-hard/number-of-binary-tree-topologies)
- [ ] [`Non-Attacking Queens`](./src/very-hard/non-attacking-queens)
- [ ] [`Median Of Two Sorted Arrays`](./src/very-hard/median-of-two-sorted-arrays)
- [ ] [`Optimal Assembly Line`](./src/very-hard/optimal-assembly-line)
- [ ] [`Merge Sort`](./src/very-hard/merge-sort)
- [ ] [`Count Inversions`](./src/very-hard/count-inversions)
- [ ] [`Largest Park`](./src/very-hard/largest-park)
- [ ] [`Smallest Substring Containing`](./src/very-hard/smallest-substring-containing)
- [ ] [`Longest Balanced Substring`](./src/very-hard/longest-balanced-substring)
- [ ] [`Strings Made Up Of Strings`](./src/very-hard/strings-made-up-of-strings)
## :sparkles: Features
- [x] **Automatic tests after every commit** - using Git Hooks and Jest
- [x] **Automatic tests after every push** - using Github Actions and Jest
- [x] **Common folder** - to help you reuse code
- [x] **Each challenge has its own folder** - to help you organize your solutions
- [x] **Each challenge has its own test file** - to help you run the tests for a specific challenge
- [x] **Each challenge has its own case test file** - to help you organize your test cases
- [x] **Each challenge has its own README.md file** - to help you understand the challenge
- [x] **Each challenge has its own solution file** - to help you write your solution
- [x] **Easy to test your solution** - just create a new solution file and update the test file with your solution
- [x] **Makefile** - to help you run the tests, create new challenges and commit your solutions
- [x] **Easy to commit your solution** - just run `make commit` and it will commit with the message `feat(CHALLENGE_NAME): add solution {SOLUTION_NUMBER}`
- [x] **Easy to create new challenges** - just run `make new` and it will create the folder, files and README.md file for you, using templates
- [x] **Easy to create new solutions** - just run `make new-solution` and it will create the solution file for you, using templates
- [x] **Easy to run the tests** - just run `make test` and it will run all tests
- [x] **You can customize the templates** - just update the `scripts/templates` folder
- [x] **Easy to debug in VSCode** - there is a `launch.json` file with a debug configuration for the current open challenge tab in VSCode
- [x] **Auto discover last challenge completed** to create new solution when executing `make new-solution` command
- [x] **Auto discover next challenge to be completed** to create new challenge when executing `make new` command
- [x] **Auto update solution been tested** when executing `make new-solution` command
## :construction: Roadmap
- [ ] Replicate function assignature from `solution-0.ts` to new file when executing `make new-solution` command
- [ ] After creating a new challenge, open all new files in VSCode
- [ ] Update all challenges with the new structure after finishing the challenge list
- [ ] Auto update number of challenges completed in each level after finishing each challenge when executing `make commit` command
- [ ] Move root config files to a `.config` folder
- [ ] Create a `docs` folder with a `README.md` file with some tips and tricks
## :bulb: Study Method
My method for solving the challenges is:
0. Preparation
1. **Create** the challenge folder and files (using the `make new` command)
1. 1st Step
1. **Read** the challenge description
2. **Draw** a solution
3. **Write the solution** in TypeScript without looking at the solution hints
4. Run the **tests** (using the `make test-changed` command)
5. **Refactor** the solution
6. **Repeat** steps 4 and 5 until all tests pass
7. Evaluate the **complexity** of the solution
8. **Commit** the solution (using the `make commit` command)
2. 2dn Step
1. Verify the solution **hints**
2. **Compare** my solution with the solution hints
3. Try to **improve** my solution or create a new one based on the solution hints (using the `make new-solution` command)
4. **Repeat** steps 4 to 10 until I'm satisfied with the solution
5. **Commit** the solution (using the `make commit` command)
3. 3rd Step
1. Watch the solution **video**
2. **Implement** other solutions from the video or refactor my solution based on the video
3. **Commit** the solution (using the `make commit` command)
```mermaid
flowchart LR
START((Preparation)) --> one
subgraph one[1st Step]
A[Read] --> B[Draw]
B --> C[Code]
C --> D[Tests]
D --> C
D --> I[Complexity]
I --> R[Commit]
end
subgraph two[2nd Step]
R --> J[Hints]
J --> K[Compare]
K --> L[Refactor]
L --> M[Tests]
M --> L
M --> S[Commit]
end
subgraph three[3rd Step]
S --> N[Video]
N --> O[Code]
O --> P[Code/Refactor]
P --> Q[Tests]
Q --> P
Q --> T[Commit]
end
one -.-> two
two -.-> three
three --> End(((End)))
```
## :computer: Technologies
- [Node.js](https://nodejs.org/en/)
- [TypeScript](https://www.typescriptlang.org/)
- [Jest](https://jestjs.io/)
## :scroll: Requirements
- [Node.js](https://nodejs.org/en/)
## :cd: Installation
```sh
git clone [email protected]:filipe1309/algoexpert-solutions.git
```
```sh
cd algoexpert-solutions
```
```sh
make install
```
## :white_check_mark: Tests
I have created a `Makefile` to help you run the tests.
Run all tests:
```sh
make test
```
Run a specific test:
```sh
make test t=CHALLENGE_NAME
```
> Example: `make test t=two-number-sum`
Run changed tests:
```sh
make test-changed
```
## :wrench: Extras
I have also created a `Makefile` with some extra commands.
### Create a new challenge folder and files:
```sh
make new [n=CHALLENGE_NAME] [l=CHALLENGE_LEVEL] [c=CHALLENGE_CATEGORY]
```
> :memo: **Example:**
> `make new` (fill the prompts) OR `make new n=two-number-sum l=easy c=arrays`
>
> Levels: `easy`, `medium`, `hard`, `very-hard`
This will create:
- a folder (`src/easy/two-number-sum`)
- a `solution-0.ts` file *(the file where you will write your solution, you can create more if you want and update the test file)*
- a test file `solution.spec.ts`
- a case test file `cases.ts`
- a `README.md` file
### Commit your solutions:
```sh
make commit [m=COMMIT_MESSAGE]
```
> :memo: **Example:**
> `make commit m="feat: add two number sum solution"`
> if you don't pass the `m` argument, it will commit with the message
> `feat(CHALLENGE_NAME): add solution {SOLUTION_NUMBER}`
### Create new solution:
```sh
make new-solution [n=CHALLENGE_NAME_SNAKE] [l=CHALLENGE_LEVEL_LOWER]
```
> :memo: **Example:**
> `make new-solution [l=easy] [n=two-number-sum]`
> OR `make new-solution` (fill the prompts)
This will create a new solution file `solution-{SOLUTION_NUMBER}.ts` and update the test file.
> If `solution-0.ts` already exists, it will create `solution-1.ts` and update index.ts file and the test file.
> And so on...
---
Help command:
```sh
make help
```
## :handshake: Contributing
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
Please make sure to update tests as appropriate.
## :memo: License
[MIT](https://choosealicense.com/licenses/mit/)
## :clap: Acknowledgments
- [AlgoExpert](https://www.algoexpert.io/)
- [New Year Gift - Curated List of Top 75 LeetCode Questions to Save Your Time](https://www.teamblind.com/post/New-Year-Gift---Curated-List-of-Top-75-LeetCode-Questions-to-Save-Your-Time-OaM1orEU)
- [ShubcoGen Template™](https://github.com/filipe1309/shubcogen-template)
- [Git Hooks without extra dependencies like Husky in Node.js project](https://dev.to/azu/git-hooks-without-extra-dependencies-like-husky-in-node-js-project-jjp)
- [TypeScript + Jest](https://basarat.gitbook.io/typescript/intro-1/jest)
- [Testes Unitários com Node.js, Jest e TypeScript](https://sharklabs.com.br/testes-unitarios-com-nodejs-jest-typescript/)
- [What is Big O Notation Explained: Space and Time Complexity](https://www.freecodecamp.org/news/big-o-notation-why-it-matters-and-why-it-doesnt-1674cfa8a23c/)
- [Utilizando Path Mapping no TypeScript](https://blog.rocketseat.com.br/path-mapping-typescript/)
- [Paths Mapping](https://kulshekhar.github.io/ts-jest/docs/getting-started/paths-mapping/)
- [Module Resolution](https://www.typescriptlang.org/docs/handbook/module-resolution.html#path-mapping)
- [Understanding the Levenshtein Distance Equation for Beginners](https://medium.com/@ethannam/understanding-the-levenshtein-distance-equation-for-beginners-c4285a5604f0)
- [Stable Marriage Problem - Numberphile](https://www.youtube.com/watch?v=Qcv1IqHWAzg&ab_channel=Numberphile)
- [Stable Marriage Problem (the math bit)](https://www.youtube.com/watch?v=LtTV6rIxhdo&ab_channel=Numberphile2)
## 🧙♂️ About Me
---
Done with :heart: by Filipe Leuch Bonfim 🖖