diff --git a/JavaScript Solution/index.html b/JavaScript Solution/index.html new file mode 100644 index 0000000..9d73ca3 --- /dev/null +++ b/JavaScript Solution/index.html @@ -0,0 +1,25 @@ + + + + + + + Sudoku + + + + +
+ + +
+ +

Result:

+
+ + + + + + + \ No newline at end of file diff --git a/JavaScript Solution/script.js b/JavaScript Solution/script.js new file mode 100644 index 0000000..0842cec --- /dev/null +++ b/JavaScript Solution/script.js @@ -0,0 +1,38 @@ +function getBoardFromInputs() { + let sudokuInputs = document.querySelectorAll("#sudoku-board input"); + let sudokuBoard = []; + + sudokuInputs.forEach((input, index) => { + let rowIndex = Math.floor(index / 9); + let colIndex = index % 9; + + if (!sudokuBoard[rowIndex]) { + sudokuBoard[rowIndex] = []; + } + + sudokuBoard[rowIndex][colIndex] = parseInt(input.value) || 0; + }); + + return sudokuBoard; +} + +function initializeBoard() { + let table = document.getElementById("sudoku-board"); + for (let i = 0; i < 9; i++) { + let row = table.insertRow(); + for (let j = 0; j < 9; j++) { + let cell = row.insertCell(); + let value = board[i][j]; + let input = document.createElement("input"); + input.type = "text"; + input.maxLength = 1; + input.value = value === "." ? "" : value; + input.addEventListener("input", function () { + // Update the value in the board1 array when user changes input + board[i][j] = this.value === "" ? "." : this.value; + }); + cell.appendChild(input); + } + } +} +window.onload = initializeBoard; diff --git a/JavaScript Solution/styles.css b/JavaScript Solution/styles.css new file mode 100644 index 0000000..ecee093 --- /dev/null +++ b/JavaScript Solution/styles.css @@ -0,0 +1,49 @@ +.sudoku-container { + margin: 50px auto; + text-align: center; +} + +#sudoku-board { + border-collapse: collapse; + margin: 0 auto; +} + +#sudoku-board td { + border: 1px solid #000; + width: 50px; + height: 50px; +} + +#sudoku-board input { + height: 100%; + max-width: 50px; + text-align: center; + font-size: 1.2em; +} +@import url("https://fonts.googleapis.com/css2?family=Bebas+Neue&family=Koulen&family=Lato&family=Nunito&family=Playfair+Display:ital@1&family=Prata&family=Raleway:ital,wght@1,100&family=Roboto&family=Roboto+Condensed&family=Teko&display=swap"); + +.validButton { + margin-top: 20px; + font-family: Roboto, sans-serif; + font-weight: 0; + font-size: 14px; + color: #fff; + background: linear-gradient(90deg, #0066cc 0%, #c500cc 100%); + padding: 10px 30px; + border: 2px solid #0066cc; + box-shadow: rgb(0, 0, 0) 0px 0px 0px 0px; + border-radius: 50px; + transition: 1000ms; + transform: translateY(0); + align-items: center; + cursor: pointer; +} + +.validButton:hover { + transition: 1000ms; + padding: 10px 50px; + transform: translateY(-0px); + background: linear-gradient(90deg, #0066cc 0%, #c500cc 100%); + color: #0066cc; + border: solid 2px #0066cc; +} diff --git a/JavaScript Solution/yourScript.js b/JavaScript Solution/yourScript.js new file mode 100644 index 0000000..6f583d6 --- /dev/null +++ b/JavaScript Solution/yourScript.js @@ -0,0 +1,73 @@ +let board = [ + ["5", "3", ".", ".", "7", ".", ".", ".", "."], + ["6", ".", ".", "1", "9", "5", ".", ".", "."], + [".", "9", "8", ".", ".", ".", ".", "6", "."], + ["8", ".", ".", ".", "6", ".", ".", ".", "3"], + ["4", ".", ".", "8", ".", "3", ".", ".", "1"], + ["7", ".", ".", ".", "2", ".", ".", ".", "6"], + [".", "6", ".", ".", ".", ".", "2", "8", "."], + [".", ".", ".", "4", "1", "9", ".", ".", "5"], + [".", ".", ".", ".", "8", ".", ".", "7", "9"], +]; + +function isValidRow(board, row) { + let seen = new Set(); + for (let i = 0; i < 9; i++) { + let num = board[row][i]; + if (num !== 0 && seen.has(num)) { + return false; + } + seen.add(num); + } + return true; +} + +function isValidColumn(board, col) { + let seen = new Set(); + for (let i = 0; i < 9; i++) { + let num = board[i][col]; + if (num !== 0 && seen.has(num)) { + return false; + } + seen.add(num); + } + return true; +} + +function isValidSubgrid(board, startRow, startCol) { + let seen = new Set(); + for (let row = startRow; row < startRow + 3; row++) { + for (let col = startCol; col < startCol + 3; col++) { + let num = board[row][col]; + if (num !== 0 && seen.has(num)) { + return false; + } + seen.add(num); + } + } + return true; +} + +function isValidSudoku(board) { + result: HTMLElement = document.getElementById("result"); + + for (let i = 0; i < 9; i++) { + if (!isValidRow(board, i) || !isValidColumn(board, i)) { + console.log("Board is Unvalid"); + result.innerHTML = "Result: Unvalid"; + return false; + } + } + for (let i = 0; i < 9; i += 3) { + for (let j = 0; j < 9; j += 3) { + if (!isValidSubgrid(board, i, j)) { + console.log("Board is Unvalid"); + result.innerHTML = "Result: Unvalid"; + return false; + } + } + } + console.log("Board is Valid"); + result.innerHTML = "Result: Valid"; + return true; +}