aoc

My solutions for the Advent of Code
git clone https://git.tronto.net/aoc
Download | Log | Files | Refs | README

day13b.cpp (1254B)


      1 #include <algorithm>
      2 #include <iostream>
      3 #include <map>
      4 #include <ranges>
      5 #include <set>
      6 #include <sstream>
      7 #include <string>
      8 #include <string_view>
      9 #include <vector>
     10 using namespace std;
     11 
     12 #define N 10000000000000
     13 #define INF 999999
     14 
     15 class Machine {
     16 public:
     17 	pair<int64_t, int64_t> a, b, p;
     18 
     19 	Machine(int64_t a1, int64_t a2,
     20 	    int64_t b1, int64_t b2, int64_t p1, int64_t p2) :
     21 	a(a1, a2), b(b1, b2), p(p1, p2) {}
     22 };
     23 
     24 int64_t det(int64_t a, int64_t b, int64_t c, int64_t d) {
     25 	return a*d - b*c;
     26 }
     27 
     28 pair<int64_t, int64_t> solve_system(const Machine m) {
     29 	auto d = det(m.a.first, m.b.first, m.a.second, m.b.second);
     30 	auto dx = det(m.p.first, m.b.first, m.p.second, m.b.second);
     31 	auto dy = det(m.a.first, m.p.first, m.a.second, m.p.second);
     32 	return make_pair(dx/d, dy/d);
     33 }
     34 
     35 int main() {
     36 	string line;
     37 	int64_t a1, a2, b1, b2, p1, p2;
     38 	vector <Machine> machines;
     39 	while (cin >> a1 >> a2) {
     40 		cin >> b1 >> b2;
     41 		cin >> p1 >> p2;
     42 		getline(cin, line);
     43 		machines.push_back(Machine(a1, a2, b1, b2, p1+N, p2+N));
     44 	}
     45 
     46 	int64_t tot = 0;
     47 	for (auto m : machines) {
     48 		auto [x, y] = solve_system(m);
     49 		if (m.a.first * x + m.b.first * y == m.p.first &&
     50 		    m.a.second * x + m.b.second * y == m.p.second)
     51 			tot += 3*x + y;
     52 	}
     53 
     54 	cout << tot << endl;
     55 
     56 	return 0;
     57 }