
Play Free Sudoku Puzzle
Time: 0 seconds
let solved=[ [5,3,4,6,7,8,9,1,2], [6,7,2,1,9,5,3,4,8], [1,9,8,3,4,2,5,6,7], [8,5,9,7,6,1,4,2,3], [4,2,6,8,5,3,7,9,1], [7,1,3,9,2,4,8,5,6], [9,6,1,5,3,7,2,8,4], [2,8,7,4,1,9,6,3,5], [3,4,5,2,8,6,1,7,9] ]
let puzzle=[] let seconds=0 let timer
function startTimer(){
clearInterval(timer)
seconds=0
timer=setInterval(function(){ seconds++ document.getElementById("timer").innerText=seconds },1000)
}
function generatePuzzle(remove){
puzzle=JSON.parse(JSON.stringify(solved))
while(remove>0){
let r=Math.floor(Math.random()*9) let c=Math.floor(Math.random()*9)
if(puzzle[r][c]!=0){ puzzle[r][c]=0 remove-- }
}
}
function drawBoard(){
let table=document.getElementById("board")
table.innerHTML=""
for(let r=0;r<9;r++){ let row=document.createElement("tr") for(let c=0;c<9;c++){ let cell=document.createElement("td") let input=document.createElement("input") if(puzzle[r][c]!=0){ input.value=puzzle[r][c] input.disabled=true } cell.appendChild(input) row.appendChild(cell) } table.appendChild(row) } } function startGame(){ let remove=document.getElementById("difficulty").value generatePuzzle(remove) drawBoard() startTimer() document.getElementById("result").innerText="" } function checkSolution(){ let table=document.getElementById("board") let correct=true for(let r=0;r<9;r++){ for(let c=0;c<9;c++){ let value=table.rows[r].cells[c].firstChild.value if(value!=solved[r][c]){ correct=false } } } if(correct){ document.getElementById("result").innerHTML="🎉 Correct! Well done!" }else{ document.getElementById("result").innerHTML="❌ Some answers are wrong." } } function resetGame(){ drawBoard() document.getElementById("result").innerText="" } startGame()
Daily Sudoku Puzzle
⏱ Time: 0 sec
Daily Sudoku Puzzle
⏱ Time: 0 sec
let solution=[] let puzzle=[] let timer let seconds=0
function startTimer(){
clearInterval(timer) seconds=0
timer=setInterval(function(){ seconds++ document.getElementById("timer").innerText=seconds },1000)
}
function shuffle(array){
for(let i=array.length-1;i>0;i--){
let j=Math.floor(Math.random()*(i+1))
[array[i],array[j]]=[array[j],array[i]]}
return array
}
function generateSolved(){
let base=[1,2,3,4,5,6,7,8,9]
let grid=[]
for(let r=0;r<9;r++){ grid[r]=[] for(let c=0;c<9;c++){ grid[r][c]=((r*3+Math.floor(r/3)+c)%9)+1 } } let nums=shuffle(base) for(let r=0;r<9;r++){ for(let c=0;c<9;c++){ grid[r][c]=nums[grid[r][c]-1] } } return grid } function generatePuzzle(remove){ solution=generateSolved() puzzle=JSON.parse(JSON.stringify(solution)) while(remove>0){
let r=Math.floor(Math.random()*9)
let c=Math.floor(Math.random()*9)
if(puzzle[r][c]!=0){
puzzle[r][c]=0
remove--
}
}
}
function drawBoard(){
let table=document.getElementById("sudoku-board")
table.innerHTML=""
for(let r=0;r<9;r++){
let row=document.createElement("tr")
for(let c=0;c<9;c++){
let cell=document.createElement("td")
let input=document.createElement("input")
input.dataset.row=r
input.dataset.col=c
if(puzzle[r][c]!=0){
input.value=puzzle[r][c]
input.disabled=true
}
cell.appendChild(input)
row.appendChild(cell)
}
table.appendChild(row)
}
}
function newGame(){
let remove=document.getElementById("difficulty").value
generatePuzzle(remove)
drawBoard()
startTimer()
document.getElementById("message").innerText=""
}
function checkSudoku(){
let table=document.getElementById("sudoku-board")
let correct=true
for(let r=0;r<9;r++){
for(let c=0;c<9;c++){
let value=table.rows[r].cells[c].firstChild.value
if(value!=solution[r][c]){
correct=false
}
}
}
if(correct){
document.getElementById("message").innerHTML="🎉 Congratulations! Sudoku solved!"
}else{
document.getElementById("message").innerHTML="❌ Some answers are incorrect."
}
}
function hint(){
let empty=[]
for(let r=0;r<9;r++){
for(let c=0;c<9;c++){
let cell=document.querySelector(`input[data-row='
{c}']`)
if(cell.value==""){
empty.push({r:r,c:c})
}
}
}
if(empty.length==0) return
let pick=empty[Math.floor(Math.random()*empty.length)]
let cell=document.querySelector(`input[data-row='
{pick.c}']`)
cell.value=solution[pick.r][pick.c]
}
function resetGame(){
drawBoard()
document.getElementById("message").innerText=""
}
newGame()