fork(1) download
  1. import java.util.List;
  2. import java.util.Scanner;
  3.  
  4. class Sudoku {
  5. static Scanner scanner = new Scanner(System.in);
  6. static int operationCount;
  7. static String[] sudokuTableLines = new String[9];
  8. static SudokuTable sudokuTable;
  9.  
  10. public static void main(String argc[]) {
  11. operationCount = scanner.nextInt();
  12. scanner.nextLine();
  13.  
  14. for (int iter = 1; iter <= operationCount; ++iter) {
  15. for (int iter2 = 0; iter2 < 9; ++iter2) {
  16. sudokuTableLines[iter2] = scanner.nextLine();
  17. }
  18. sudokuTable = new SudokuTable(sudokuTableLines);
  19. System.out.println(sudokuTable.checkValidityOfSudokuTable());
  20. if (iter != operationCount)
  21. scanner.nextLine();
  22. }
  23. }
  24.  
  25. private static class SudokuTable {
  26. private int[][] sudokuTableValues = new int[9][9];
  27. // private int[][] smallSquares = new int[9][9];
  28.  
  29. public SudokuTable(String[] rows) {
  30. int row = 0;
  31. int column = 0;
  32. for (String s : rows) {
  33. column = 0;
  34. for (String s1 : s.split(" ")) {
  35. sudokuTableValues[row][column] = Integer.parseInt(s1);
  36. ++column;
  37. }
  38. ++row;
  39. }
  40. }
  41.  
  42.  
  43. public String checkValidityOfSudokuTable() {
  44. for (int iter1 = 1; iter1 <= 8; iter1 = iter1 + 3)
  45. for (int iter2 = 1; iter2 <= 8; iter2 = iter2 + 3)
  46. if (!checkValidityOfSmallSquareWithMiddleIn(iter1, iter2))
  47. return "NIE";
  48.  
  49. for (int[] row : sudokuTableValues)
  50. if (!checkValidityOfRow(row))
  51. return "NIE";
  52.  
  53. for (int[] row : transposeMatrix(sudokuTableValues))
  54. if (!checkValidityOfRow(row))
  55. return "NIE";
  56.  
  57. return "TAK";
  58. }
  59.  
  60. private boolean checkValidityOfSmallSquareWithMiddleIn(int middleRowIndex, int middleColumnIndex) {
  61. int[] foundNumbers = new int[9];
  62. int iter = 0;
  63. for (int row = middleRowIndex - 1; row <= middleRowIndex + 1; ++row)
  64. for (int column = middleColumnIndex - 1; column <= middleColumnIndex + 1; ++column) {
  65. foundNumbers[iter] = sudokuTableValues[row][column];
  66. ++iter;
  67. }
  68. return checkIfArrayContainNumbersFromOneToNine(foundNumbers);
  69. }
  70.  
  71. private boolean checkValidityOfRow(int row[]) {
  72. return checkIfArrayContainNumbersFromOneToNine(row);
  73. }
  74.  
  75. private boolean checkIfArrayContainNumbersFromOneToNine(int[] foundNumbers) {
  76. boolean[] checkedNumber = new boolean[9];
  77. for (int i : foundNumbers) {
  78. if ((i < 1) || (i > 9))
  79. return false;
  80. checkedNumber[i - 1] = true;
  81. }
  82. for (boolean b : checkedNumber) {
  83. if (!b)
  84. return false;
  85. }
  86. return true;
  87. }
  88.  
  89. private static int[][] transposeMatrix(int[][] m) {
  90. int[][] temp = new int[m[0].length][m.length];
  91. for (int i = 0; i < m.length; i++)
  92. for (int j = 0; j < m[0].length; j++)
  93. temp[j][i] = m[i][j];
  94. return temp;
  95. }
  96.  
  97. }
  98. }
  99.  
Success #stdin #stdout 0.06s 4386816KB
stdin
5
2 5 1 7 6 9 3 4 8
9 8 6 3 4 5 2 7 1
3 7 4 8 2 1 6 9 5
4 2 9 6 3 8 5 1 7
8 6 3 5 1 7 9 2 4
5 1 7 4 9 2 8 3 6
7 9 5 1 8 3 4 6 2
1 4 2 9 5 6 7 8 3
6 3 8 2 7 4 1 5 9

100 5 1 7 6 9 3 4 8
9 8 6 3 4 5 2 7 1
3 7 4 8 2 1 6 9 5
4 2 9 6 3 8 5 1 7
8 6 3 5 1 7 9 2 4
5 1 7 4 9 2 8 3 6
7 9 5 1 8 3 4 6 2
1 4 2 9 5 6 7 8 3
6 3 8 2 7 4 1 5 9

4 2 9 6 3 8 5 1 7
8 6 3 5 1 7 9 2 4
5 1 7 4 9 2 8 3 6
7 9 5 1 8 3 4 6 2
1 4 2 9 5 6 7 8 3
6 3 8 2 7 4 1 5 9
2 5 1 7 6 9 3 4 8
9 8 6 3 4 5 2 7 1
3 7 4 8 2 1 6 9 5

2 5 1 7 6 9 3 4 8
9 8 6 3 4 5 2 7 1
3 7 4 8 2 1 6 9 5
4 2 9 6 3 8 5 1 7
8 6 3 5 1 7 9 2 4
5 1 7 4 9 2 8 3 6
7 9 5 1 8 3 4 6 2
1 4 2 9 5 6 7 8 3
6 3 8 2 7 4 1 9 5

2 5 1 7 6 9 3 4 8
9 8 6 3 4 5 2 7 1
3 7 4 8 2 1 6 9 5
4 2 9 6 3 8 5 1 7
8 6 3 5 1 7 9 2 4
5 1 7 4 9 2 8 3 6
7 9 5 1 8 3 4 6 2
1 4 2 9 8 6 7 5 3
6 3 8 2 7 4 1 5 9
stdout
TAK
NIE
TAK
NIE
NIE