From d54d498f388c7f55ca870b9704507a5912754f31 Mon Sep 17 00:00:00 2001 From: Thomas Schmucker Date: Sat, 2 Dec 2023 18:22:37 +0100 Subject: Lösung für Tag2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/day02.cpp | 100 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 src/day02.cpp (limited to 'src/day02.cpp') diff --git a/src/day02.cpp b/src/day02.cpp new file mode 100644 index 0000000..df560c3 --- /dev/null +++ b/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