aboutsummaryrefslogtreecommitdiff
path: root/2024/17/day17a.cpp
diff options
context:
space:
mode:
authorSebastiano Tronto <sebastiano@tronto.net>2024-12-17 08:39:11 +0100
committerSebastiano Tronto <sebastiano@tronto.net>2024-12-17 08:39:11 +0100
commita0e775b0a4805a7c1af12c1a956cd9fd74c54b2c (patch)
treeddfc21c0d865d6f871e6ffa0722747ce62077ec0 /2024/17/day17a.cpp
parent5a725f1b9e8cfbad2c31d9c220061e413adbbf8e (diff)
downloadaoc-a0e775b0a4805a7c1af12c1a956cd9fd74c54b2c.tar.gz
aoc-a0e775b0a4805a7c1af12c1a956cd9fd74c54b2c.zip
Day 17 2024 - this was fun
Diffstat (limited to '')
-rw-r--r--2024/17/day17a.cpp82
1 files changed, 82 insertions, 0 deletions
diff --git a/2024/17/day17a.cpp b/2024/17/day17a.cpp
new file mode 100644
index 0000000..27f8aed
--- /dev/null
+++ b/2024/17/day17a.cpp
@@ -0,0 +1,82 @@
1#include <algorithm>
2#include <cstdint>
3#include <iostream>
4#include <map>
5#include <queue>
6#include <ranges>
7#include <set>
8#include <sstream>
9#include <string>
10#include <string_view>
11#include <vector>
12using namespace std;
13
14class CPU {
15public:
16 CPU(uint64_t a, uint64_t b, uint64_t c) : A{a}, B{b}, C{c} {}
17
18 void process(const vector<uint64_t>& v) {
19 for (unsigned ip = 0; ip < v.size(); ) {
20 switch (v[ip]) {
21 case 0:
22 A >>= combo(v[ip+1]);
23 ip += 2;
24 break;
25 case 1:
26 B ^= v[ip+1];
27 ip += 2;
28 break;
29 case 2:
30 B = combo(v[ip+1]) % 8;
31 ip += 2;
32 break;
33 case 3:
34 ip = A == 0 ? ip+2 : v[ip+1];
35 break;
36 case 4:
37 B ^= C;
38 ip += 2;
39 break;
40 case 5:
41 cout << combo(v[ip+1])%8 << ",";
42 ip += 2;
43 break;
44 case 6:
45 B = A >> combo(v[ip+1]);
46 ip += 2;
47 break;
48 case 7:
49 C = A >> combo(v[ip+1]);
50 ip += 2;
51 break;
52 default:
53 cout << "Error! Operator " << v[ip] << endl;
54 exit(1);
55 }
56 }
57 cout << endl;
58 }
59private:
60 uint64_t A, B, C;
61
62 uint64_t& reg(uint64_t i) {
63 return i == 0 ? A : (i == 1 ? B : C);
64 }
65
66 uint64_t combo(uint64_t i) {
67 return i <= 3 ? i : reg(i-4);
68 }
69};
70
71int main() {
72 uint64_t a, b, c;
73 cin >> a >> b >> c;
74 CPU cpu(a, b, c);
75
76 vector<uint64_t> instructions;
77 while (cin >> a)
78 instructions.push_back(a);
79
80 cpu.process(instructions);
81 return 0;
82}

Generated with cgit - Back to sebastiano.tronto.net