about summary refs log tree commit diff
path: root/day08.cc
diff options
context:
space:
mode:
authorLeah Neukirchen <leah@vuxu.org>2017-12-09 17:31:59 +0100
committerLeah Neukirchen <leah@vuxu.org>2017-12-09 17:31:59 +0100
commit103c6bca4d6bd5be61591bedb172b161189072f5 (patch)
tree54984a2499685a716c2f3ab125bb956b114ab551 /day08.cc
parent1d15071800b621c219e71858978d4f320cc1b89f (diff)
downloadadventofcode2017-103c6bca4d6bd5be61591bedb172b161189072f5.tar.gz
adventofcode2017-103c6bca4d6bd5be61591bedb172b161189072f5.tar.xz
adventofcode2017-103c6bca4d6bd5be61591bedb172b161189072f5.zip
day08
Diffstat (limited to 'day08.cc')
-rw-r--r--day08.cc41
1 files changed, 41 insertions, 0 deletions
diff --git a/day08.cc b/day08.cc
new file mode 100644
index 0000000..6b6f569
--- /dev/null
+++ b/day08.cc
@@ -0,0 +1,41 @@
+#include <algorithm>
+#include <iostream>
+#include <iterator>
+#include <sstream>
+#include <string>
+#include <map>
+
+using namespace std;
+
+const map<string,bool(*)(int,int)> cmps {{
+	{"<",  [](int x, int y) { return x <  y; }},
+	{">",  [](int x, int y) { return x >  y; }},
+	{"<=", [](int x, int y) { return x <= y; }},
+	{">=", [](int x, int y) { return x >= y; }},
+	{"==", [](int x, int y) { return x == y; }},
+	{"!=", [](int x, int y) { return x != y; }},
+}};
+
+const map<string,int(*)(int&,int)> actions {{
+	{"inc", [](int &x, int y) { return x += y; }},
+	{"dec", [](int &x, int y) { return x -= y; }},
+}};
+
+int
+main()
+{
+	map<string,int> reg;
+	int maxval = 0;
+
+	string name, action, _, v1, cmp;
+	int k1, k2;
+	
+	while (cin >> name >> action >> k1 >> _ >> v1 >> cmp >> k2)
+		if (cmps.at(cmp)(reg[v1], k2))
+			maxval = max(maxval, actions.at(action)(reg[name], k1));
+
+	auto maxreg = max_element(reg.begin(), reg.end(),
+	    [](auto &p1, auto &p2) { return p1.second < p2.second; });
+
+	cout << maxreg->second << endl << maxval << endl;
+}