# Solutions for AdventOfCode Solutions are located in `AdventOfCode/src//days/` and the project is built using [MakeGen](https://github.com/Thraix/MakeGen) ## Framework The framework used to run all the different days is a homemade framework with inspiration from google test. It will automatically run all the days (cpp files) which are included into the project. ### Framework demo A simple example of how the framework works can be seen in `src/days/day01.cpp`. `REGISTER_DAY(dayXX, InputType, OutputType)` will register the current day in the framework and set the input and output type of the current day. `REGISTER_TEST(dayXX, TestName, Part, Result)` registers a test for the current day with a given name, part number and expected result. It will read the input file located in `res/dayXX/input.txt`. `REGISTER_TEST_EXAMPLE(dayXX, TestName, Part, Result)` registers an example test for the current day with a given name, part number and expected result. It will read the input file located in `res/dayXX/test_input.txt`. `READ_INPUT(input)` is the macro function which reads the input for the current day (located in `res/dayXX/`). `input` is of type `std::istream` which is based on the input file from `REGISTER_TEST`. The return value should be of type `InputType` specified in `REGISTER_DAY`. `OUTPUT1(input)` is the macro function which calculates the solution for part 1 of the current day. This will run for all registered tests which has `Part=1` as argument. `input` is of type `InputType` specified in `REGISTER_DAY`. The return value should be of type `OutputType` specified in `REGISTER_DAY`. `OUTPUT2(input)` is the macro function which calculates the solution for part 2 of the current day. This will run for all registered tests which has `Part=2` as argument. `input` is of type `InputType` specified in `REGISTER_DAY`. The return value should be of type `OutputType` specified in `REGISTER_DAY`. ### Framework Q&A Is it over-engineered for this use case? It certainly is! Does it make it simpler to create the solutions for each day? Debatable Was it fun making it? Yep! Did I learn a lot by making it? Also yep! Can you have more relevant questions in your Q&A? Nope!