Advertisement
CSenshi

HR - cw solution

Jul 9th, 2019
372
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.70 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5.  
  6. bool rec(vector<string> &cw, vector<string>vec) {        
  7.     if (!vec.size()) return true;
  8.  
  9.     string word = vec[vec.size()-1];
  10.     vec.pop_back();  
  11.  
  12.     vector<vector<int>> cw_vec;
  13.     for (int row = 0; row < cw.size(); row++)
  14.         for (int j = word.length(); j < cw[0].length() + 1; j++) {
  15.             int k = 0;
  16.             while (k < word.length() && (cw[row][j - word.length() + k] == '-' || cw[row][j - word.length() + k] == word[k]))
  17.                 k++;
  18.            
  19.             if (k == word.length())
  20.                 cw_vec.push_back({0, row, j - word.length()});
  21.         }
  22.    
  23.  
  24.     for (int col = 0; col < cw[0].length(); col++)
  25.         for (int i =  word.length(); i  < cw.size() + 1; i++) {
  26.             int k = 0;
  27.             while (k < word.length() && (cw[i -  word.length() + k][col] == '-' || cw[i -  word.length() + k][col] == word[k]) )
  28.                 k++;
  29.            
  30.             if (k == word.length())
  31.                 cw_vec.push_back({1, (i -  word.length()), col});
  32.         }
  33.    
  34.     for(int i = 0; i < cw_vec.size(); i++){
  35.        
  36.         if (cw_vec[i][0] == 0)
  37.             for (int k = 0; k < word.length(); ++k)
  38.                 cw[cw_vec[i][1]][cw_vec[i][2] + k] = word[k];
  39.         else
  40.             for (int k = 0; k < word.length(); ++k)
  41.                 cw[cw_vec[i][1] + k][cw_vec[i][2]] = word[k];
  42.        
  43.         if(rec(cw, vec)){
  44.             vec.push_back(word);
  45.             return true;
  46.         }
  47.  
  48.         if (cw_vec[i][0] == 0)
  49.             for (int k = 0; k < word.length(); ++k)
  50.                 cw[cw_vec[i][1]][cw_vec[i][2] + k] = '-';
  51.         else
  52.             for (int k = 0; k < word.length(); ++k)
  53.                 cw[cw_vec[i][1] + k][cw_vec[i][2]] = '-';
  54.     }
  55.  
  56.     vec.push_back(word);
  57.     return false;
  58. }
  59.  
  60. vector<string> cwPuzzle(vector<string> cw, string words) {
  61.     words+=";";
  62.     vector<string> vec;
  63.     int pos = 0;
  64.     string token;
  65.     while ((pos = words.find(";")) != -1) {
  66.         token = words.substr(0, pos);
  67.         words.erase(0, pos + 1);
  68.         vec.push_back(token);
  69.     }
  70.  
  71.     rec(cw, vec);
  72.     return cw;
  73. }
  74.  
  75. int main()
  76. {
  77.     ofstream fout(getenv("OUTPUT_PATH"));
  78.  
  79.     vector<string> cw(10);
  80.  
  81.     for (int i = 0; i < 10; i++) {
  82.         string cw_item;
  83.         getline(cin, cw_item);
  84.  
  85.         cw[i] = cw_item;
  86.     }
  87.  
  88.     string words;
  89.     getline(cin, words);
  90.  
  91.     vector<string> result = cwPuzzle(cw, words);
  92.  
  93.     for (int i = 0; i < result.size(); i++) {
  94.         fout << result[i];
  95.  
  96.         if (i != result.size() - 1) {
  97.             fout << "\n";
  98.         }
  99.     }
  100.  
  101.     fout << "\n";
  102.  
  103.     fout.close();
  104.  
  105.     return 0;
  106. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement