FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
JavaScript/Backtracking/Sudoku.js at master · TheAlgorithms/JavaScript · GitHub
Uh oh!
There was an error while loading.
Please reload this page
.
TheAlgorithms
/
JavaScript
Public
Uh oh!
There was an error while loading.
Please reload this page
.
Notifications
You must be signed in to change notification settings
Fork
5.8k
Star
34.2k
Code
Issues
21
Pull requests
192
Actions
Projects
Wiki
Security and quality
0
Insights
Additional navigation options
Code
Issues
Pull requests
Actions
Projects
Wiki
Security and quality
Insights
Expand file tree
Breadcrumbs
JavaScript
/
Backtracking
/
Sudoku.js
Copy path
More file actions
More file actions
Latest commit
History
History
History
80 lines (69 loc) · 2.05 KB
Breadcrumbs
JavaScript
/
Backtracking
/
Sudoku.js
Copy path
File metadata and controls
80 lines (69 loc) · 2.05 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
class
Sudoku
{
// Sudoku Class to hold the board and related functions
constructor
(
board
)
{
this
.
board
=
board
}
findEmptyCell
(
)
{
// Find a empty cell in the board (returns [-1, -1] if all cells are filled)
for
(
let
i
=
0
;
i
<
9
;
i
++
)
{
for
(
let
j
=
0
;
j
<
9
;
j
++
)
{
if
(
this
.
board
[
i
]
[
j
]
===
0
)
return
[
i
,
j
]
}
}
return
[
-
1
,
-
1
]
}
check
(
[
y
,
x
]
,
value
)
{
// checks if the value to be added in the board is an acceptable value for the cell
// checking through the row
for
(
let
i
=
0
;
i
<
9
;
i
++
)
{
if
(
this
.
board
[
i
]
[
x
]
===
value
)
return
false
}
// checking through the column
for
(
let
i
=
0
;
i
<
9
;
i
++
)
{
if
(
this
.
board
[
y
]
[
i
]
===
value
)
return
false
}
// checking through the 3x3 block of the cell
const
secRow
=
Math
.
floor
(
y
/
3
)
const
secCol
=
Math
.
floor
(
x
/
3
)
for
(
let
i
=
secRow
*
3
;
i
<
secRow
*
3
+
3
;
i
++
)
{
for
(
let
j
=
secCol
*
3
;
j
<
secCol
*
3
+
3
;
j
++
)
{
if
(
y
!==
i
&&
x
!==
j
&&
this
.
board
[
i
]
[
j
]
===
value
)
return
false
}
}
return
true
}
solve
(
)
{
const
[
y
,
x
]
=
this
.
findEmptyCell
(
)
// checking if the board is complete
if
(
y
===
-
1
&&
x
===
-
1
)
return
true
for
(
let
val
=
1
;
val
<
10
;
val
++
)
{
if
(
this
.
check
(
[
y
,
x
]
,
val
)
)
{
this
.
board
[
y
]
[
x
]
=
val
if
(
this
.
solve
(
)
)
return
true
// backtracking if the board cannot be solved using current configuration
this
.
board
[
y
]
[
x
]
=
0
}
}
// returning false the board cannot be solved using current configuration
return
false
}
getSection
(
row
,
[
start
,
end
]
)
{
return
this
.
board
[
row
]
.
slice
(
start
,
end
)
}
printBoard
(
output
=
(
...
v
)
=>
console
.
log
(
...
v
)
)
{
// helper function to display board
for
(
let
i
=
0
;
i
<
9
;
i
++
)
{
if
(
i
%
3
===
0
&&
i
!==
0
)
{
output
(
'- - - - - - - - - - - -'
)
}
output
(
...
this
.
getSection
(
i
,
[
0
,
3
]
)
,
' | '
,
...
this
.
getSection
(
i
,
[
3
,
6
]
)
,
' | '
,
...
this
.
getSection
(
i
,
[
6
,
9
]
)
)
}
}
}
export
{
Sudoku
}
Back
|
FazBrowse Home
|
New Git URL