From 53fd3bc31def6d0541aefd671675e10b73402755 Mon Sep 17 00:00:00 2001 From: Varun Siripuram Date: Tue, 28 Jul 2026 12:52:15 +0530 Subject: [PATCH 1/7] Initial project setup --- .github/copilot-instructions.md | 15 +++++++++++++++ starter/__pycache__/sudoku_logic.cpython-314.pyc | Bin 0 -> 3009 bytes 2 files changed, 15 insertions(+) create mode 100644 .github/copilot-instructions.md create mode 100644 starter/__pycache__/sudoku_logic.cpython-314.pyc diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md new file mode 100644 index 000000000..af76ea144 --- /dev/null +++ b/.github/copilot-instructions.md @@ -0,0 +1,15 @@ +# GitHub Copilot Instructions + +This project is a Flask-based Sudoku application. + +When generating code: + +- Follow PEP 8 coding standards. +- Preserve the existing project structure. +- Keep functions modular and reusable. +- Avoid breaking existing functionality. +- Add concise comments only when they improve readability. +- Prefer readable and maintainable code over clever code. +- Ensure compatibility with Flask and the existing Sudoku logic. +- Suggest Pythonic solutions whenever possible. +- Keep HTML, CSS, and JavaScript clean and organized. diff --git a/starter/__pycache__/sudoku_logic.cpython-314.pyc b/starter/__pycache__/sudoku_logic.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c1bb5e6740e6d5a8ee0ac90a907a03a7295f8686 GIT binary patch literal 3009 zcma);Sx*~R6oBvbj5oXj2Gf|>B+i1tq$*H_(m;zSZm0z%4&bD9Y&rG-P7HQt#?AIn zKhmfqRzy-qr4p(ViAb%KNUd5`ed#}-m=J65L#6g5ZvmuAdF#1%yg`#TN18KtU(Wf? znQ1o~Y7oeer)MtQR3Y>ysgy)fEbMrokVZk|!^23F-&n*!t*8hhk?|?4NMwBsXr+$@ zt@0^Bt9>fa8lT3ewxT!|wLa`bF6}e2=x78N*CsEf`0N~mLK+1~8lH2dx1qC-RTP0AwdFifZG=Wlz zWAJ#6Ae4OFv2Y?7%a%4ARd{s>X^|b)Ng}AVR%%XYbI|r!Rf#8aU5upU!*kP|#GW4h zWJppDjf{<-1v}#qwQ&otfl*Rjgy+H{7vg4<;?)p!0dIy5f|$?^3QW>@{8#pe_MEQ& zar?@trJ?(Wmb^KA>pgGg(yfVm-gSNJ->?#NqgK5%4G<5y0q z-K7oTU42sj%&U4P<-5vv0Jt1gxA2~j0inUG@Qk|@ydDZu@WNf#Ukm&F$rG~NQ@i-X(1wWqmBt7Aw0$L#2sX1Aq^^x{xZ}pcHjJT z9_MxDh2Bhfp)WhQu5&EE{h()M@Il|B!42neslI7TiHvVN*PvQUcHqwR9YcCJZ>}#D z3x>MPTQ|?l<3ep?=F;7!`GLI2vRr%T+!K>?dHBJ|6I17-$cE{iO>6Ux64mY7VvwsB^Jt;%&8(7id~Mp&p@VHZdepRkrvX_U zfVJ7S)l|m1{C$Bl5~L~C78z@(%2N3fyU9h10CaIW&zkr@agrYIx!U}?8MLbIL z$ooLm*S!kH@@Zas4(n&CliTj(9RQeQ>A4I^T*h(&04%rfolT&Edtf)fTau*0n?Mvs zNP6Uiqb`=_J>Cu#NlOr-A4LjQ5g17siKjS0(u75kd%S8l@f0OMq?=b#3i)Ugfka07sZ8RM z=Nu?d=AzP?R8*3a-&{&PuNcetJG&r&<-ZJ;{w>H+L~<=P3K;z`DXT$A8X*x+iLu0- zq)Mi)U5j%9IeNvWrfF`DlR<9uqJZ77(U;P1@j zNS`dQ=1jvnYcCiYGpU?mf7+AR)voGntE`RM%Y~mgVF_0aPp(W6kYONMh5q=-hbNyf z`3A(JbpMBlt{{6|b7D3TO~tu>p8V~SEG3ZhJ!de+n@G2b41cIKX*RFXrj^?)#x2__ ZjNjW<>9Kjc*#OF}#{2%RQ{iU1=s%IV0 Date: Tue, 28 Jul 2026 13:10:46 +0530 Subject: [PATCH 2/7] Ignore Python cache files --- .gitignore | 3 +++ starter/__pycache__/sudoku_logic.cpython-314.pyc | Bin 3009 -> 0 bytes 2 files changed, 3 insertions(+) delete mode 100644 starter/__pycache__/sudoku_logic.cpython-314.pyc diff --git a/.gitignore b/.gitignore index 2fcd240b2..4579cd48b 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,6 @@ Thumbs.db # Ignore Python virtual environment .venv/ +__pycache__/ +__pycache__/ +*.py[cod] diff --git a/starter/__pycache__/sudoku_logic.cpython-314.pyc b/starter/__pycache__/sudoku_logic.cpython-314.pyc deleted file mode 100644 index c1bb5e6740e6d5a8ee0ac90a907a03a7295f8686..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3009 zcma);Sx*~R6oBvbj5oXj2Gf|>B+i1tq$*H_(m;zSZm0z%4&bD9Y&rG-P7HQt#?AIn zKhmfqRzy-qr4p(ViAb%KNUd5`ed#}-m=J65L#6g5ZvmuAdF#1%yg`#TN18KtU(Wf? znQ1o~Y7oeer)MtQR3Y>ysgy)fEbMrokVZk|!^23F-&n*!t*8hhk?|?4NMwBsXr+$@ zt@0^Bt9>fa8lT3ewxT!|wLa`bF6}e2=x78N*CsEf`0N~mLK+1~8lH2dx1qC-RTP0AwdFifZG=Wlz zWAJ#6Ae4OFv2Y?7%a%4ARd{s>X^|b)Ng}AVR%%XYbI|r!Rf#8aU5upU!*kP|#GW4h zWJppDjf{<-1v}#qwQ&otfl*Rjgy+H{7vg4<;?)p!0dIy5f|$?^3QW>@{8#pe_MEQ& zar?@trJ?(Wmb^KA>pgGg(yfVm-gSNJ->?#NqgK5%4G<5y0q z-K7oTU42sj%&U4P<-5vv0Jt1gxA2~j0inUG@Qk|@ydDZu@WNf#Ukm&F$rG~NQ@i-X(1wWqmBt7Aw0$L#2sX1Aq^^x{xZ}pcHjJT z9_MxDh2Bhfp)WhQu5&EE{h()M@Il|B!42neslI7TiHvVN*PvQUcHqwR9YcCJZ>}#D z3x>MPTQ|?l<3ep?=F;7!`GLI2vRr%T+!K>?dHBJ|6I17-$cE{iO>6Ux64mY7VvwsB^Jt;%&8(7id~Mp&p@VHZdepRkrvX_U zfVJ7S)l|m1{C$Bl5~L~C78z@(%2N3fyU9h10CaIW&zkr@agrYIx!U}?8MLbIL z$ooLm*S!kH@@Zas4(n&CliTj(9RQeQ>A4I^T*h(&04%rfolT&Edtf)fTau*0n?Mvs zNP6Uiqb`=_J>Cu#NlOr-A4LjQ5g17siKjS0(u75kd%S8l@f0OMq?=b#3i)Ugfka07sZ8RM z=Nu?d=AzP?R8*3a-&{&PuNcetJG&r&<-ZJ;{w>H+L~<=P3K;z`DXT$A8X*x+iLu0- zq)Mi)U5j%9IeNvWrfF`DlR<9uqJZ77(U;P1@j zNS`dQ=1jvnYcCiYGpU?mf7+AR)voGntE`RM%Y~mgVF_0aPp(W6kYONMh5q=-hbNyf z`3A(JbpMBlt{{6|b7D3TO~tu>p8V~SEG3ZhJ!de+n@G2b41cIKX*RFXrj^?)#x2__ ZjNjW<>9Kjc*#OF}#{2%RQ{iU1=s%IV0 Date: Tue, 28 Jul 2026 13:36:13 +0530 Subject: [PATCH 3/7] Added difficulty level selection --- starter/app.py | 65 +++++++---- starter/static/main.js | 217 +++++++++++++++++++++-------------- starter/sudoku_logic.py | 68 +++++++++-- starter/templates/index.html | 40 +++++-- 4 files changed, 259 insertions(+), 131 deletions(-) diff --git a/starter/app.py b/starter/app.py index 0f526b757..de6a35ff3 100644 --- a/starter/app.py +++ b/starter/app.py @@ -3,37 +3,56 @@ app = Flask(__name__) -# Keep a simple in-memory store for current puzzle and solution CURRENT = { - 'puzzle': None, - 'solution': None + "puzzle": None, + "solution": None } -@app.route('/') + +@app.route("/") def index(): - return render_template('index.html') + return render_template("index.html") + -@app.route('/new') +@app.route("/new") def new_game(): - clues = int(request.args.get('clues', 35)) - puzzle, solution = sudoku_logic.generate_puzzle(clues) - CURRENT['puzzle'] = puzzle - CURRENT['solution'] = solution - return jsonify({'puzzle': puzzle}) + difficulty = request.args.get("difficulty", "easy").lower() + + if difficulty not in sudoku_logic.DIFFICULTY_LEVELS: + difficulty = "easy" + + puzzle, solution = sudoku_logic.generate_puzzle(difficulty) + + CURRENT["puzzle"] = puzzle + CURRENT["solution"] = solution + + return jsonify({ + "difficulty": difficulty, + "puzzle": puzzle + }) + -@app.route('/check', methods=['POST']) +@app.route("/check", methods=["POST"]) def check_solution(): - data = request.json - board = data.get('board') - solution = CURRENT.get('solution') - if solution is None: - return jsonify({'error': 'No game in progress'}), 400 + if CURRENT["solution"] is None: + return jsonify({"error": "No game in progress"}), 400 + + data = request.get_json() + + board = data.get("board", []) + incorrect = [] - for i in range(sudoku_logic.SIZE): - for j in range(sudoku_logic.SIZE): - if board[i][j] != solution[i][j]: - incorrect.append([i, j]) - return jsonify({'incorrect': incorrect}) -if __name__ == '__main__': + for row in range(sudoku_logic.SIZE): + for col in range(sudoku_logic.SIZE): + if board[row][col] != CURRENT["solution"][row][col]: + incorrect.append([row, col]) + + return jsonify({ + "correct": len(incorrect) == 0, + "incorrect": incorrect + }) + + +if __name__ == "__main__": app.run(debug=True) \ No newline at end of file diff --git a/starter/static/main.js b/starter/static/main.js index 2028e1026..26217c147 100644 --- a/starter/static/main.js +++ b/starter/static/main.js @@ -1,105 +1,154 @@ // Client-side rendering and interaction for the Flask-backed Sudoku + const SIZE = 9; let puzzle = []; function createBoardElement() { - const boardDiv = document.getElementById('sudoku-board'); - boardDiv.innerHTML = ''; - for (let i = 0; i < SIZE; i++) { - const rowDiv = document.createElement('div'); - rowDiv.className = 'sudoku-row'; - for (let j = 0; j < SIZE; j++) { - const input = document.createElement('input'); - input.type = 'text'; - input.maxLength = 1; - input.className = 'sudoku-cell'; - input.dataset.row = i; - input.dataset.col = j; - input.addEventListener('input', (e) => { - const val = e.target.value.replace(/[^1-9]/g, ''); - e.target.value = val; - }); - rowDiv.appendChild(input); + const boardDiv = document.getElementById("sudoku-board"); + boardDiv.innerHTML = ""; + + for (let i = 0; i < SIZE; i++) { + const rowDiv = document.createElement("div"); + rowDiv.className = "sudoku-row"; + + for (let j = 0; j < SIZE; j++) { + const input = document.createElement("input"); + + input.type = "text"; + input.maxLength = 1; + input.className = "sudoku-cell"; + + input.dataset.row = i; + input.dataset.col = j; + + input.addEventListener("input", (e) => { + const value = e.target.value.replace(/[^1-9]/g, ""); + e.target.value = value; + }); + + rowDiv.appendChild(input); + } + + boardDiv.appendChild(rowDiv); } - boardDiv.appendChild(rowDiv); - } } function renderPuzzle(puz) { - puzzle = puz; - createBoardElement(); - const boardDiv = document.getElementById('sudoku-board'); - const inputs = boardDiv.getElementsByTagName('input'); - for (let i = 0; i < SIZE; i++) { - for (let j = 0; j < SIZE; j++) { - const idx = i * SIZE + j; - const val = puzzle[i][j]; - const inp = inputs[idx]; - if (val !== 0) { - inp.value = val; - inp.disabled = true; - inp.className += ' prefilled'; - } else { - inp.value = ''; - inp.disabled = false; - } + puzzle = puz; + + createBoardElement(); + + const inputs = document.querySelectorAll(".sudoku-cell"); + + for (let i = 0; i < SIZE; i++) { + for (let j = 0; j < SIZE; j++) { + + const index = i * SIZE + j; + const value = puzzle[i][j]; + const input = inputs[index]; + + if (value !== 0) { + input.value = value; + input.disabled = true; + input.classList.add("prefilled"); + } else { + input.value = ""; + input.disabled = false; + } + } } - } } async function newGame() { - const res = await fetch('/new'); - const data = await res.json(); - renderPuzzle(data.puzzle); - document.getElementById('message').innerText = ''; + + const difficulty = document.getElementById("difficulty").value; + + const response = await fetch(`/new?difficulty=${difficulty}`); + + const data = await response.json(); + + renderPuzzle(data.puzzle); + + document.getElementById("message").innerText = ""; } async function checkSolution() { - const boardDiv = document.getElementById('sudoku-board'); - const inputs = boardDiv.getElementsByTagName('input'); - const board = []; - for (let i = 0; i < SIZE; i++) { - board[i] = []; - for (let j = 0; j < SIZE; j++) { - const idx = i * SIZE + j; - const val = inputs[idx].value; - board[i][j] = val ? parseInt(val, 10) : 0; + + const inputs = document.querySelectorAll(".sudoku-cell"); + + const board = []; + + for (let i = 0; i < SIZE; i++) { + + board[i] = []; + + for (let j = 0; j < SIZE; j++) { + + const index = i * SIZE + j; + + const value = inputs[index].value; + + board[i][j] = value ? parseInt(value) : 0; + } } - } - const res = await fetch('/check', { - method: 'POST', - headers: {'Content-Type': 'application/json'}, - body: JSON.stringify({board}) - }); - const data = await res.json(); - const msg = document.getElementById('message'); - if (data.error) { - msg.style.color = '#d32f2f'; - msg.innerText = data.error; - return; - } - const incorrect = new Set(data.incorrect.map(x => x[0]*SIZE + x[1])); - for (let idx = 0; idx < inputs.length; idx++) { - const inp = inputs[idx]; - if (inp.disabled) continue; - inp.className = 'sudoku-cell'; - if (incorrect.has(idx)) { - inp.className = 'sudoku-cell incorrect'; + + const response = await fetch("/check", { + + method: "POST", + + headers: { + "Content-Type": "application/json" + }, + + body: JSON.stringify({ + board: board + }) + }); + + const data = await response.json(); + + const message = document.getElementById("message"); + + if (data.error) { + message.style.color = "red"; + message.innerText = data.error; + return; + } + + const incorrect = new Set( + data.incorrect.map(cell => cell[0] * SIZE + cell[1]) + ); + + inputs.forEach((input, index) => { + + if (input.disabled) + return; + + input.className = "sudoku-cell"; + + if (incorrect.has(index)) { + input.classList.add("incorrect"); + } + }); + + if (incorrect.size === 0) { + message.style.color = "green"; + message.innerText = "Congratulations! Puzzle solved!"; + } else { + message.style.color = "red"; + message.innerText = "Some cells are incorrect."; } - } - if (incorrect.size === 0) { - msg.style.color = '#388e3c'; - msg.innerText = 'Congratulations! You solved it!'; - } else { - msg.style.color = '#d32f2f'; - msg.innerText = 'Some cells are incorrect.'; - } } -// Wire buttons -window.addEventListener('load', () => { - document.getElementById('new-game').addEventListener('click', newGame); - document.getElementById('check-solution').addEventListener('click', checkSolution); - // initialize - newGame(); +window.addEventListener("load", () => { + + document + .getElementById("new-game") + .addEventListener("click", newGame); + + document + .getElementById("check-solution") + .addEventListener("click", checkSolution); + + newGame(); }); \ No newline at end of file diff --git a/starter/sudoku_logic.py b/starter/sudoku_logic.py index 443b24524..d8e890856 100644 --- a/starter/sudoku_logic.py +++ b/starter/sudoku_logic.py @@ -4,54 +4,98 @@ SIZE = 9 EMPTY = 0 +# Number of clues for each difficulty +DIFFICULTY_LEVELS = { + "easy": 35, + "medium": 45, + "hard": 55 +} + + def deep_copy(board): return copy.deepcopy(board) + def create_empty_board(): return [[EMPTY for _ in range(SIZE)] for _ in range(SIZE)] + def is_safe(board, row, col, num): # Check row and column for x in range(SIZE): if board[row][x] == num or board[x][col] == num: return False + # Check 3x3 box start_row = row - row % 3 start_col = col - col % 3 + for i in range(3): for j in range(3): if board[start_row + i][start_col + j] == num: return False + return True + def fill_board(board): for row in range(SIZE): for col in range(SIZE): if board[row][col] == EMPTY: - possible = list(range(1, SIZE + 1)) - random.shuffle(possible) - for candidate in possible: - if is_safe(board, row, col, candidate): - board[row][col] = candidate + numbers = list(range(1, SIZE + 1)) + random.shuffle(numbers) + + for number in numbers: + if is_safe(board, row, col, number): + board[row][col] = number + if fill_board(board): return True + board[row][col] = EMPTY + return False + return True + def remove_cells(board, clues): - attempts = SIZE * SIZE - clues - while attempts > 0: - row = random.randrange(SIZE) - col = random.randrange(SIZE) + cells_to_remove = SIZE * SIZE - clues + + while cells_to_remove > 0: + row = random.randint(0, SIZE - 1) + col = random.randint(0, SIZE - 1) + if board[row][col] != EMPTY: board[row][col] = EMPTY - attempts -= 1 + cells_to_remove -= 1 + + +def generate_puzzle(difficulty="easy"): + """ + Generate a Sudoku puzzle based on difficulty. + + Available difficulties: + - easy + - medium + - hard + """ + + difficulty = difficulty.lower() + + clues = DIFFICULTY_LEVELS.get( + difficulty, + DIFFICULTY_LEVELS["easy"] + ) -def generate_puzzle(clues=35): board = create_empty_board() + fill_board(board) + solution = deep_copy(board) + remove_cells(board, clues) + puzzle = deep_copy(board) - return puzzle, solution + + return puzzle, solution \ No newline at end of file diff --git a/starter/templates/index.html b/starter/templates/index.html index e42ad04da..b409c4491 100644 --- a/starter/templates/index.html +++ b/starter/templates/index.html @@ -1,18 +1,34 @@ - + - - Sudoku Game - + + Sudoku Game + -

