From 9057173ca5878fac523c769e105d64e1aa614531 Mon Sep 17 00:00:00 2001 From: eriedaberrie Date: Mon, 4 Dec 2023 11:46:32 -0800 Subject: [PATCH] 2023 day 4: remove goto and replace vector with set Due to popular demand --- 2023/4/main-1.cpp | 17 ++++++++--------- 2023/4/main-2.cpp | 41 ++++++++++++++++++----------------------- 2 files changed, 26 insertions(+), 32 deletions(-) diff --git a/2023/4/main-1.cpp b/2023/4/main-1.cpp index 246ae46..7e09906 100644 --- a/2023/4/main-1.cpp +++ b/2023/4/main-1.cpp @@ -15,18 +15,17 @@ int main() { string left = line.substr(start + 2, bar - start - 3); string right = line.substr(bar + 2); istringstream lss(left), rss(right); - vector rv; - while (!rss.eof()) { - int n; - rss >> n; - rv.push_back(n); - } + set ls; while (!lss.eof()) { int n; lss >> n; - for (auto no : rv) { - if (no == n) - count <<= 1; + ls.insert(n); + } + while (!rss.eof()) { + int n; + rss >> n; + if (ls.find(n) != ls.end()) { + count <<= 1; } } ret += count >> 1; diff --git a/2023/4/main-2.cpp b/2023/4/main-2.cpp index 9d35fc8..9dc19a1 100644 --- a/2023/4/main-2.cpp +++ b/2023/4/main-2.cpp @@ -5,45 +5,40 @@ int main() { ios::sync_with_stdio(0); cin.tie(0); - int ret = 0; - vector> lefts, rights; - vector copies; + vector counts, copies; string line; while (getline(cin, line) && !line.empty()) { - copies.push_back(1); int start = line.find(':'); int bar = line.find('|'); string left = line.substr(start + 2, bar - start - 3); string right = line.substr(bar + 2); istringstream lss(left), rss(right); - vector rv, lv; - while (!rss.eof()) { - int n; - rss >> n; - rv.push_back(n); - } - rights.push_back(rv); + set ls; + int count = 0; while (!lss.eof()) { int n; lss >> n; - lv.push_back(n); + ls.insert(n); } - lefts.push_back(lv); + while (!rss.eof()) { + int n; + rss >> n; + if (ls.find(n) != ls.end()) + count++; + } + counts.push_back(count); + copies.push_back(1); } - for (int cn = 0; cn < copies.size(); cn++) { + int ret = 0; + for (int cn = 0; cn < counts.size(); cn++) { ret += copies[cn]; int n = cn; - for (int ln : lefts[cn]) { - for (int rn : rights[cn]) { - if (ln == rn) { - if (++n == copies.size()) - goto end; - copies[n] += copies[cn]; - } - } + for (int i = 0; i < counts[cn]; i++) { + if (++n == copies.size()) + break; + copies[n] += copies[cn]; } - end:; } cout << ret << '\n'; }