Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

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.

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)



(back to top)

## :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

(back to top)

## :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

(back to top)

## :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)))
```

(back to top)

## :computer: Technologies

- [Node.js](https://nodejs.org/en/)
- [TypeScript](https://www.typescriptlang.org/)
- [Jest](https://jestjs.io/)

(back to top)

## :scroll: Requirements

- [Node.js](https://nodejs.org/en/)

(back to top)

## :cd: Installation

```sh
git clone [email protected]:filipe1309/algoexpert-solutions.git
```

```sh
cd algoexpert-solutions
```

```sh
make install
```

(back to top)

## :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
```

(back to top)

## :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
```

(back to top)

## :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.

(back to top)

## :memo: License

[MIT](https://choosealicense.com/licenses/mit/)

(back to top)

## :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)

(back to top)

## 🧙‍♂️ About Me





---


Done with  :heart:  by Filipe Leuch Bonfim 🖖

(back to top)