Skip to content

Commit 64b47f1

Browse files
authored
Merge pull request #366 from Ninjavin/sudoku-solver-js
Sudoku Solver added in JS
2 parents 2f245f1 + 3713734 commit 64b47f1

File tree

7 files changed

+259
-0
lines changed

7 files changed

+259
-0
lines changed

JavaScript/Sudoku-Solver-JS/README.md

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# Sudoku Solver
2+
3+
This code solves any sudoku puzzle given to it.
4+
5+
## How to Run?
6+
7+
+ To run, simply double-click `index.html` and the webpage would load in your default Web Browser
8+
+ Enter the Sudoku in the table there
9+
+ **Put 0 incase the value is not known**
10+
+ Click on `Submit Sudoku` once the question you gave is correct and then click `Show Results` to get the answers
11+
+ You can click on `Reset Sudoku` to reset the board
12+
13+
## Screenshots
14+
15+
[!image](images/first.png)
16+
[!image2](images/second.png)
17+
[!image3](images/third.png)
18.5 KB
Loading
20 KB
Loading
10.1 KB
Loading
+122
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="UTF-8">
5+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
6+
<link rel="stylesheet" href="style.css">
7+
<title>Sudoku Solver</title>
8+
</head>
9+
<body>
10+
<div>
11+
<div id="board">
12+
<table id="sudoku">
13+
<tr>
14+
<td><input type="number" size="1" /></td>
15+
<td><input type="number" size="1" /></td>
16+
<td><input type="number" size="1" /></td>
17+
<td><input type="number" size="1" /></td>
18+
<td><input type="number" size="1" /></td>
19+
<td><input type="number" size="1" /></td>
20+
<td><input type="number" size="1" /></td>
21+
<td><input type="number" size="1" /></td>
22+
<td><input type="number" size="1" /></td>
23+
</tr>
24+
<tr>
25+
<td><input type="number" size="1" /></td>
26+
<td><input type="number" size="1" /></td>
27+
<td><input type="number" size="1" /></td>
28+
<td><input type="number" size="1" /></td>
29+
<td><input type="number" size="1" /></td>
30+
<td><input type="number" size="1" /></td>
31+
<td><input type="number" size="1" /></td>
32+
<td><input type="number" size="1" /></td>
33+
<td><input type="number" size="1" /></td>
34+
</tr>
35+
<tr>
36+
<td><input type="number" size="1" /></td>
37+
<td><input type="number" size="1" /></td>
38+
<td><input type="number" size="1" /></td>
39+
<td><input type="number" size="1" /></td>
40+
<td><input type="number" size="1" /></td>
41+
<td><input type="number" size="1" /></td>
42+
<td><input type="number" size="1" /></td>
43+
<td><input type="number" size="1" /></td>
44+
<td><input type="number" size="1" /></td>
45+
</tr>
46+
<tr>
47+
<td><input type="number" size="1" /></td>
48+
<td><input type="number" size="1" /></td>
49+
<td><input type="number" size="1" /></td>
50+
<td><input type="number" size="1" /></td>
51+
<td><input type="number" size="1" /></td>
52+
<td><input type="number" size="1" /></td>
53+
<td><input type="number" size="1" /></td>
54+
<td><input type="number" size="1" /></td>
55+
<td><input type="number" size="1" /></td>
56+
</tr>
57+
<tr>
58+
<td><input type="number" size="1" /></td>
59+
<td><input type="number" size="1" /></td>
60+
<td><input type="number" size="1" /></td>
61+
<td><input type="number" size="1" /></td>
62+
<td><input type="number" size="1" /></td>
63+
<td><input type="number" size="1" /></td>
64+
<td><input type="number" size="1" /></td>
65+
<td><input type="number" size="1" /></td>
66+
<td><input type="number" size="1" /></td>
67+
</tr>
68+
<tr>
69+
<td><input type="number" size="1" /></td>
70+
<td><input type="number" size="1" /></td>
71+
<td><input type="number" size="1" /></td>
72+
<td><input type="number" size="1" /></td>
73+
<td><input type="number" size="1" /></td>
74+
<td><input type="number" size="1" /></td>
75+
<td><input type="number" size="1" /></td>
76+
<td><input type="number" size="1" /></td>
77+
<td><input type="number" size="1" /></td>
78+
</tr>
79+
<tr>
80+
<td><input type="number" size="1" /></td>
81+
<td><input type="number" size="1" /></td>
82+
<td><input type="number" size="1" /></td>
83+
<td><input type="number" size="1" /></td>
84+
<td><input type="number" size="1" /></td>
85+
<td><input type="number" size="1" /></td>
86+
<td><input type="number" size="1" /></td>
87+
<td><input type="number" size="1" /></td>
88+
<td><input type="number" size="1" /></td>
89+
</tr>
90+
<tr>
91+
<td><input type="number" size="1" /></td>
92+
<td><input type="number" size="1" /></td>
93+
<td><input type="number" size="1" /></td>
94+
<td><input type="number" size="1" /></td>
95+
<td><input type="number" size="1" /></td>
96+
<td><input type="number" size="1" /></td>
97+
<td><input type="number" size="1" /></td>
98+
<td><input type="number" size="1" /></td>
99+
<td><input type="number" size="1" /></td>
100+
</tr>
101+
<tr>
102+
<td><input type="number" size="1" /></td>
103+
<td><input type="number" size="1" /></td>
104+
<td><input type="number" size="1" /></td>
105+
<td><input type="number" size="1" /></td>
106+
<td><input type="number" size="1" /></td>
107+
<td><input type="number" size="1" /></td>
108+
<td><input type="number" size="1" /></td>
109+
<td><input type="number" size="1" /></td>
110+
<td><input type="number" size="1" /></td>
111+
</tr>
112+
</table>
113+
</div>
114+
<div id="buttons">
115+
<button id="solve">Submit Sudoku</button>
116+
<button id="getResult">Show Results</button>
117+
<button id="reset">Reset Sudoku</button>
118+
</div>
119+
</div>
120+
</body>
121+
<script src="index.js"></script>
122+
</html>

