From 8f688120afe73ec3b25d31294b5886f5651bde2e Mon Sep 17 00:00:00 2001 From: Leah Neukirchen Date: Mon, 25 Dec 2017 13:29:16 +0100 Subject: day23 --- day23.cc | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 day23.cc (limited to 'day23.cc') diff --git a/day23.cc b/day23.cc new file mode 100644 index 0000000..ae9b3e6 --- /dev/null +++ b/day23.cc @@ -0,0 +1,52 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace std; + +int +main() { + vector code; + for (string line; getline(cin, line); ) + code.push_back(line); + + array reg{ 0 }; + + long p1 = 0, p2 = 0; + + for (auto ip = begin(code); ip != end(code); ip++) { + auto is_op = [&](string p) { + return equal(begin(p), end(p), begin(*ip)); + }; + + long tmp; + auto r = [&](int i) -> long& { + if (islower((*ip)[i])) + return reg[uint8_t((*ip)[i])]; + else { + tmp = stol(&(*ip)[i]); + return tmp; + } + }; + + if (is_op("set")) r(4) = r(6); + if (is_op("sub")) r(4) -= r(6); + if (is_op("mul")) r(4) *= r(6), p1++; + if (is_op("jnz") && r(4)) advance(ip, r(6) - 1); + } + + int c = 100'000 + 100 * stol(&code[0][6]); + for (int x = c; x <= c + 17'000; x += 17) + for (int i = 2; i < x; i++) + if (x % i == 0) { + p2++; + break; + } + + cout << p1 << endl << p2 << endl; // 8281 911 +} -- cgit 1.4.1