From c3c5068e625aaf1b3816acee136e8976f380503e Mon Sep 17 00:00:00 2001 From: eriedaberrie Date: Wed, 6 Dec 2023 22:30:37 -0800 Subject: [PATCH] 2023 day 7 Pain --- 2023/7/main-1.cpp | 67 +++++++++++++++++++++++++++++++++++++++ 2023/7/main-2.cpp | 81 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 148 insertions(+) create mode 100644 2023/7/main-1.cpp create mode 100644 2023/7/main-2.cpp diff --git a/2023/7/main-1.cpp b/2023/7/main-1.cpp new file mode 100644 index 0000000..2460cc7 --- /dev/null +++ b/2023/7/main-1.cpp @@ -0,0 +1,67 @@ +#include +using namespace std; + +const string order = "AKQJT98765432"; + +inline int getval(string s) { + sort(s.begin(), s.end()); + if (s[0] == s[4]) + return 1; + if (s[0] == s[3] || s[1] == s[4]) + return 2; + if ((s[0] == s[2] && s[3] == s[4]) || (s[0] == s[1] && s[2] == s[4])) + return 3; + if (s[0] == s[2] || s[1] == s[3] || s[2] == s[4]) + return 4; + if (s[0] == s[1] && (s[2] == s[3] || s[3] == s[4]) + || s[1] == s[2] && s[3] == s[4]) + return 5; + if (s[0] == s[1] || s[1] == s[2] || s[2] == s[3] || s[3] == s[4]) + return 6; + return 7; +} + +inline int geti(char c) { + return find(order.begin(), order.end(), c) - order.begin(); +} + +bool comp(pair& a, pair& b) { + string aa = a.first, bb = b.first; + int av = getval(aa), bv = getval(bb); + if (av > bv) + return true; + if (av < bv) + return false; + for (int i = 0; i < 5; i++) { + int ai = geti(aa[i]), bi = geti(bb[i]); + if (ai > bi) + return true; + if (ai < bi) { + return false; + } + } + return false; +} + +int main() { + ios::sync_with_stdio(0); + cin.tie(0); + + vector> hands; + + string line; + while (getline(cin, line)) { + istringstream ss(line); + string h; + int bid; + ss >> h >> bid; + hands.push_back(make_pair(h, bid)); + } + + sort(hands.begin(), hands.end(), comp); + int ret = 0; + for (int i = 0; i < hands.size(); i++) { + ret += hands[i].second * (i + 1); + } + cout << ret << '\n'; +} diff --git a/2023/7/main-2.cpp b/2023/7/main-2.cpp new file mode 100644 index 0000000..71c1573 --- /dev/null +++ b/2023/7/main-2.cpp @@ -0,0 +1,81 @@ +#include +using namespace std; + +const string order = "AKQT98765432J"; + +inline int getval(string s) { + sort(s.begin(), s.end()); + vector groups; + char last = '\0'; + int nj = 0; + for (char c : s) { + if (c == 'J') { + nj++; + continue; + } + if (c != last) { + groups.push_back(1); + last = c; + } else { + groups.back()++; + } + } + switch (groups.size()) { + case 0: + case 1: + return 1; + case 2: + return (min(groups[0], groups[1]) == 1) ? 2 : 3; + case 3: + return (max(groups[0], max(groups[1], groups[2])) + nj == 3) ? 4 : 5; + case 4: + return 6; + default: + return 7; + } +} + +inline int geti(char c) { + return find(order.begin(), order.end(), c) - order.begin(); +} + +bool comp(pair& a, pair& b) { + string aa = a.first, bb = b.first; + int av = getval(aa), bv = getval(bb); + if (av > bv) + return true; + if (av < bv) + return false; + for (int i = 0; i < 5; i++) { + int ai = geti(aa[i]), bi = geti(bb[i]); + if (ai > bi) + return true; + if (ai < bi) { + return false; + } + } + return false; +} + +int main() { + ios::sync_with_stdio(0); + cin.tie(0); + + vector> hands; + + string line; + while (getline(cin, line)) { + istringstream ss(line); + string h; + int bid; + ss >> h >> bid; + hands.push_back(make_pair(h, bid)); + } + + sort(hands.begin(), hands.end(), comp); + int ret = 0; + for (int i = 0; i < hands.size(); i++) { + ret += hands[i].second * (i + 1); + } + cout << ret << '\n'; +}