From 6e5a11399568a1d8c863659d61e8a8f914824c99 Mon Sep 17 00:00:00 2001 From: Mathias Wagner Date: Tue, 5 Dec 2023 17:45:10 +0100 Subject: [PATCH] Created the advent of code day 2 challenge (part 2) --- aoc/02_part_2.cpp | 102 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 aoc/02_part_2.cpp diff --git a/aoc/02_part_2.cpp b/aoc/02_part_2.cpp new file mode 100644 index 0000000..1d143ad --- /dev/null +++ b/aoc/02_part_2.cpp @@ -0,0 +1,102 @@ +#include +#include +#include + +using namespace std; + +// Advent of Code, Day 2 Part 2 + +struct Set { + int red = 0; + int green = 0; + int blue = 0; +}; + +int main() { + + fstream input("input.txt"); + + map> games; + + for (string line; getline(input, line);) { + regex e{"Game ([0-9]+): (.*)"}; + smatch m; + + if (regex_search(line, m, e) && m.size() <= 1) continue; + string id = m.str(1); + string setString = m.str(2); + + vector sets; + + bool space = false; + string current_str; + for (char current: setString) { + if (current == ' ' && space) { + space = false; + sets.push_back(current_str); + current_str = ""; + continue; + } + + if (current == ';') { + space = true; + continue; + } + + current_str.push_back(current); + } + sets.push_back(current_str); + + vector list = {}; + + for (auto current: sets) { + regex set("([0-9]+) (blue|red|green)"); + + sregex_iterator iter(current.begin(), current.end(), set); + sregex_iterator end; + + map colors = {}; + + while (iter != end) { + colors[iter->str(2)] = stoi(iter->str(1)); + iter++; + } + + Set currentSet{}; + currentSet.blue = colors["blue"]; + currentSet.red = colors["red"]; + currentSet.green = colors["green"]; + + list.push_back(currentSet); + } + + games[stoi(id)] = list; + } + + + int sum = 0; + + for ( + auto game: games) { + vector bag = game.second; + + int maxBlue = 0, maxGreen = 0, maxRed = 0; + + for (auto set: bag) { + if (set.blue > maxBlue) maxBlue = set.blue; + if (set.green > maxGreen) maxGreen = set.green; + if (set.red > maxRed) maxRed = set.red; + } + + int power = maxBlue * maxGreen * maxRed; + + cout << "b: " << maxBlue << ",r: " << maxRed << ",g: " << maxGreen << "; POWER = " << power << endl; + + + sum += power; + } + + cout << "sum => " << sum; + + return 0; +} \ No newline at end of file