From 8c96639ec1f6757570510fc27f1c5fabece35eaf Mon Sep 17 00:00:00 2001 From: Thomas Schmucker Date: Sun, 16 Nov 2025 13:23:34 +0100 Subject: aoc 2018, days 1-11 --- 2018/src/day03.cpp | 95 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 2018/src/day03.cpp (limited to '2018/src/day03.cpp') diff --git a/2018/src/day03.cpp b/2018/src/day03.cpp new file mode 100644 index 0000000..bed3acb --- /dev/null +++ b/2018/src/day03.cpp @@ -0,0 +1,95 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace std; + +namespace { + +struct Claim { + int id; + int left; + int top; + int width; + int height; +}; + +#if 0 +ostream& +operator<<(ostream& ostrm, const Claim& claim) +{ + ostrm << "id: " << claim.id + << " (" << claim.left << ", " << claim.top << ": " << claim.width << "x" << claim.height; + return ostrm; +} +#endif + +vector +read_file(const filesystem::path& filename) +{ + ifstream file{ filename }; + vector claims; + + regex pattern(R"#((\d+) @ (\d+),(\d+): (\d+)x(\d+))#"); + smatch match; + + for ( string line; getline(file, line); ) { + if ( !regex_search(line, match, pattern) ) { + continue; + } + + Claim claim{}; + claim.id = stoi(match[1]); + claim.left = stoi(match[2]); + claim.top = stoi(match[3]); + claim.width = stoi(match[4]); + claim.height = stoi(match[5]); + + claims.emplace_back(claim); + } + + return claims; +} + +void +solve(const vector& claims) +{ + map, vector> fabric; + set allIds; + + for ( const auto& claim: claims ) { + for ( int x = claim.left; x < claim.left + claim.width; ++x ) { + for ( int y = claim.top; y < claim.top + claim.height; ++y ) { + fabric[{ x, y }].emplace_back(claim.id); + } + } + allIds.emplace(claim.id); + } + + int overlapCount = 0; + for ( const auto& [pos, ids]: fabric ) { + if ( ids.size() > 1 ) { + ++overlapCount; + for ( const auto& id: ids ) { + allIds.erase(id); + } + } + } + + cout << "Part 1: " << overlapCount << '\n'; + cout << "Part 2: " << *allIds.begin() << '\n'; +} + +} // namespace + +int +main() +{ + auto claims = read_file("data/day03.txt"); + solve(claims); +} -- cgit v1.3