Advertisement
kompilainenn

Untitled

Mar 26th, 2023
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.63 KB | None | 0 0
  1. #include <iostream>
  2. #include <map>
  3. #include <vector>
  4. #include <algorithm>
  5.  
  6. class Mix
  7. {
  8. public:
  9.     struct all_in_one
  10.     {
  11.         int amount = 0;
  12.         char letter;
  13.         int number_of_string = 0;
  14.     };
  15.  
  16.     static std::string mix(const std::string &s1, const std::string &s2)
  17.     {
  18.         //strings parsing
  19.         std::map<char, int> letters1, letters2;
  20.  
  21.         for (int i = 0; i < 26; ++i)
  22.         {
  23.             letters1.emplace('a' + i, 0);
  24.             letters2.emplace('a' + i, 0);
  25.         }
  26.         for (const auto item : s1)
  27.             if (std::islower(item))
  28.                 letters1[item]++;
  29.  
  30.         for (const auto item : s2)
  31.             if (std::islower(item))
  32.                 letters2[item]++;
  33.  
  34.         //split all data in to one vector
  35.         std::vector<all_in_one> one_string;
  36.  
  37.         for ( char c = 'a'; c <= 'z'; ++c)
  38.         {
  39.             if (letters1[c] > 1 && letters1[c] > letters2[c])
  40.                 one_string.push_back({letters1[c], c , 1});
  41.             if (letters2[c] > 1 && letters1[c] < letters2[c])
  42.                 one_string.push_back({letters2[c], c , 2});
  43.             if (letters2[c] > 1 && letters1[c] == letters2[c])
  44.                 one_string.push_back({letters2[c], c , 3});
  45.         }
  46.  
  47.         //sorting by amount (value) and by char together!!!
  48.         std::sort(one_string.begin(), one_string.end(),
  49.                   [](const all_in_one& first, const all_in_one& second) -> bool
  50.                         {
  51.                             if (first.amount > second.amount)
  52.                                 return true;
  53.                             if (first.amount < second.amount)
  54.                                 return false;
  55.                             if (first.letter == second.letter)
  56.                                 return false;
  57.                             if (first.number_of_string != second.number_of_string)
  58.                                 return first.number_of_string < second.number_of_string;
  59.                             return first.letter < second.letter;
  60.  
  61.                         });
  62.  
  63.         //just print small letters from s1 and s2 strings in one string
  64.         std::string result = "";
  65.         for (const auto& item : one_string)
  66.         {
  67.             std::string str(item.amount, item.letter);
  68.             if (item.number_of_string == 1 or item.number_of_string == 2)
  69.                 result += std::to_string(item.number_of_string) + ":" + str + "/";
  70.             else
  71.             {
  72.                 result += "=:" + str + "/";
  73.             }
  74.         }
  75.         if (result.size() > 0)
  76.             result.pop_back();
  77.         return result;
  78.     };
  79. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement