diff --git a/day_3/.gitignore b/day_3/.gitignore new file mode 100644 index 0000000..36e2c82 --- /dev/null +++ b/day_3/.gitignore @@ -0,0 +1,2 @@ +/.idea +/cmake-build-debug diff --git a/day_3/CMakeLists.txt b/day_3/CMakeLists.txt new file mode 100644 index 0000000..faeda43 --- /dev/null +++ b/day_3/CMakeLists.txt @@ -0,0 +1,6 @@ +cmake_minimum_required(VERSION 3.19) +project(day_3) + +set(CMAKE_CXX_STANDARD 20) + +add_executable(day_3 main.cpp) \ No newline at end of file diff --git a/day_3/input.txt b/day_3/input.txt new file mode 100644 index 0000000..bee8dd5 --- /dev/null +++ b/day_3/input.txt @@ -0,0 +1,323 @@ +...#..............#.#....#..#.. +...#..#..#..............#..#... +....#.#.......#............#... +..##.....##.........#........## +...#...........#...##.#...#.##. +..#.#...#....#.....#........#.. +....##.###.....#..#.......#.... +.#..##...#.....#......#..#..... +............##.#...#.#.....#.#. +..........#....#....#.#...#...# +..##....#.#.#......#.........#. +#.#.........#..............##.. +....##.##...................... +....##..#...........#.......... +..#..#.#........##....#......#. +..............#..#....#.....#.. +.............#...#.....#...#... +.#...........#..........#...#.. +.#......#.......#......#....... +#..#.............#..#....##.### +........#.#...........##.#...#. +......#..#.....##......#....... +.....#.....#....#.............. +#...##.#......#......#...#..... +...........................#... +...#....................#.....# +..#.....#...#.....##.....#..... +....................#......#..# +.......#.....##......##....#... +#........##...#.....##..#...#.. +........#..#.#......#..###..#.# +##.....#.............#.#....#.. +..#.................#....###### +.#.#..#.....#.#..........#.#... +.........#....#...#............ +........#..#.....#............. +............#.#.............##. +...#....#..#......#............ +.##....#.....#...#.#........... +..#..............#...........## +.....#.#.##...#................ +..........#..#.#..........##..# +..#....#...#...#.....######.... +....#.#..#........#....#.###... +.......................#....... +..#.....#.##................#.. +.....#......#..#.....#........# +.#...###.......#.#.........#..# +............#.................. +..#.........##.........##...... +#...........#.#.......###.#.... +.#...#.....#.........###.....#. +.#............#........#..#.... +...##.#......##................ +........#...#...#...#.......... +.......#.##......##.#.......... +....##.......#..#....#....#.... +......#.........###........#... +#....#....####....##......#.... +......................#....#.#. +...#.#.#....#.#...#...#......#. +......#.....##.#...........###. +#........#.........##......#.#. +....##.....#.....#..#.......... +......#...#...#.........#...##. +..#........#..................# +.........#..##.#..#..#...#.#..# +.....#.....#...#.....###.....## +.............#....#...#........ +..........#.#.#...#..#...#....# +#...............##.......#..... +#...#.............#..#...#....# +..#...#...##...##...#..#....... +..#..#........#.#...........#.. +.....#.....#..................# +....#....##....###..###...##... +..#......###.........##....#.## +.......#.##...#.......#..#..... +...#.#.#.#.....##..#..#........ +................##....#.#...... +..#...#...#...#.....##.#...#..# +..#..#.....#..##....#....#..... +.###...#......#........#.....## +##......#..#........#.......... +....#...#..#....##..#......#### +.#.....##....#..........#...... +.#...#....#.........#...#....#. +.....#..#.#..#......#..##....#. +...#.##...#...#........#......# +.#..#...#.#..#.........#...#... +#....#......##.....#.......#... +..##............##..#.#.#...#.. +##.......#.......##............ +#......#.##........#...#...#... +.#.#.......##.........#..#.#... +.............##.#........#..... +.#..#...###...#..#............. +.....#...#..#....#.......#..... +#.#.........#.#.#...#...#.#.... +.....#.......#.##.##...#....#.. +.#.##..#.....#...#.#.#.#.#..#.. +..........#...................# +.....#.#.#...##.........#..#..# +.#..#....##......#...#......... +.##......#......#...#........#. +.....##.#......#............#.# +.#.....##..#...........##...... +.....#......#.......##....#.... +..#..##..........#.#..........# +#.#.......##..#..##.#....#..... +.......#..#.#.......##......#.# +....#...##...#..............#.. +.....#.........#......#...##... +#.........#........##..#.....#. +.#.#..#.....##.......#......#.. +........#..#....#.....###..#... +#.#..#.#..........#............ +..#......##..#....#.........#.. +#.............................. +.......#............#..#..#.#.. +.#.....#.#....#..#.##.#........ +.......#.###.#........##.#..#.. +..............#....#.....##.#.. +#..............#....#.###...... +.#..#..#...###............#...# +.#.##...#....#..#...#...#...... +......##..#..#......#..#....#.. +.........#.......##............ +...........##...#..#....####... +.#..................#.......... +#...#..#..................#.... +..............#.....##.....#... +..#.#..#...##..#.....#.....#..# +....#....#.#.........#.....#... +.#.......#...#....#...#.#..#..# +#.........##.....##.......#...# +#..#............#....#........# +..........##...#......#....#... +.......#..##...............#... +#............#.#.#.....#....... +.#........##...#............... +..##....#.....#..#.##.#......#. +.#...#.............#...#.....#. +...##....#.......#......#.#..#. +#......................#..#.##. +...#..........#..#.........#... +..#......#.......#.#....#...... +....#............#...#......#.. +.....#..#..##...#...#.........# +.....#......#....#....#........ +.............#..#..........#... +....#..............#.....#.#... +....#.................#.#...#.# +.........#.#...........###.#.## +#...........#..##.#....#.##.#.. +#.#.....#...................... +##.#.........#....##.#.#..#.#.. +#..........#.#.#.#.#..#..##..#. +..#...#..###.........#......#.. +.....#......#..#.#............# +...........#...#.#.#.###....#.. +#....#..#.......##.#.......##.. +..............#.....##.#....... +.#.....#.#..#.........#.#.#..#. +..#..#..#..#................#.. +...........#..#.#...#.........# +.#..#..#...#........#...#.#..#. +...#.#..#......#..#............ +........#......##.....#....#... +#...#......##.#.#.............. +.#........................#.... +#.#.....#.##.....#..#.#........ +#..........##.#.......#....#..# +#...#..#..#.....#....#....#.... +#...........#..#.#....##.##.... +##......#..#........#.......##. +#........#..#...#..........#... +...#...#......##....#.#........ +...##..#..#.##....#...#........ +#.#..#....#...#........#....... +..........#.......#..........#. +......##...#....###...#....#... +........#..#.....#......#...... +....#.........##...#..##......# +....#...........#.#..#.#.#.#..# +..#......#..#......#........#.# +#..#....#.....#.............#.. +............................#.. +#...#.#.....#...#....#....#.... +........#...#...#...#...#...... +.###........#....#.##.....##.#. +.........#.....#..........#.... +.#.........#....##.#.....#..... +#..#....................##.#... +..##.#.............#....#.#.... +..#.#........#............##.#. +#........#...##.....#...#.....# +.........#.#..........#....#..# +...###.#..#.#......#.#.....#... +......#.....#..#...#........#.. +.......#...#.....#....#....#..# +.#.#........#......##.......#.. +#.................###.......... +#........#.#..#....#..#........ +..##....#.#...##...#...##....#. +...#.#......##...#.....#..#.... +#..#........#...###....#....... +##.#....#..#.#..........#...... +....#...###...#.....#........#. +..#.#........#....##.#......... +......##.##.................##. +.#....##...#.#..#.#............ +.#...###........#......#....... +##..#.#......#..#..#...#....... +.......##..#....#........#....# +......#..........#............. +....##..##..#......#.#......... +.....#....................##... +...###.....#.....#...#.#.##.#.. +....#.#..#.......#..#......##.. +.......#.#..#.##.#...#......#.. +...#.#....#.#...#..##...#...#.. +#.##...#....#..#.............#. +...#...#...#.......#..........# +.#..#.............#..##.#...... +....#.......#..............#.#. +..................#..#.....##.# +.#...#..#......#..........#...# +..#.#.....#..#....#....#####.#. +.......###.......#....#....#... +......#.#........#...#......... +......#..#.#.#....#.#.#....##.. +.#...#.#...##.#......#......... +#....#..##....#.#.......#....#. +..##.#.....#.....#.........#... +......#......#....#....#.....#. +...##.....#....#......#......#. +......#......##............#.#. +.##.#.......#....#...#....#.... +....#..#..#...##.......#..#.... +....#....#...#.#........#..#... +....#.....#..........#..#...... +....#....#...#.....#..##.....#. +##...#..##......#....##..#..#.. +.....##.##..............##..... +#.#....#.##..#....#...##....... +..#.....##.....#.....######...# +...#.....#.#.#......#......##.# +...........##.............#.... +...##......#..#......#...#..... +....#.##......#..#....#.#..#... +.#..#....#...#..#.....##....... +.....#..#.................#..#. +................#..#...#......# +...##....#.....#..#....##...... +....##...............##...#.... +......#..........#..##......... +.......###.......#.........#..# +......................#....#.#. +#.#.....#...##............#.... +........#......##......#.....#. +...#....#....#.#..##.#..#.#.#.. +..#.#....#.##...#..#.....#.#... +............#....#..#.......#.. +#...#...#.#......#...##.....#.# +......#....#....#.......#...... +....#.......#..........#....#.. +........#####........#....#.... +......#....##..............#.#. +....#....#.......#.......#..... +.##.#....##....#............... +#.....##........#..#.#...#.#... +...#......##....#.............. +.#.....#.....#.......##....##.. +#....#..........#.#..#......... +......##..........##.......#... +.##......##.....#.#....#......# +....#......................#... +.#...........###........#...#.. +#.#..#..#..#...##.#....#.#..#.. +...##...........#.#..........#. +......#.#..#....#....#......... +....#....#.#......#.........##. +.#..#...#...##....#...#......#. +#.#......#...#.#.#...........#. +##.....#..........##....##..##. +...#.#.....#..##........#...... +..#........##........#..#...... +.......#...............##..#... +.......#.#....#..###........... +.............#........#...#.... +#.................#......#..#.. +...#....#..#..............#...# +.............#....##....#..##.. +#........#..........##...##...# +............#....#.....#.#....# +.....#..............##..#...#.. +..#....#......###....#.#...##.. +....##......#.....#....#....... +.....#...............#.....#... +.#.....#.....#..............#.. +#................#..#.......... +.##....#....#.....#............ +#.####...#..#..#....#.......... +..##........##.....##......#..# +......#.....#...##.........##.. +....##..#.....#.#.........#...# +.....##..#....#....#.#...#..#.. +...#............#...........#.. +.......#.#..#.#.#..#........#.# +....#.#........#.#.#..#...#...# +..#....#....#..#......#........ +.#...........................#. +.#..#....####........##......#. +.#.....#..#.#.................# +.#..#...........#...#....#...#. +......##..#........#..#....#... +..#.............#....#........# +#.#..........#.##.......#.#..#. +..#....#...#...............#... +..............#..........#..#.. +..#.....#.#.....#...#...#..#... +.........#...###.#...#........# diff --git a/day_3/main.cpp b/day_3/main.cpp new file mode 100644 index 0000000..8609abf --- /dev/null +++ b/day_3/main.cpp @@ -0,0 +1,64 @@ +#include +#include +#include +#include + + +int calcNumOfEncounteredTrees( + const std::vector>& world, + const std::pair dimensions, + std::pair slope + ) { + int treeCount = 0; + int x = 0; + + for (int y = 0; y < dimensions.second; y += slope.second) { + if (!world[y][ x % dimensions.first]) treeCount++; + x += slope.first; + } + + return treeCount; +} + + + +void part1(const std::vector>& world, const int width, const int height) { + const int RISE = 1; + const int RUN = 3; + + int count = calcNumOfEncounteredTrees(world, { width, height }, { RISE, RUN }); + std::cout << "(P1) Number of trees: " << count << std::endl; +} + +void part2(const std::vector>& world, const int width, const int height) { + int count1 = calcNumOfEncounteredTrees(world, { width, height }, { 1, 1 }); + int count2 = calcNumOfEncounteredTrees(world, { width, height }, { 3, 1 }); + int count3 = calcNumOfEncounteredTrees(world, { width, height }, { 5, 1 }); + int count4 = calcNumOfEncounteredTrees(world, { width, height }, { 7, 1 }); + int count5 = calcNumOfEncounteredTrees(world, { width, height }, { 1, 2 }); + + uint64_t product = count1 * count2 * count3 * count4 * count5; + std::cout << "(P2) Product of number of trees: " << product << std::endl; +} + + +int main() { + std::ifstream input { "../input.txt" }; + std::vector> world; + std::optional maybeWidth = std::nullopt; + int lineCount = 0; + + std::string line; + while(std::getline(input, line)) { + if (!maybeWidth.has_value()) maybeWidth = { line.length() }; + + std::vector row; + for (char c : line) row.push_back(c == '.'); + world.push_back(row); + + lineCount++; + } + + part1(world, maybeWidth.value(), lineCount); + part2(world, maybeWidth.value(), lineCount); +}