diff options
author | Leah Neukirchen <leah@vuxu.org> | 2017-12-09 17:31:59 +0100 |
---|---|---|
committer | Leah Neukirchen <leah@vuxu.org> | 2017-12-09 17:31:59 +0100 |
commit | 103c6bca4d6bd5be61591bedb172b161189072f5 (patch) | |
tree | 54984a2499685a716c2f3ab125bb956b114ab551 /day08.cc | |
parent | 1d15071800b621c219e71858978d4f320cc1b89f (diff) | |
download | adventofcode2017-103c6bca4d6bd5be61591bedb172b161189072f5.tar.gz adventofcode2017-103c6bca4d6bd5be61591bedb172b161189072f5.tar.xz adventofcode2017-103c6bca4d6bd5be61591bedb172b161189072f5.zip |
day08
Diffstat (limited to 'day08.cc')
-rw-r--r-- | day08.cc | 41 |
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; +} |