From cb7e2936a50f8f8fa24626af0d1c665518f6285d Mon Sep 17 00:00:00 2001 From: eriedaberrie Date: Mon, 4 Dec 2023 22:21:01 -0800 Subject: [PATCH] 2023 day 5 I did not have fun These problems were very unenjoyable imo (skill issue probably) --- 2023/5/main-1.cpp | 43 ++++++++++++++++++++++++++++ 2023/5/main-2.cpp | 72 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 115 insertions(+) create mode 100644 2023/5/main-1.cpp create mode 100644 2023/5/main-2.cpp diff --git a/2023/5/main-1.cpp b/2023/5/main-1.cpp new file mode 100644 index 0000000..ba6c512 --- /dev/null +++ b/2023/5/main-1.cpp @@ -0,0 +1,43 @@ +#include +using namespace std; + +int main() { + ios::sync_with_stdio(0); + cin.tie(0); + + cin.ignore(6); + string line; + getline(cin, line); + istringstream sls(line); + vector seeds; + vector done; + while (!sls.eof()) { + long n; + sls >> n; + seeds.push_back(n); + done.push_back(false); + } + cin.ignore(1); + + for (int mapn = 0; mapn < 7; mapn++) { + cin.ignore(500, '\n'); + for (;;) { + getline(cin, line); + if (line.empty() || cin.eof()) { + break; + } + istringstream sls(line); + long d, s, r; + sls >> d >> s >> r; + for (int i = 0; i < seeds.size(); i++) { + if (!done[i] && seeds[i] >= s && seeds[i] < s + r) { + seeds[i] += d - s; + done[i] = true; + } + } + } + fill(done.begin(), done.end(), false); + } + + cout << *min_element(seeds.begin(), seeds.end()) << endl; +} diff --git a/2023/5/main-2.cpp b/2023/5/main-2.cpp new file mode 100644 index 0000000..1e405d2 --- /dev/null +++ b/2023/5/main-2.cpp @@ -0,0 +1,72 @@ +#include +using namespace std; + +int main() { + ios::sync_with_stdio(0); + cin.tie(0); + + cin.ignore(6); + string line; + getline(cin, line); + istringstream sls(line); + vector> seeds; + vector done; + while (!sls.eof()) { + long n, nn; + sls >> n >> nn; + seeds.push_back(make_pair(n, n + nn - 1)); + done.push_back(false); + } + cin.ignore(1); + + for (int mapn = 0; mapn < 7; mapn++) { + cin.ignore(500, '\n'); + for (;;) { + getline(cin, line); + if (line.empty() || cin.eof()) { + break; + } + istringstream sls(line); + long d, s, r; + sls >> d >> s >> r; + int ssize = seeds.size(); + for (int i = 0; i < ssize; i++) { + if (done[i]) + continue; + auto& curr = seeds[i]; + long *curs = &get<0>(curr), *cure = &get<1>(curr); + if (*curs >= s) { + if (*cure < s + r) { + *curs += d - s; + *cure += d - s; + done[i] = true; + } else if (*curs < s + r) { + seeds.push_back(make_pair(*curs + d - s, d + r - 1)); + done.push_back(true); + *curs = s + r; + } + } else { + if (*cure > s + r) { + seeds.push_back(make_pair(d, d + r - 1)); + done.push_back(true); + seeds.push_back(make_pair(s + r, *cure)); + done.push_back(false); + *cure = s - 1; + } else if (*cure > s) { + seeds.push_back(make_pair(d, *cure + d -s)); + done.push_back(true); + *cure = s - 1; + } + } + } + } + fill(done.begin(), done.end(), false); + } + + int min = INT_MAX; + for (auto& r : seeds) { + if (get<0>(r) < min) + min = get<0>(r); + } + cout << min << endl; +}