advent-of-code/2024/14/main-2.cpp

74 lines
1.3 KiB
C++
Raw Normal View History

2024-12-13 21:46:14 -08:00
#include <bits/stdc++.h>
using namespace std;
const int mx = 101;
const int my = 103;
int main(int argc, char *argv[]) {
ios::sync_with_stdio(0);
ifstream fin(argc > 0 ? argv[1] : "data.txt");
// NOTE: 14 and 101 for my dataset
int start = argc >= 3 ? atoi(argv[2]) : 0;
int step = argc >= 3 ? atoi(argv[3]) : 1;
vector<pair<pair<int, int>, pair<int, int>>> robots;
string line;
while (getline(fin, line) && !line.empty()) {
istringstream l(line);
l.ignore(2);
int px, py, vx, vy;
l >> px;
l.ignore(1);
l >> py;
l.ignore(3);
l >> vx;
l.ignore(1);
l >> vy;
if (vx < 0) {
vx += mx;
}
if (vy < 0) {
vy += my;
}
robots.push_back({{px, py}, {vx, vy}});
}
char m[my][mx];
int n = start;
for (auto &[p, v] : robots) {
auto &[px, py] = p;
auto &[vx, vy] = v;
for (int i = 0; i < start; i++) {
px = (px + vx) % mx;
py = (py + vy) % my;
}
}
for (;;) {
memset(m, ' ', mx * my);
for (auto &[p, v] : robots) {
auto &[px, py] = p;
auto &[vx, vy] = v;
m[py][px] = '*';
for (int i = 0; i < step; i++) {
px = (px + vx) % mx;
py = (py + vy) % my;
}
}
for (int y = 0; y < my; y++) {
for (int x = 0; x < mx; x++) {
cout << m[y][x];
}
cout << '\n';
}
cout << n << '\n';
n += step;
cin.ignore();
}
}