From 56e890cec0a28c0a485212ccebfaf774235a79a2 Mon Sep 17 00:00:00 2001 From: Thomas Schmucker Date: Wed, 3 Jan 2024 23:35:54 +0100 Subject: prepare for more puzzles ... :) --- 2023/src/day02.cpp | 100 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 2023/src/day02.cpp (limited to '2023/src/day02.cpp') diff --git a/2023/src/day02.cpp b/2023/src/day02.cpp new file mode 100644 index 0000000..aa3d5a2 --- /dev/null +++ b/2023/src/day02.cpp @@ -0,0 +1,100 @@ +#include +#include +#include +#include +#include +#include +#include +#include +using namespace std; + +vector +split(const string& line, char sep) +{ + vector parts; + stringstream input{ line }; + + for ( string part; getline(input, part, sep); ) { + parts.emplace_back(part); + } + + return parts; +} + +void +part1() +{ + fstream input{ "data/day02.txt" }; + + auto sum = 0; + for ( string line; getline(input, line); ) { + auto game = split(line, ':'); + + auto gameId = 0; + sscanf(game[0].data(), "Game %d", &gameId); // NOLINT + + auto subsets = split(game[1], ';'); + + auto fail = false; + + for ( const auto& subset: subsets ) { + auto cubes = split(subset, ','); + + map counts{}; + + for ( const auto& cube: cubes ) { + auto data = split(cube, ' '); + + auto count = stoi(data[1]); + auto color = data[2]; + + counts[color] += count; + } + + fail |= (counts["red"] > 12) || (counts["green"] > 13) || (counts["blue"] > 14); // NOLINT + } + + if ( !fail ) { + sum += gameId; + } + } + cout << sum << endl; +} + +void +part2() +{ + fstream input{ "data/day02.txt" }; + + auto sum = 0; + + for ( string line; getline(input, line); ) { + auto game = split(line, ':'); + + auto subsets = split(game[1], ';'); + + map colors{}; + + for ( const auto& subset: subsets ) { + auto cubes = split(subset, ','); + + for ( const auto& cube: cubes ) { + auto data = split(cube, ' '); + + auto count = stoi(data[1]); + auto color = data[2]; + + colors[color] = max(colors[color], count); + } + } + sum += colors["red"] * colors["green"] * colors["blue"]; + } + cout << sum << endl; +} + +int +main() +{ + part1(); + part2(); +} -- cgit v1.3