Files
2025-11-26 21:59:50 +01:00

45 lines
2.2 KiB
Markdown

# Solutions for AdventOfCode
Solutions are located in `AdventOfCode/src/<year>/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!