#include #include #include using namespace std; // Advent of Code, Day 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) { int id = game.first; vector bag = game.second; bool possible = true; for (auto set: bag) { cout << "b: " << set.blue << ",r: " << set.red << ",g: " << set.green << "; - "; if (set.red > 12) possible = false; if (set.green > 13) possible = false; if (set.blue > 14) possible = false; } cout << "game " << id << " is " << possible < " << sum; return 0; }