class Sudoku { grid = null; size = 9; boxSize = 3; Sudoku(this, puzzle) { this.grid = puzzle; } isValid(this, row, col, num) { for (i = 0; i < 9; i++) { if (this.grid[row * 9 + i] == num) { return 0; } } for (i = 0; i < 9; i++) { if (this.grid[i * 9 + col] == num) { return 0; } } boxRow = (row / 3) * 3; boxCol = (col / 3) * 3; for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) { idx = (boxRow + i) * 9 + (boxCol + j); if (this.grid[idx] == num) { return 0; } } } return 1; } solve(this) { for (row = 0; row < 9; row++) { for (col = 0; col < 9; col++) { idx = row * 9 + col; if (this.grid[idx] == 0) { for (num = 1; num <= 9; num++) { if (this.isValid(row, col, num)) { this.grid[idx] = num; if (this.solve()) { return 1; } this.grid[idx] = 0; } } return 0; } } } return 1; } printGrid(this) { for (row = 0; row < 9; row++) { line = ""; for (col = 0; col < 9; col++) { line += str(this.grid[row * 9 + col]); if (col < 8) { line += " "; } if (col == 2 || col == 5) { line += "| "; } } print(line); if (row == 2 || row == 5) { print("------+-------+------"); } } } } puzzle = { 5, 3, 0, 0, 7, 0, 0, 0, 0, 6, 0, 0, 1, 9, 5, 0, 0, 0, 0, 9, 8, 0, 0, 0, 0, 6, 0, 8, 0, 0, 0, 6, 0, 0, 0, 3, 4, 0, 0, 8, 0, 3, 0, 0, 1, 7, 0, 0, 0, 2, 0, 0, 0, 6, 0, 6, 0, 0, 0, 0, 2, 8, 0, 0, 0, 0, 4, 1, 9, 0, 0, 5, 0, 0, 0, 0, 8, 0, 0, 7, 9 }; print("Sudoku Puzzle:"); print("=============="); sudoku = new Sudoku(puzzle); sudoku.printGrid(); print(""); print("Solving..."); print(""); if (sudoku.solve()) { print("Solution:"); print("========="); sudoku.printGrid(); } else { print("No solution exists"); }