2023 day 8

This commit is contained in:
eriedaberrie 2023-12-07 21:31:28 -08:00
parent 985b91b61c
commit 7b493f2420
2 changed files with 83 additions and 0 deletions

29
2023/8/main-1.cpp Normal file
View 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
View 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';
}