|
|
@ -0,0 +1,42 @@ |
|
|
|
|
|
#include <vector>
|
|
|
|
|
|
#include <utility>
|
|
|
|
|
|
#include <array>
|
|
|
|
|
|
|
|
|
|
|
|
#include "solutions.hpp"
|
|
|
|
|
|
|
|
|
|
|
|
using namespace std; |
|
|
|
|
|
|
|
|
|
|
|
pair<string, string> solve3(istream& input) { |
|
|
|
|
|
vector<string> my_map; |
|
|
|
|
|
uint64_t width; |
|
|
|
|
|
bool width_set = false; |
|
|
|
|
|
for (string line; getline(input, line); ) { |
|
|
|
|
|
my_map.push_back(line); |
|
|
|
|
|
if (!width_set) { |
|
|
|
|
|
width = line.length(); |
|
|
|
|
|
width_set = true; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
array<pair<uint64_t, uint64_t>, 5> slopes { { |
|
|
|
|
|
{1, 1}, |
|
|
|
|
|
{3, 1}, |
|
|
|
|
|
{5, 1}, |
|
|
|
|
|
{7, 1}, |
|
|
|
|
|
{1, 2} |
|
|
|
|
|
} }; |
|
|
|
|
|
uint64_t product = 1; |
|
|
|
|
|
uint64_t part1; |
|
|
|
|
|
for (auto slope : slopes) { |
|
|
|
|
|
uint64_t total_trees = 0; |
|
|
|
|
|
for (auto pos = pair(0, 0); pos.second < my_map.size(); ) { |
|
|
|
|
|
total_trees += (int) my_map[pos.second][pos.first] == '#'; |
|
|
|
|
|
pos.first = (pos.first + slope.first) % width; |
|
|
|
|
|
pos.second += slope.second; |
|
|
|
|
|
} |
|
|
|
|
|
product *= total_trees; |
|
|
|
|
|
if (slope.first == 3 && slope.second == 1) { |
|
|
|
|
|
part1 = total_trees; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
return pair(to_string(part1), to_string(product)); |
|
|
|
|
|
} |