ItsTotallyRSX

Anagrams for CreaTed

Mar 10th, 2020
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.83 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <unordered_map>
  4. #include <algorithm>
  5. #include <map>
  6. #include <string>
  7.  
  8. using WordChars_t = std::unordered_map<char, uint8_t>;
  9.  
  10. static WordChars_t parse_word(const std::string &in)
  11. {
  12.     WordChars_t ret;
  13.     std::string word;
  14.  
  15.     word.resize(in.size());
  16.     std::transform(in.begin(), in.end(), word.begin(), [] (const char &c)
  17.                    {
  18.                        return std::tolower(c);
  19.                    });
  20.  
  21.     for (size_t i = 0; i < 26; i++)
  22.     {
  23.         size_t count = 0;
  24.         char current = 'a' + i;
  25.  
  26.         for (const char c : word)
  27.         {
  28.             if (current == c)
  29.             {
  30.                 count++;
  31.             }
  32.         }
  33.  
  34.         ret[current] = count;
  35.     }
  36.  
  37.     return ret;
  38. }
  39.  
  40. static bool find_anagrams(const std::vector<std::string> & dictionary, const std::string & word, std::vector<std::string> & anagrams)
  41. {
  42.     auto parsedWord = parse_word(word);
  43.  
  44.     for (const auto &testPhrase : dictionary)
  45.     {
  46.         if (parsedWord != parse_word(testPhrase))
  47.             continue;
  48.  
  49.         anagrams.push_back(testPhrase);
  50.     }
  51.  
  52.     return anagrams.size() != 0;
  53. }
  54.  
  55. int main()
  56. {
  57.     std::vector<std::string> testPhrase = {"School master", "black", "cat", "Astronomer", "Dormitory"};
  58.     std::vector<std::string> search = {"Dirty room", "Moon starer", "The classroom"};
  59.  
  60.     for (const auto &in : search)
  61.     {
  62.         std::cout << in << std::endl;
  63.  
  64.         std::vector<std::string> anagrams;
  65.  
  66.         if (find_anagrams(testPhrase, in, anagrams))
  67.         {
  68.             for (const auto &fml : anagrams)
  69.             {
  70.                 std::cout << "\t" << fml << std::endl;
  71.             }
  72.         }
  73.         else
  74.         {
  75.             std::cout << "\tno anagrams found" << std::endl;
  76.         }
  77.  
  78.     }
  79.  
  80.     __debugbreak();
  81. }
Add Comment
Please, Sign In to add comment