JavaScript/Sudoku-Solver-JS/index.js

+92
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
var sudoku = []
2+
3+
function checkRow(row, value){
4+
for(var i=0 ; i<9 ; i++){
5+
if(sudoku[row][i] === value)
6+
return false
7+
}
8+
return true
9+
}
10+
11+
function checkCol(col, value){
12+
for(var i=0 ; i<9 ; i++){
13+
if(sudoku[i][col] === value)
14+
return false
15+
}
16+
return true
17+
}
18+
19+
function checkBox(row, col, value){
20+
var columnCorner = col- (col%3) , rowCorner = row - (row%3);
21+
for(var i=0 ; i<3 ; i++){
22+
for(var j=0 ; j<3 ; j++){
23+
if(sudoku[i+rowCorner][j + columnCorner] === value)
24+
return false
25+
}
26+
}
27+
return true
28+
}
29+
30+
function checkValue(row, col, value){
31+
if(checkRow(row, value) && checkCol(col, value) && checkBox(row, col, value))
32+
return true
33+
return false
34+
}
35+
36+
function solveFinal(row, col){
37+
if(row === 8 && col === 9){
38+
return true
39+
}
40+
if(col === 9){
41+
row = row+1
42+
col = 0
43+
}
44+
if(sudoku[row][col] > 0){
45+
return solveFinal(row, col+1)
46+
}
47+
for(var i=1; i<=9; i++){
48+
if(checkValue(row, col, i)){
49+
sudoku[row][col] = i
50+
if(solveFinal(row, col+1)){
51+
return true;
52+
}
53+
}
54+
sudoku[row][col] = 0
55+
}
56+
return false
57+
}
58+
59+
function myFunction(){
60+
s = document.getElementById("sudoku")
61+
for(var i=0 ; i<9 ; i++){
62+
var temp = []
63+
for(var j=0 ; j<9 ; j++){
64+
temp.push(parseInt(s.rows[i].cells[j].firstElementChild.value))
65+
}
66+
sudoku.push(temp)
67+
}
68+
console.log(sudoku);
69+
solveFinal(0, 0);
70+
}
71+
72+
function myFunc2(){
73+
s2 = document.getElementById("sudoku")
74+
for(var i=0 ; i<9 ; i++){
75+
for(var j=0 ; j<9 ; j++){
76+
s2.rows[i].cells[j].firstElementChild.value = sudoku[i][j]
77+
}
78+
}
79+
}
80+
81+
function myFunc3(){
82+
s3 = document.getElementById("sudoku")
83+
for(var i=0 ; i<9 ; i++){
84+
for(var j=0 ; j<9 ; j++){
85+
s3.rows[i].cells[j].firstElementChild.value = null
86+
}
87+
}
88+
}
89+
90+
document.getElementById("solve").addEventListener('click', function() {myFunction(); })
91+
document.getElementById("getResult").addEventListener('click', function(){ myFunc2(); })
92+
document.getElementById("reset").addEventListener('click', function() {myFunc3(); })

JavaScript/Sudoku-Solver-JS/style.css

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
*{
2+
margin: 0;
3+
padding: 0;
4+
box-sizing: border-box;
5+
}
6+
7+
input::-webkit-outer-spin-button,
8+
input::-webkit-inner-spin-button {
9+
-webkit-appearance: none;
10+
margin: 0;
11+
}
12+
13+
/* Firefox */
14+
input[type=number] {
15+
-moz-appearance: textfield;
16+
}
17+
18+
#board{
19+
margin: auto;
20+
width: max-content;
21+
margin-top: 100px;
22+
}
23+
24+
#buttons{
25+
margin: auto;
26+
width: max-content;
27+
margin-top: 50px;
28+
}

0 commit comments

Comments
 (0)