Guest User

Untitled

a guest
Jun 9th, 2024
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.60 KB | None | 0 0
  1. #include <algorithm>
  2. #include <cmath>
  3. #include <cstdint>
  4. #include <cstdlib>
  5. #include <fstream>
  6. #include <iostream>
  7. #include <numeric>
  8. #include <queue>
  9. #include <ranges>
  10. #include <string>
  11. #include <unordered_map>
  12. #include <vector>
  13.  
  14. std::vector<std::tuple<std::string, std::string, std::uint64_t>> hands;
  15.  
  16. int main() {
  17. std::ifstream file("07.input");
  18. while (1) {
  19. std::string line;
  20. std::getline(file, line);
  21. if (file.eof()) {
  22. break;
  23. }
  24. std::string s = line.substr(0, line.find(' '));
  25. hands.push_back(std::tuple<std::string, std::string, std::uint64_t>(s, s, std::stol(line.substr(line.find(' ')))));
  26. }
  27.  
  28. uint64_t total = 0, n = 0;
  29. std::cout << [&total, &n](auto sorted) { while (!sorted.empty()) { n++; total += n * std::get<2>(sorted.top()); sorted.pop(); } return total; } (std::priority_queue< std::tuple<std::uint64_t, std::vector<std::uint64_t>, std::uint64_t>, std::vector<std::tuple<std::uint64_t, std::vector<std::uint64_t>, std::uint64_t>>, auto (*)(std::tuple<std::uint64_t, std::vector<std::uint64_t>, std::uint64_t>&, std::tuple<std::uint64_t, std::vector<std::uint64_t>, std::uint64_t>&) -> bool> {[](std::tuple<std::uint64_t, std::vector<std::uint64_t>, std::uint64_t>& first, std::tuple<std::uint64_t, std::vector<std::uint64_t>, std::uint64_t>& second) -> bool { return std::get<0>(first) == std::get<0>(second) ? std::accumulate(std::get<1>(first).begin(), std::get<1>(first).end(), static_cast<std::uint64_t>(0), [](std::uint64_t acc, std::uint64_t obj){ return acc * 100 + obj; }) > std::accumulate(std::get<1>(second).begin(), std::get<1>(second).end(), static_cast<std::uint64_t>(0), [](std::uint64_t acc, std::uint64_t obj){ return acc * 100 + obj; }) : std::get<0>(first) > std::get<0>(second); }, hands | std::views::transform([](std::tuple<std::string, std::string, std::uint64_t>& hands) -> std::tuple<std::uint64_t, std::vector<std::uint64_t>, std::uint64_t> { return { /* Tansform the string! */ [](std::vector<std::uint64_t> vec)-> std::uint64_t { return std::accumulate(vec.begin(), vec.end(), static_cast<std::uint64_t>(0)); }(std::get<0>(hands) | std::views::transform([&hands](char c) -> std::uint64_t { return std::count(std::get<0>(hands).begin(), std::get<0>(hands).end(), c); }) | std::ranges::to<std::vector>()), std::get<1>(hands) | std::views::transform([valueMap = std::unordered_map<char, char>{{'T', 10}, {'J', 11}, {'Q', 12}, {'K', 13}, {'A', 14}}](char character) -> std::uint64_t { return valueMap.contains(character) ? valueMap.at(character) : character - '1'; }) | std::ranges::to<std::vector>(), std::get<2>(hands)};}) | std::ranges::to<std::vector>()});
  30.  
  31. return 0;
  32. }
  33.  
  34.  
Advertisement
Add Comment
Please, Sign In to add comment