2023 day 8
This commit is contained in:
parent
97e2498f48
commit
6e95a83496
29
2023/8/main-1.cpp
Normal file
29
2023/8/main-1.cpp
Normal file
|
@ -0,0 +1,29 @@
|
|||
#include <bits/stdc++.h>
|
||||
using namespace std;
|
||||
|
||||
int main(void) {
|
||||
ios::sync_with_stdio(0);
|
||||
cin.tie(0);
|
||||
|
||||
string instructions;
|
||||
getline(cin, instructions);
|
||||
cin.ignore(1);
|
||||
|
||||
unordered_map<string, pair<string, string>> locs;
|
||||
|
||||
string line;
|
||||
while (getline(cin, line)) {
|
||||
locs[line.substr(0, 3)] = make_pair(line.substr(7, 3), line.substr(12, 3));
|
||||
}
|
||||
|
||||
string current = "AAA";
|
||||
int i = 0;
|
||||
while (current != "ZZZ") {
|
||||
if (instructions[i++ % instructions.length()] == 'L')
|
||||
current = locs[current].first;
|
||||
else
|
||||
current = locs[current].second;
|
||||
}
|
||||
|
||||
cout << i << '\n';
|
||||
}
|
54
2023/8/main-2.cpp
Normal file
54
2023/8/main-2.cpp
Normal file
|
@ -0,0 +1,54 @@
|
|||
#include <bits/stdc++.h>
|
||||
using namespace std;
|
||||
|
||||
int main(void) {
|
||||
ios::sync_with_stdio(0);
|
||||
cin.tie(0);
|
||||
|
||||
string instructions;
|
||||
getline(cin, instructions);
|
||||
cin.ignore(1);
|
||||
|
||||
unordered_map<string, pair<string, string>> locs;
|
||||
|
||||
string line;
|
||||
while (getline(cin, line)) {
|
||||
locs[line.substr(0, 3)] = make_pair(line.substr(7, 3), line.substr(12, 3));
|
||||
}
|
||||
|
||||
vector<string> starts;
|
||||
|
||||
for (auto& loc : locs) {
|
||||
if (loc.first[2] == 'A')
|
||||
starts.push_back(loc.first);
|
||||
}
|
||||
|
||||
unsigned long amounts[starts.size()];
|
||||
memset(amounts, 0, starts.size() * sizeof(unsigned long));
|
||||
|
||||
long n = 0;
|
||||
unsigned int done = starts.size();
|
||||
while (done > 0) {
|
||||
for (unsigned int i = 0; i < starts.size(); i++) {
|
||||
if (amounts[i] != 0)
|
||||
continue;
|
||||
|
||||
if (instructions[n % instructions.length()] == 'L')
|
||||
starts[i] = locs[starts[i]].first;
|
||||
else
|
||||
starts[i] = locs[starts[i]].second;
|
||||
if (starts[i][2] == 'Z') {
|
||||
amounts[i] = n + 1;
|
||||
done--;
|
||||
}
|
||||
}
|
||||
n++;
|
||||
}
|
||||
|
||||
unsigned long val = amounts[0];
|
||||
for (unsigned int i = 1; i < starts.size(); i++) {
|
||||
val = lcm(val, amounts[i]);
|
||||
}
|
||||
|
||||
cout << val << '\n';
|
||||
}
|
Loading…
Reference in a new issue