From: Xinqi Bao Date: Thu, 3 Sep 2020 08:07:35 +0000 (+0800) Subject: added one more cleaned soution X-Git-Url: https://git.xinqibao.xyz/sudoku.git/commitdiff_plain/bd44978c03bae2fad2e67726b0ac2409aad31594?ds=sidebyside added one more cleaned soution --- diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f1e04b6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +Debug/ +tags +*.exe +*.out diff --git a/Debug/StdAfx.obj b/Debug/StdAfx.obj deleted file mode 100644 index 5fafc9a..0000000 Binary files a/Debug/StdAfx.obj and /dev/null differ diff --git a/Debug/sudoku.exe b/Debug/sudoku.exe deleted file mode 100644 index 141c005..0000000 Binary files a/Debug/sudoku.exe and /dev/null differ diff --git a/Debug/sudoku.ilk b/Debug/sudoku.ilk deleted file mode 100644 index 485de39..0000000 Binary files a/Debug/sudoku.ilk and /dev/null differ diff --git a/Debug/sudoku.obj b/Debug/sudoku.obj deleted file mode 100644 index 7672ee7..0000000 Binary files a/Debug/sudoku.obj and /dev/null differ diff --git a/Debug/sudoku.pch b/Debug/sudoku.pch deleted file mode 100644 index 44af6fa..0000000 Binary files a/Debug/sudoku.pch and /dev/null differ diff --git a/Debug/sudoku.pdb b/Debug/sudoku.pdb deleted file mode 100644 index ba8f783..0000000 Binary files a/Debug/sudoku.pdb and /dev/null differ diff --git a/Debug/sudoku.res b/Debug/sudoku.res deleted file mode 100644 index 84e2ba7..0000000 Binary files a/Debug/sudoku.res and /dev/null differ diff --git a/Debug/sudokuDlg.obj b/Debug/sudokuDlg.obj deleted file mode 100644 index b11b563..0000000 Binary files a/Debug/sudokuDlg.obj and /dev/null differ diff --git a/Debug/vc60.idb b/Debug/vc60.idb deleted file mode 100644 index ba4e31f..0000000 Binary files a/Debug/vc60.idb and /dev/null differ diff --git a/Debug/vc60.pdb b/Debug/vc60.pdb deleted file mode 100644 index 9562f84..0000000 Binary files a/Debug/vc60.pdb and /dev/null differ diff --git a/Orz/oneNewMethod.cc b/Orz/oneNewMethod.cc new file mode 100644 index 0000000..6ef79e3 --- /dev/null +++ b/Orz/oneNewMethod.cc @@ -0,0 +1,113 @@ +/* + * A new method to solve the puzzles, + * more nice orgnized, and more efficent I suppose. + * (at least compared to my original one) + * + * this one take puzzles and std input, + * an example puzzle could be found below: + * 0 0 0 2 6 0 7 0 1 + * 6 8 0 0 7 0 0 9 0 + * 1 9 0 0 0 4 5 0 0 + * 8 2 0 1 0 0 0 4 0 + * 0 0 4 6 0 2 9 0 0 + * 0 5 0 0 0 3 0 2 8 + * 0 0 9 3 0 0 0 7 4 + * 0 4 0 0 5 0 0 3 6 + * 7 0 3 0 1 8 0 0 0 + * + * after calculation, the correct output should be: + * +------+------+----- + * |4 3 5 |2 6 9 |7 8 1 + * |6 8 2 |5 7 1 |4 9 3 + * |1 9 7 |8 3 4 |5 6 2 + * +------+------+----- + * |8 2 6 |1 9 5 |3 4 7 + * |3 7 4 |6 8 2 |9 1 5 + * |9 5 1 |7 4 3 |6 2 8 + * +------+------+----- + * |5 1 9 |3 2 6 |8 7 4 + * |2 4 8 |9 5 7 |1 3 6 + * |7 6 3 |4 1 8 |2 5 9 + * + * Yet, the core computing part is still a kind of brute force, + * which is more intutive to implement. + * It might be implemented to my CheaterHub project in the future, + * but I'm getting really frustrated by 81 boxes in UI design. + */ +#include +#include + +using namespace std; + +int main() +{ + vector> ori(9, vector(9)); + vector> todo; + int cur = 0; + + // Another idea, is pre-generate checking list + // for each blank box in the puzzle, + // it should save some runtime for less checking. + for(int i = 0; i < 9; i++) + { + for(int j = 0; j < 9; j++) + { + cin >> ori[i][j]; + if(!ori[i][j]) + todo.push_back({i, j}); + } + } + + cout << "********************" << endl; + + while(cur < todo.size()) + { + int x = todo[cur].first; + int y = todo[cur].second; + vector check(10, false); + + // TODO: there are 6 overlapping checks, + // including (x, y) itself twice. + // column + for(int i = 0; i < 9; i++) + check[ori[i][y]] = true; + // row + for(int j = 0; j < 9; j++) + check[ori[x][j]] = true; + // 9x9 box + int ibase = x / 3 * 3; + int jbase = y / 3 * 3; + for(int i = 0; i < 3; i++) + for(int j = 0; j < 3; j++) + check[ori[i+ibase][j+jbase]] = true; + + int k = ori[x][y] + 1; + for(; k < 10; k++) + if(!check[k]) break; + + if(k > 9) + { + ori[x][y] = 0; + cur--; + continue; + } + else + { + ori[x][y] = k; + cur++; + } + } + + for(int i = 0; i < 9; i++) + { + if(i%3 == 0) cout << "+------+------+-----" << endl; + for(int j = 0; j < 9; j++) + { + if(j%3 == 0) cout << "|"; + cout << ori[i][j] << " "; + } + cout << endl; + } + + return 0; +}