Sudoku Game

-
-
- - - -
- + +

Sudoku Game

+ +
+ + + + + + + + + + +
+ +
+ + + \ No newline at end of file From 1eb96c5c073e0ed9039f90877a5ffb8f9cac3a27 Mon Sep 17 00:00:00 2001 From: Varun Siripuram Date: Tue, 28 Jul 2026 13:44:35 +0530 Subject: [PATCH 4/7] Added hint feature --- starter/app.py | 33 ++++++++ starter/static/main.js | 146 +++++++++++++++++++++++------------ starter/templates/index.html | 4 + 3 files changed, 135 insertions(+), 48 deletions(-) diff --git a/starter/app.py b/starter/app.py index de6a35ff3..01052b680 100644 --- a/starter/app.py +++ b/starter/app.py @@ -1,5 +1,6 @@ from flask import Flask, render_template, jsonify, request import sudoku_logic +import random app = Flask(__name__) @@ -32,8 +33,40 @@ def new_game(): }) +@app.route("/hint") +def get_hint(): + puzzle = CURRENT["puzzle"] + solution = CURRENT["solution"] + + if puzzle is None or solution is None: + return jsonify({"error": "No active game"}), 400 + + empty_cells = [] + + for row in range(sudoku_logic.SIZE): + for col in range(sudoku_logic.SIZE): + if puzzle[row][col] == 0: + empty_cells.append((row, col)) + + if not empty_cells: + return jsonify({"message": "Puzzle already completed"}) + + row, col = random.choice(empty_cells) + + value = solution[row][col] + + puzzle[row][col] = value + + return jsonify({ + "row": row, + "col": col, + "value": value + }) + + @app.route("/check", methods=["POST"]) def check_solution(): + if CURRENT["solution"] is None: return jsonify({"error": "No game in progress"}), 400 diff --git a/starter/static/main.js b/starter/static/main.js index 26217c147..35380e532 100644 --- a/starter/static/main.js +++ b/starter/static/main.js @@ -1,59 +1,61 @@ -// Client-side rendering and interaction for the Flask-backed Sudoku - const SIZE = 9; let puzzle = []; function createBoardElement() { - const boardDiv = document.getElementById("sudoku-board"); - boardDiv.innerHTML = ""; + const board = document.getElementById("sudoku-board"); + board.innerHTML = ""; + + for (let row = 0; row < SIZE; row++) { - for (let i = 0; i < SIZE; i++) { const rowDiv = document.createElement("div"); rowDiv.className = "sudoku-row"; - for (let j = 0; j < SIZE; j++) { + for (let col = 0; col < SIZE; col++) { + const input = document.createElement("input"); input.type = "text"; input.maxLength = 1; input.className = "sudoku-cell"; - input.dataset.row = i; - input.dataset.col = j; + input.dataset.row = row; + input.dataset.col = col; - input.addEventListener("input", (e) => { - const value = e.target.value.replace(/[^1-9]/g, ""); - e.target.value = value; + input.addEventListener("input", function (e) { + e.target.value = e.target.value.replace(/[^1-9]/g, ""); }); rowDiv.appendChild(input); } - boardDiv.appendChild(rowDiv); + board.appendChild(rowDiv); } } -function renderPuzzle(puz) { - puzzle = puz; +function renderPuzzle(board) { + + puzzle = board; createBoardElement(); - const inputs = document.querySelectorAll(".sudoku-cell"); + const cells = document.querySelectorAll(".sudoku-cell"); + + for (let row = 0; row < SIZE; row++) { - for (let i = 0; i < SIZE; i++) { - for (let j = 0; j < SIZE; j++) { + for (let col = 0; col < SIZE; col++) { - const index = i * SIZE + j; - const value = puzzle[i][j]; - const input = inputs[index]; + const index = row * SIZE + col; + + if (board[row][col] !== 0) { + + cells[index].value = board[row][col]; + cells[index].disabled = true; + cells[index].classList.add("prefilled"); - if (value !== 0) { - input.value = value; - input.disabled = true; - input.classList.add("prefilled"); } else { - input.value = ""; - input.disabled = false; + + cells[index].value = ""; + cells[index].disabled = false; } } } @@ -61,9 +63,11 @@ function renderPuzzle(puz) { async function newGame() { - const difficulty = document.getElementById("difficulty").value; + const difficulty = + document.getElementById("difficulty").value; - const response = await fetch(`/new?difficulty=${difficulty}`); + const response = + await fetch(`/new?difficulty=${difficulty}`); const data = await response.json(); @@ -72,23 +76,50 @@ async function newGame() { document.getElementById("message").innerText = ""; } +async function hint() { + + const response = await fetch("/hint"); + + const data = await response.json(); + + if (data.error) { + + document.getElementById("message").innerText = + data.error; + + return; + } + + const cells = + document.querySelectorAll(".sudoku-cell"); + + const index = + data.row * SIZE + data.col; + + cells[index].value = data.value; + cells[index].disabled = true; + cells[index].classList.add("prefilled"); +} + async function checkSolution() { - const inputs = document.querySelectorAll(".sudoku-cell"); + const cells = + document.querySelectorAll(".sudoku-cell"); const board = []; - for (let i = 0; i < SIZE; i++) { + for (let row = 0; row < SIZE; row++) { - board[i] = []; + board[row] = []; - for (let j = 0; j < SIZE; j++) { + for (let col = 0; col < SIZE; col++) { - const index = i * SIZE + j; + const index = row * SIZE + col; - const value = inputs[index].value; - - board[i][j] = value ? parseInt(value) : 0; + board[row][col] = + cells[index].value === "" + ? 0 + : parseInt(cells[index].value); } } @@ -103,52 +134,71 @@ async function checkSolution() { body: JSON.stringify({ board: board }) + }); const data = await response.json(); - const message = document.getElementById("message"); + const message = + document.getElementById("message"); if (data.error) { + message.style.color = "red"; message.innerText = data.error; + return; } - const incorrect = new Set( - data.incorrect.map(cell => cell[0] * SIZE + cell[1]) - ); + const incorrect = + new Set( + data.incorrect.map( + cell => cell[0] * SIZE + cell[1] + ) + ); - inputs.forEach((input, index) => { + cells.forEach((cell, index) => { - if (input.disabled) + if (cell.disabled) return; - input.className = "sudoku-cell"; + cell.className = "sudoku-cell"; if (incorrect.has(index)) { - input.classList.add("incorrect"); + + cell.classList.add("incorrect"); } + }); if (incorrect.size === 0) { + message.style.color = "green"; - message.innerText = "Congratulations! Puzzle solved!"; + message.innerText = + "Congratulations! You solved the puzzle!"; + } else { + message.style.color = "red"; - message.innerText = "Some cells are incorrect."; + message.innerText = + "Some cells are incorrect."; + } } -window.addEventListener("load", () => { +window.onload = function () { document .getElementById("new-game") .addEventListener("click", newGame); + document + .getElementById("hint") + .addEventListener("click", hint); + document .getElementById("check-solution") .addEventListener("click", checkSolution); newGame(); -}); \ No newline at end of file +}; \ No newline at end of file diff --git a/starter/templates/index.html b/starter/templates/index.html index b409c4491..13d7490bb 100644 --- a/starter/templates/index.html +++ b/starter/templates/index.html @@ -20,6 +20,10 @@

