65 lines
1.9 KiB
C++
65 lines
1.9 KiB
C++
#include <iostream>
|
|
#include <fstream>
|
|
#include <vector>
|
|
#include <optional>
|
|
|
|
|
|
int calcNumOfEncounteredTrees(
|
|
const std::vector<std::vector<bool>>& world,
|
|
const std::pair<int, int> dimensions,
|
|
std::pair<int, int> 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<std::vector<bool>>& 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<std::vector<bool>>& 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<std::vector<bool>> world;
|
|
std::optional<int> maybeWidth = std::nullopt;
|
|
int lineCount = 0;
|
|
|
|
std::string line;
|
|
while(std::getline(input, line)) {
|
|
if (!maybeWidth.has_value()) maybeWidth = { line.length() };
|
|
|
|
std::vector<bool> row;
|
|
for (char c : line) row.push_back(c == '.');
|
|
world.push_back(row);
|
|
|
|
lineCount++;
|
|
}
|
|
|
|
part1(world, maybeWidth.value(), lineCount);
|
|
part2(world, maybeWidth.value(), lineCount);
|
|
}
|