#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); }