This repository has been archived on 2021-06-30. You can view files and clone it, but cannot push or open issues or pull requests.
aoc2020/day_3/main.cpp

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