Sudoku Game

+ + + + From 12ac09850ae3cebf1bdd0460e71c739dfd5786b7 Mon Sep 17 00:00:00 2001 From: Varun Siripuram Date: Tue, 28 Jul 2026 14:04:20 +0530 Subject: [PATCH 5/7] Added immediate invalid entry feedback --- starter/app.py | 34 +++++++++++++++---- starter/static/main.js | 76 +++++++++++++++++++++++++----------------- 2 files changed, 73 insertions(+), 37 deletions(-) diff --git a/starter/app.py b/starter/app.py index 01052b680..a70031c0b 100644 --- a/starter/app.py +++ b/starter/app.py @@ -41,17 +41,17 @@ def get_hint(): if puzzle is None or solution is None: return jsonify({"error": "No active game"}), 400 - empty_cells = [] + empty = [] - for row in range(sudoku_logic.SIZE): - for col in range(sudoku_logic.SIZE): - if puzzle[row][col] == 0: - empty_cells.append((row, col)) + for r in range(sudoku_logic.SIZE): + for c in range(sudoku_logic.SIZE): + if puzzle[r][c] == 0: + empty.append((r, c)) - if not empty_cells: + if not empty: return jsonify({"message": "Puzzle already completed"}) - row, col = random.choice(empty_cells) + row, col = random.choice(empty) value = solution[row][col] @@ -64,6 +64,26 @@ def get_hint(): }) +# ---------- NEW ROUTE ---------- +@app.route("/validate", methods=["POST"]) +def validate_cell(): + + if CURRENT["solution"] is None: + return jsonify({"error": "No active game"}), 400 + + data = request.get_json() + + row = int(data["row"]) + col = int(data["col"]) + value = int(data["value"]) + + correct = CURRENT["solution"][row][col] == value + + return jsonify({ + "correct": correct + }) + + @app.route("/check", methods=["POST"]) def check_solution(): diff --git a/starter/static/main.js b/starter/static/main.js index 35380e532..524652cb1 100644 --- a/starter/static/main.js +++ b/starter/static/main.js @@ -21,8 +21,34 @@ function createBoardElement() { input.dataset.row = row; input.dataset.col = col; - input.addEventListener("input", function (e) { + input.addEventListener("input", async function (e) { + e.target.value = e.target.value.replace(/[^1-9]/g, ""); + + if (e.target.value === "") { + e.target.classList.remove("incorrect"); + return; + } + + const response = await fetch("/validate", { + method: "POST", + headers: { + "Content-Type": "application/json" + }, + body: JSON.stringify({ + row: row, + col: col, + value: parseInt(e.target.value) + }) + }); + + const data = await response.json(); + + if (data.correct) { + e.target.classList.remove("incorrect"); + } else { + e.target.classList.add("incorrect"); + } }); rowDiv.appendChild(input); @@ -75,7 +101,6 @@ async function newGame() { document.getElementById("message").innerText = ""; } - async function hint() { const response = await fetch("/hint"); @@ -83,18 +108,13 @@ async function hint() { const data = await response.json(); if (data.error) { - - document.getElementById("message").innerText = - data.error; - + document.getElementById("message").innerText = data.error; return; } - const cells = - document.querySelectorAll(".sudoku-cell"); + const cells = document.querySelectorAll(".sudoku-cell"); - const index = - data.row * SIZE + data.col; + const index = data.row * SIZE + data.col; cells[index].value = data.value; cells[index].disabled = true; @@ -103,8 +123,7 @@ async function hint() { async function checkSolution() { - const cells = - document.querySelectorAll(".sudoku-cell"); + const cells = document.querySelectorAll(".sudoku-cell"); const board = []; @@ -134,13 +153,11 @@ async function checkSolution() { body: JSON.stringify({ board: board }) - }); const data = await response.json(); - const message = - document.getElementById("message"); + const message = document.getElementById("message"); if (data.error) { @@ -150,26 +167,26 @@ async function checkSolution() { return; } - const incorrect = - new Set( - data.incorrect.map( - cell => cell[0] * SIZE + cell[1] - ) - ); + const incorrect = new Set( + data.incorrect.map(cell => cell[0] * SIZE + cell[1]) + ); cells.forEach((cell, index) => { - if (cell.disabled) - return; - - cell.className = "sudoku-cell"; + if (cell.disabled) + return; - if (incorrect.has(index)) { + cell.className = "sudoku-cell"; - cell.classList.add("incorrect"); - } + // Do not highlight empty cells + if (cell.value === "") { + return; + } - }); + if (incorrect.has(index)) { + cell.classList.add("incorrect"); + } +}); if (incorrect.size === 0) { @@ -182,7 +199,6 @@ async function checkSolution() { message.style.color = "red"; message.innerText = "Some cells are incorrect."; - } } From ad23c63e4a4ca57a4651ae9b607d09fcda95929a Mon Sep 17 00:00:00 2001 From: Varun Siripuram Date: Tue, 28 Jul 2026 14:15:45 +0530 Subject: [PATCH 6/7] Added timer feature --- starter/static/main.js | 57 ++++++++++++++++++----- starter/static/styles.css | 87 ++++++++++++++++++++++-------------- starter/templates/index.html | 22 +++++---- 3 files changed, 113 insertions(+), 53 deletions(-) diff --git a/starter/static/main.js b/starter/static/main.js index 524652cb1..38aa664f1 100644 --- a/starter/static/main.js +++ b/starter/static/main.js @@ -1,6 +1,35 @@ const SIZE = 9; let puzzle = []; +// ---------------- TIMER ---------------- +let timer = null; +let seconds = 0; + +function startTimer() { + clearInterval(timer); + seconds = 0; + updateTimer(); + + timer = setInterval(function () { + seconds++; + updateTimer(); + }, 1000); +} + +function stopTimer() { + clearInterval(timer); +} + +function updateTimer() { + const minutes = String(Math.floor(seconds / 60)).padStart(2, "0"); + const secs = String(seconds % 60).padStart(2, "0"); + + document.getElementById("timer").innerText = + `Time: ${minutes}:${secs}`; +} +// --------------------------------------- + + function createBoardElement() { const board = document.getElementById("sudoku-board"); board.innerHTML = ""; @@ -99,8 +128,12 @@ async function newGame() { renderPuzzle(data.puzzle); + // Start timer for every new game + startTimer(); + document.getElementById("message").innerText = ""; } + async function hint() { const response = await fetch("/hint"); @@ -173,20 +206,19 @@ async function checkSolution() { cells.forEach((cell, index) => { - if (cell.disabled) - return; + if (cell.disabled) + return; - cell.className = "sudoku-cell"; + cell.className = "sudoku-cell"; - // Do not highlight empty cells - if (cell.value === "") { - return; - } + if (cell.value === "") { + return; + } - if (incorrect.has(index)) { - cell.classList.add("incorrect"); - } -}); + if (incorrect.has(index)) { + cell.classList.add("incorrect"); + } + }); if (incorrect.size === 0) { @@ -194,6 +226,9 @@ async function checkSolution() { message.innerText = "Congratulations! You solved the puzzle!"; + // Stop timer when solved + stopTimer(); + } else { message.style.color = "red"; diff --git a/starter/static/styles.css b/starter/static/styles.css index 1a6218ff9..be77ac6df 100644 --- a/starter/static/styles.css +++ b/starter/static/styles.css @@ -11,12 +11,57 @@ h1 { color: #333; } +.controls { + margin: 20px auto; +} + +label { + font-size: 16px; + font-weight: bold; +} + +select { + padding: 8px; + font-size: 16px; + margin: 0 10px; +} + +button { + padding: 8px 18px; + margin: 0 8px; + font-size: 16px; + border: none; + background: #1976d2; + color: white; + border-radius: 4px; + cursor: pointer; + transition: background 0.2s; +} + +button:hover { + background: #1565c0; +} + +#timer { + margin: 15px; + font-size: 22px; + font-weight: bold; + color: #1976d2; +} + +#message { + display: block; + margin-top: 15px; + font-size: 18px; + font-weight: bold; +} + #sudoku-board { display: inline-block; - margin: 30px auto; + margin: 20px auto; border: 4px solid #333; - background: #fff; - box-shadow: 0 2px 8px rgba(0,0,0,0.1); + background: white; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); } .sudoku-row { @@ -24,11 +69,11 @@ h1 { } .sudoku-cell { - width: 40px; - height: 40px; + width: 45px; + height: 45px; border: 1px solid #bbb; text-align: center; - font-size: 20px; + font-size: 22px; outline: none; background: #fafafa; transition: background 0.2s; @@ -46,6 +91,8 @@ h1 { .sudoku-cell.incorrect { background: #ffcdd2; + color: #d32f2f; + font-weight: bold; } .sudoku-cell:nth-child(3), @@ -56,30 +103,4 @@ h1 { .sudoku-row:nth-child(3) .sudoku-cell, .sudoku-row:nth-child(6) .sudoku-cell { border-bottom: 3px solid #333; -} - -.controls { - margin: 20px auto; -} - -button { - padding: 8px 18px; - margin: 0 8px; - font-size: 16px; - border: none; - background: #1976d2; - color: #fff; - border-radius: 4px; - cursor: pointer; - transition: background 0.2s; -} - -button:hover { - background: #1565c0; -} - -#message { - margin-left: 20px; - font-size: 16px; - color: #d32f2f; -} +} \ No newline at end of file diff --git a/starter/templates/index.html b/starter/templates/index.html index 13d7490bb..b914ddb09 100644 --- a/starter/templates/index.html +++ b/starter/templates/index.html @@ -1,10 +1,14 @@ - + + - + + Sudoku Game - + + +

