2023 day 4: remove goto and replace vector with set
Due to popular demand
This commit is contained in:
parent
40024cef5b
commit
9057173ca5
|
@ -15,18 +15,17 @@ int main() {
|
||||||
string left = line.substr(start + 2, bar - start - 3);
|
string left = line.substr(start + 2, bar - start - 3);
|
||||||
string right = line.substr(bar + 2);
|
string right = line.substr(bar + 2);
|
||||||
istringstream lss(left), rss(right);
|
istringstream lss(left), rss(right);
|
||||||
vector<int> rv;
|
set<int> ls;
|
||||||
while (!rss.eof()) {
|
|
||||||
int n;
|
|
||||||
rss >> n;
|
|
||||||
rv.push_back(n);
|
|
||||||
}
|
|
||||||
while (!lss.eof()) {
|
while (!lss.eof()) {
|
||||||
int n;
|
int n;
|
||||||
lss >> n;
|
lss >> n;
|
||||||
for (auto no : rv) {
|
ls.insert(n);
|
||||||
if (no == n)
|
}
|
||||||
count <<= 1;
|
while (!rss.eof()) {
|
||||||
|
int n;
|
||||||
|
rss >> n;
|
||||||
|
if (ls.find(n) != ls.end()) {
|
||||||
|
count <<= 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ret += count >> 1;
|
ret += count >> 1;
|
||||||
|
|
|
@ -5,45 +5,40 @@ int main() {
|
||||||
ios::sync_with_stdio(0);
|
ios::sync_with_stdio(0);
|
||||||
cin.tie(0);
|
cin.tie(0);
|
||||||
|
|
||||||
int ret = 0;
|
vector<int> counts, copies;
|
||||||
vector<vector<int>> lefts, rights;
|
|
||||||
vector<int> copies;
|
|
||||||
|
|
||||||
string line;
|
string line;
|
||||||
while (getline(cin, line) && !line.empty()) {
|
while (getline(cin, line) && !line.empty()) {
|
||||||
copies.push_back(1);
|
|
||||||
int start = line.find(':');
|
int start = line.find(':');
|
||||||
int bar = line.find('|');
|
int bar = line.find('|');
|
||||||
string left = line.substr(start + 2, bar - start - 3);
|
string left = line.substr(start + 2, bar - start - 3);
|
||||||
string right = line.substr(bar + 2);
|
string right = line.substr(bar + 2);
|
||||||
istringstream lss(left), rss(right);
|
istringstream lss(left), rss(right);
|
||||||
vector<int> rv, lv;
|
set<int> ls;
|
||||||
while (!rss.eof()) {
|
int count = 0;
|
||||||
int n;
|
|
||||||
rss >> n;
|
|
||||||
rv.push_back(n);
|
|
||||||
}
|
|
||||||
rights.push_back(rv);
|
|
||||||
while (!lss.eof()) {
|
while (!lss.eof()) {
|
||||||
int n;
|
int n;
|
||||||
lss >> 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];
|
ret += copies[cn];
|
||||||
int n = cn;
|
int n = cn;
|
||||||
for (int ln : lefts[cn]) {
|
for (int i = 0; i < counts[cn]; i++) {
|
||||||
for (int rn : rights[cn]) {
|
if (++n == copies.size())
|
||||||
if (ln == rn) {
|
break;
|
||||||
if (++n == copies.size())
|
copies[n] += copies[cn];
|
||||||
goto end;
|
|
||||||
copies[n] += copies[cn];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
end:;
|
|
||||||
}
|
}
|
||||||
cout << ret << '\n';
|
cout << ret << '\n';
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue