Skip to content

Algorithms Exercises solved in C (GNU11), running with CMake and Catch2 (C++) unittest framework. Developed with TDD.

License

Notifications You must be signed in to change notification settings

sir-gon/algorithm-exercises-c

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

26 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Algorithm Exercises (C / GNU11)

C/C++ CI CppCheck Lint Markdown Lint YAML lint

GitHub GitHub language count GitHub top language CodeFactor codecov

Quality Gate Status Coverage Bugs Code Smells Duplicated Lines (%)

TL;DR

Algorithms Exercises solved in C / GNU11 as in Linux Kernel, running with Catch2 (C++) testing suite throug CMake. Developed with TDD.

C / GNU11 C++17 CMake Docker

Go to Install and run

What is this?

This repository is part of a series that share and solve the same objectives, with the difference that each one is based on a different software ecosystem, depending on the chosen programming language:

Objetives

Functional

  • For academic purposes, it is an backup of some algorithm exercises (with their solutions), proposed by various sources: leetcode, hackerrank, projecteuler, ...

  • The solutions must be written on "vanilla code", that is, avoiding as much as possible the use of external libraries (in runtime).

  • Adoption of methodology and good practices. Each exercise is implemented as a unit test set, using TDD (Test-driven Development) and Clean Code ideas.

Technical

Foundation of a project that supports:

  • Explicit typing when the language supports it, even when it is not mandatory.
  • Static Code Analysis (Lint) of code, scripts and documentation.
  • Uniform Code Styling.
  • Unit Test framework.
  • Coverge collection. High coverage percentage. Equal or close to 100%.
  • Pipeline (Github Actions). Each command must take care of its return status code.
  • Docker-based workflow to replicate behavior in any environment.
  • Other tools to support the reinforcement of software development good practices.

Install and Run

⭐️: Prefered way.

Install and run directly with make

It is assumed that the following tools have already been installed:

Using a runtime in your SO. You must install dependencies:

make dependencies
make lint # optional
make build
make test

Test run with alternative behaviors

Not implemented yet

Examples running tests with alternative behaviors

Install and Running with Docker 🐳

Build an image of the test stage. Then creates and ephemeral container an run tests.

docker compose build algorithm-exercises-c
docker compose build algorithm-exercises-c-lint
docker compose build algorithm-exercises-c-test
docker compose build algorithm-exercises-c-dev
docker compose --profile testing run --rm algorithm-exercises-c-test

Install and Running with Docker 🐳 using make

make compose/build
make compose/lint # optional
make compose/test

About development

cmake --version
cmake version 3.30.3

CMake suite maintained and supported by Kitware (kitware.com/cmake).

vcpkg --version
vcpkg package management program version 2024-08-01-2024.08.01

See LICENSE.txt for license information.

g++ --version
Apple clang version 15.0.0 (clang-1500.3.9.4)
Target: x86_64-apple-darwin23.6.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

cppcheck --version
Cppcheck 2.15.0

Algorithm excersices sources

  • Leetcode online platform for coding interview preparation.
  • HackerRank competitive programming challenges for both consumers and businesses.
  • Project Euler a series of computational problems intended to be solved with computer programs.

Use these answers to learn some tip and tricks for algorithms tests.

Disclaimer. Why I publish solutions?

As Project Euler says:

https://projecteuler.net/about#publish

I learned so much solving problem XXX, so is it okay to publish my solution elsewhere?
It appears that you have answered your own question. There is  thing quite like that "Aha!" moment when you finally beat a problem which you have been working on for some time. It is often through the best of intentions in wishing to share our insights so that others can enjoy that moment too. Sadly, that will rarely be the case for your readers. Real learning is an active process and seeing how it is done is a long way from experiencing that epiphany of discovery. Please do not deny others what you have so richly valued yourself.

However, the rule about sharing solutions outside of Project Euler does not apply to the first one-hundred problems, as long as any discussion clearly aims to instruct methods, not just provide answers, and does not directly threaten to undermine the enjoyment of solving later problems. Problems 1 to 100 provide a wealth of helpful introductory teaching material and if you are able to respect our requirements, then we give permission for those problems and their solutions to be discussed elsewhere.

If you have better answers or optimal solutions, fork and PR-me

Enjoy 😁 !

Status

License

LICENSE.md

Coverage

Coverage