Sudoku Game

@@ -14,25 +18,25 @@

Sudoku Game

- - - +
Time: 00:00
+
- + + \ No newline at end of file From 2c75627aadf5b7f504a386f36af9dd664a4a0031 Mon Sep 17 00:00:00 2001 From: Varun Siripuram Date: Tue, 28 Jul 2026 14:29:13 +0530 Subject: [PATCH 7/7] Added project screenshots --- screenshots/01_difficulty_levels.png.png | Bin 0 -> 19762 bytes screenshots/01_home_page.png.png | Bin 0 -> 17715 bytes screenshots/02_hint_feature.png..png | Bin 0 -> 20413 bytes screenshots/03_immediate_validation.png.png | Bin 0 -> 22905 bytes screenshots/04_timer_feature.png.png | Bin 0 -> 32293 bytes 5 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 screenshots/01_difficulty_levels.png.png create mode 100644 screenshots/01_home_page.png.png create mode 100644 screenshots/02_hint_feature.png..png create mode 100644 screenshots/03_immediate_validation.png.png create mode 100644 screenshots/04_timer_feature.png.png diff --git a/screenshots/01_difficulty_levels.png.png b/screenshots/01_difficulty_levels.png.png new file mode 100644 index 0000000000000000000000000000000000000000..053b53d27a63452807ebf94d69a5c2b6f0ed40be GIT binary patch literal 19762 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 !29R0+2n-@|p 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 literal 0 HcmV?d00001 diff --git a/screenshots/04_timer_feature.png.png b/screenshots/04_timer_feature.png.png new file mode 100644 index 0000000000000000000000000000000000000000..b57fa7abcae68b8fbdd3f5790391e0fbc6c1c89b GIT binary patch literal 32293 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­OoY7<{ivn(E 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 literal 0 HcmV?d00001