YauhenMardan

Untitled

May 30th, 2019
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.52 KB | None | 0 0
  1. #include <fstream>
  2. #include <iostream>
  3. #include <vector>
  4. #include <map>
  5.  
  6. const std::string letters="ABCDEFGHIJKLMNOP";
  7.  
  8. class Sudoku{
  9. private:
  10. const int ROWS_NUM=16;
  11. const int COLS_NUM=16;
  12. const int NUM=16;
  13. const int PEERS_SZ=39;
  14.  
  15. std::map<std::string,std::string> values;
  16. std::map<std::string,std::vector<std::string>> peers;
  17.  
  18. public:
  19. Sudoku(){
  20. initPeers(); //init peers
  21. initValues();
  22. }
  23. void solve(){
  24.  
  25. }
  26. void initValues(){
  27. std::string str;
  28. //for each cell
  29. for(int i=0;i<ROWS_NUM;i++){
  30. for(int j=0;j<COLS_NUM;j++){
  31. str="";
  32. str+=letters[i];
  33. str+=letters[j];
  34. values.insert(std::pair<std::string,std::string>(str,letters));
  35. }
  36. }
  37. }
  38. void initPeers(){
  39. //init peers
  40. int x,y;
  41. std::string str;
  42. std::string strk;
  43. std::vector<std::string> vect;
  44. //for each cell
  45. for(int i=0;i<ROWS_NUM;i++){
  46. for(int j=0;j<COLS_NUM;j++){
  47. str="";
  48. str+=letters[i];
  49. str+=letters[j];
  50. vect.clear();
  51. //rows
  52. for(int k=0;k<ROWS_NUM;k++){
  53. if(k!=i){
  54. strk="";
  55. strk+=letters[k];
  56. strk+=letters[j];
  57. vect.push_back(strk);
  58. }
  59. }
  60. //columns
  61. for(int k=0;k<COLS_NUM;k++){
  62. if(k!=j){
  63. strk="";
  64. strk+=letters[i];
  65. strk+=letters[k];
  66. vect.push_back(strk);
  67. }
  68. }
  69. y=i/4;
  70. x=j/4;
  71. //square
  72. for(int ii=0; ii<NUM/4; ii++){
  73. for(int jj=0; jj<NUM/4; jj++){
  74. if(ii!=i && jj!=j){
  75. strk="";
  76. strk+=letters[y+ii];
  77. strk+=letters[x+jj];
  78. vect.push_back(strk);
  79. }
  80. }
  81. }
  82. peers.insert(std::pair<std::string, std::vector<std::string>>(str, vect));
  83. }
  84. }
  85. // TEST UNITS
  86. // std::string st="CC";
  87. // for(int i=0;i<units[st].size();i++){
  88. // std::cout<<units[st][i]<<" ";
  89. // }
  90. // std::cout<<std::endl<<units[st].size()<<std::endl;
  91. }
  92.  
  93. void read(std::string fileName){
  94. std::ifstream fin(fileName);
  95. char c;
  96. std::string str;
  97. for(int i=0;i<ROWS_NUM;i++){
  98. for(int j=0;j<COLS_NUM;j++){
  99. str="";
  100. fin>>c;
  101. str+=letters[i];
  102. str+=letters[j];
  103. insert(str, c);
  104. }
  105. }
  106. fin.close();
  107. }
  108. void insert(std::string square, char val){
  109. if(val=='-'){
  110. // values.insert(std::pair<std::string, std::string>(square,letters));
  111. } else{
  112. assign(square, val);
  113. }
  114.  
  115. }
  116. void assign(std::string square, char val){
  117. values[square]=std::string(1,val);
  118. std::string *str;
  119. for(int i=0;i<PEERS_SZ;i++){
  120. str= &values[peers[square][i]];
  121. // if((*str).size()==1){
  122. // continue;
  123. // }
  124. (*str).erase(std::remove((*str).begin(), (*str).end(), val));
  125. }
  126. }
  127. void write(std::string fileName){
  128. std::ofstream fout(fileName);
  129. std::string str,str1;
  130. for(int i=0;i<ROWS_NUM;i++){
  131. for(int j=0;j<COLS_NUM;j++){
  132. str="";
  133. str+=letters[i];
  134. str+=letters[j];
  135. str1=values[str];
  136. fout<<str1<<"\t";
  137. }
  138. fout<<"\n";
  139. }
  140. fout.close();
  141. }
  142. };
  143.  
  144. int main(int argc, const char * argv[]) {
  145. Sudoku sudoku;
  146. sudoku.read("input.txt");
  147. sudoku.solve();
  148. sudoku.write("output.txt");
  149.  
  150. // std::cout<<"GGG\n";
  151. // char c1;
  152. // while(true){
  153. // std::cin>>c1;
  154. // std::cout<<sudoku.ctoi(c1)<<std::endl;
  155. // std::cout<<sudoku.itoc(sudoku.ctoi(c1))<<std::endl;
  156. // }
  157. return 0;
  158. }
Advertisement
Add Comment
Please, Sign In to add comment