Hi everyone. In this post I want to share a little project I've been working on in the past few days. Let's dive into it
algo
algo is short for algorithms. algo is a set of coding problems where the solutions are written following conventions and TDD practices in modern languages. Modern languages, in my humble opinion, are those that are being requested everywhere in the industry at the moment, these are: c++, go, python, rust, and typescript.
The project is set up as monorepo were each package name has the prefix algo-
.
When setting up a monorepo you will always need to choose a build system, commonly a CLI tool that can run commands for any of your packages. In this case I chose to work with make
.
TDD
For all the coding problems I followed TDD/BDD practices (I prefer the last). This is also how I solve problems during coding interviews. It's not necessary to always start with a failing test but it should be a common practice to use your test to describe the expected behaviour of your algorithm.
E.g.
it("should return false for an invalid BST");
CI
I consider CI a must for any of my projects. Continuos Integration will always ensure that your main branch can build with no errors, thus any branch you want to squash/rebase into main should have a green CI check.
Setting up CI for all your projects, no matter the size, is always a good practice.
For this project CI is very simple: run linting (currently this is a TODO) and run tests. If all tests have passed with no errors, then the CI check is green.
You can check my github workflows here.
monorepo setup
Ideally a monorepo (see definition) would contain different packages written with the same language, which will make it easier to share common code/types/config/dependencies. In this case I chose a monorepo structure to add packages written using different languages which also have different build systems. To make it simple, I have added a Makefile
to each package (except for the typescript package, where I use yarn), thus consolidating the build system.
Testing
For each package I'm using the standard testing tools:
Coding Problems
Most of the problems listed in the repo come from leetcode. It's a great resource to practice your problem solving skills. Another platform I like is hackerrank.
Playing around: compare the runtime for solutions in different languages in leetcode. For this problem I got this numbers for C++ and Rust
Contributing
I'd love to see some of you contributing with either adding more problems or improving the existing solutions (text and code). There is also a TODO list in the repo's README that needs some love.
algo
Coding problems with modern languages, TDD and CI.
Dependencies
Cargo
CMake
Go
Python3
NodeJS, Yarn
Folder structure
-
packages/
-
algo-cpp/
: solutions in c++ (17) -
algo-go/
: solutions in golang -
algo-py/
: solutions in python 3 -
algo-rust/
: solutions in rust -
algo-ts/
: solutions in typescript
-
Packages
algo-cpp
- C++ 11/17
- Testing: gtest
- Conventions: Google style guide
algo-go
- Go 1.7
- Testing:
go test
. - Conventions: Uber style guide
algo-py
- python 3.x
- Testing:
python unittest
- Conventions: google pyguide
algo-rust
- rustc 1.56
- Testing:
cargo test
- Conventions:
cargo clippy
algo-ts
Coding Problems
All problems are prefixed with algo-
an enumerated from zero. This way you can easily find the solutions in any package
Checkout the list of problems here
Testing
All packages are configured to use Makefile
as follow
make -C packages/algo-[lang]/ test
Except for algo-ts
, where we use yarn
yarn --cwd packages/algo-ts/
…That's all. I hope you can find something useful on this post and project.
Thanks 🤖
Top comments (0)