diff --git a/day 14/day_14_max_n.cpp b/day 14/day_14_max_n.cpp new file mode 100644 index 0000000000000000000000000000000000000000..abc4f51f8890134a99e963857b4f5890bf600d8e --- /dev/null +++ b/day 14/day_14_max_n.cpp @@ -0,0 +1,139 @@ +#include <bits/stdc++.h> +#ifdef LOCAL +#include "./cpp-dump/cpp-dump.hpp" +#define pr(x) cpp_dump(x) +#endif +using namespace std; + +#define Mod(x,y) (((x)%(y)+(y))%(y)) +#define rep(i, a, b) for(ll (i) = (a); (i) < (b); ++(i)) +#define all(x) begin(x), end(x) +#define pb push_back +#define gcd __gcd +#define sz(x) (ll)(x.size()) + +typedef long long ll; +typedef unsigned long long ull; +typedef pair<ll, ll> pii; +typedef vector<ll> vi; +typedef vector<pii> vii; + +const bool debug = false; + +map<int, pii> pos; +map<int, pii> mp; + +ll m = 101; // wide +ll n = 103; // tall + +void move() { + map<int, pii> pos2; + for (auto p : pos) { + int id = p.first; + pii q = p.second; + pii vs = mp[id]; + q.first = Mod(q.first+vs.first, m); + q.second = Mod(q.second+vs.second, n); + + pos2[id] = q; + } + pos = pos2; +} + +void print() { + set<pii> exists; + for (auto p : pos) exists.insert(p.second); + rep(j, 0, n) { + rep(i, 0, m) { + if (exists.count(pii(i, j))) cout << '#'; + else cout << '.'; + } + cout << '\n'; + } +} + +vi get_quadrants() { + ll ans11 = 0; + ll ans12 = 0; + ll ans21 = 0; + ll ans22 = 0; + + for (auto p : pos) { + ll x = p.second.first; + ll y = p.second.second; + + if (x >= 0 && x < (m-1)/2) { + if (y >= 0 && y < (n-1)/2) ans11++; + else if (y > (n-1)/2) ans12++; + } + + if (x >= 0 && x > (m-1)/2) { + if (y >= 0 && y < (n-1)/2) ans21++; + else if (y > (n-1)/2) ans22++; + } + } + + return {ans11, ans12, ans21, ans22}; +} + +bool find_long_row() { + set<pii> exists; + for (auto p : pos) exists.insert(p.second); + + int row = 10; + + rep(j, 0, n){ + rep(i, 0, m) { + bool ok = true; + rep(dj, 0, row) { + if (!exists.count(pii(i, j+dj))) { + ok = false; + break; + } + } + if (ok) return true; + } + } + return false; +} + +void solve() { + ll x, y, vx, vy; + int i = 0; + while(cin >> x >> y >> vx >> vy) { + pos[i] = pii(x, y); + mp[i] = pii(vx, vy); + i++; + } + + bool PART1 = false; + + ll iter = LLONG_MAX; + if (PART1) iter = 100; + + rep(i, 0, iter) { + move(); + vi ans = get_quadrants(); + if (!PART1 && find_long_row()) { + print(); + cout << i+1 << '\n'; + break; + } + } + + if (PART1) { + vi ans = get_quadrants(); + cout << ans[0]*ans[1]*ans[2]*ans[3] << '\n'; + } +} + +int main() { + ios::sync_with_stdio(0);cin.tie(0); + cout << setprecision(15) << fixed; + +#ifdef LOCAL + freopen("input.txt", "r", stdin); +#endif + + solve(); +}