I am trying to write an little fun website in which allows a user to input numbers entered on a keyboard, and on the event of a solve button press (which I have not included yet in the below code) will attempt to solve, then output, the Sudoku in the boxes of .card
What do I implement in my .js file in order to capture the input then change the respective cards value to a number?
.card.[number entered]::before { content: [number entered] }
<-- will be used
As well as, inputting the entered numeric-key in to the JavaScript grid
array, in order to be solved?
How would I then output the solved JS grid
into its respective .card.[number entered]::before { content: [number entered] }
?
If this is confusing, please let me know and I will try to include more information.
index.html:
let MAX = 9,
BLANK = 0,
SPACE = " ",
LINE = "|",
NEW_ROW = "-------------------------------------";
let grid = [
[8, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 3, 6, 0, 0, 0, 0, 0],
[0, 7, 0, 0, 9, 0, 2, 0, 0],
[0, 5, 0, 0, 0, 7, 0, 0, 0],
[0, 0, 0, 0, 4, 5, 7, 0, 0],
[0, 0, 0, 1, 0, 0, 0, 3, 0],
[0, 0, 1, 0, 0, 0, 0, 6, 8],
[0, 0, 8, 5, 0, 0, 0, 1, 0],
[0, 9, 0, 0, 0, 0, 4, 0, 0]
];
let pair = [0, 0];
function test() {
console.log(grid);
if (solve(grid)) {
console.log(grid);
} else {
console.log("No solution exists for the given Sudoku");
}
}
function used_in_row(grid, row, num) {
for (let col = 0; col < MAX; col++) {
if (grid[row][col] === num) {
return true;
}
}
return false;
}
function used_in_col(grid, col, num) {
for (let row = 0; row < MAX; row++) {
if (grid[row][col] === num) {
return true;
}
}
return false;
}
function used_in_box(grid, box_start_row, box_start_col, num) {
for (let row = 0; row < 3; row++) {
for (let col = 0; col < 3; col++) {
if (grid[row + box_start_row][col + box_start_col] === num) {
return true;
}
}
}
return false;
}
function is_safe(grid, row, col, num) {
return !used_in_row(grid, row, num) &&
!used_in_col(grid, col, num) &&
!used_in_box(grid, row - row % 3, col - col % 3, num);
}
function get_unassigned_location(grid) {
for (let row = 0; row < MAX; row++) {
for (let col = 0; col < MAX; col++) {
if (grid[row][col] === BLANK) {
pair[0] = row;
pair[1] = [col];
return pair;
}
}
}
return "GRID_FULL";
}
function solve(grid) {
if ("GRID_FULL" === get_unassigned_location(grid)) {
return true;
}
pair = get_unassigned_location(grid);
let row = pair[0];
let col = pair[1];
for (let num = 1; num <= 9; num++) {
if (is_safe(grid, row, col, num)) {
grid[row][col] = num;
if (solve(grid)) {
return true;
}
grid[row][col] = BLANK;
}
}
return false;
}
* {
box-sizing: border-box;
font-family: sans-serif;
font-size: 5px;
}
body {
margin: 0;
padding: 0;
width: 100%;
height: 100vh;
display: flex;
justify-content: center;
align-items: center;
background-color: white;
font-size: 5px;
}
.container {
width: 500px;
height: 500px;
display: grid;
background-color: #e64a19;
grid-gap: 3px;
border: 2px solid black;
grid-template-columns: auto auto auto auto auto auto auto auto auto;
grid-auto-rows: auto auto auto auto auto auto auto auto auto;
z-index: 9999;
}
.card {
position: relative;
background-color: white;
cursor: pointer;
}
.card::before {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
display: flex;
justify-content: center;
align-items: center;
font-weight: bold;
font-size: 8rem;
}
.card.1::before {
content: "1";
}
.card.2::before {
content: "2";
}
.card.3::before {
content: "3";
}
.card.4::before {
content: "4";
}
.card.5::before {
content: "5";
}
.card.6::before {
content: "6";
}
.card.7::before {
content: "7";
}
.card.8::before {
content: "8";
}
.card.9::before {
content: "9";
}
.winner {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
position: fixed;
width: 400px;
height: 200px;
padding: 20px 40px;
background-color: #fff;
font-size: 2rem;
border-radius: 20px;
text-align: center;
animation: animate 0.5s linear;
}
@keyframes animate {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
.winner button {
margin-top: 20px;
width: 80px;
height: 35px;
line-height: 35px;
padding: 0;
border: 0;
outline: 0;
border-radius: 20px;
cursor: pointer;
color: #fff;
background-color: black;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title></title>
<link rel="stylesheet" href="./style.css" />
</head>
<body>
<div class="container">
<div class="card" data-index="1"></div>
<div class="card" data-index="2"></div>
<div class="card" data-index="3"></div>
<div class="card" data-index="4"></div>
<div class="card" data-index="5"></div>
<div class="card" data-index="6"></div>
<div class="card" data-index="7"></div>
<div class="card" data-index="8"></div>
<div class="card" data-index="9"></div>
<div class="card" data-index="10"></div>
<div class="card" data-index="11"></div>
<div class="card" data-index="12"></div>
<div class="card" data-index="13"></div>
<div class="card" data-index="14"></div>
<div class="card" data-index="15"></div>
<div class="card" data-index="16"></div>
<div class="card" data-index="17"></div>
<div class="card" data-index="18"></div>
<div class="card" data-index="19"></div>
<div class="card" data-index="20"></div>
<div class="card" data-index="21"></div>
<div class="card" data-index="22"></div>
<div class="card" data-index="23"></div>
<div class="card" data-index="24"></div>
<div class="card" data-index="25"></div>
<div class="card" data-index="26"></div>
<div class="card" data-index="27"></div>
<div class="card" data-index="28"></div>
<div class="card" data-index="29"></div>
<div class="card" data-index="30"></div>
<div class="card" data-index="31"></div>
<div class="card" data-index="32"></div>
<div class="card" data-index="33"></div>
<div class="card" data-index="34"></div>
<div class="card" data-index="35"></div>
<div class="card" data-index="36"></div>
<div class="card" data-index="37"></div>
<div class="card" data-index="38"></div>
<div class="card" data-index="39"></div>
<div class="card" data-index="40"></div>
<div class="card" data-index="41"></div>
<div class="card" data-index="42"></div>
<div class="card" data-index="43"></div>
<div class="card" data-index="44"></div>
<div class="card" data-index="45"></div>
<div class="card" data-index="46"></div>
<div class="card" data-index="47"></div>
<div class="card" data-index="48"></div>
<div class="card" data-index="49"></div>
<div class="card" data-index="50"></div>
<div class="card" data-index="51"></div>
<div class="card" data-index="52"></div>
<div class="card" data-index="53"></div>
<div class="card" data-index="54"></div>
<div class="card" data-index="55"></div>
<div class="card" data-index="56"></div>
<div class="card" data-index="57"></div>
<div class="card" data-index="58"></div>
<div class="card" data-index="59"></div>
<div class="card" data-index="60"></div>
<div class="card" data-index="61"></div>
<div class="card" data-index="62"></div>
<div class="card" data-index="63"></div>
<div class="card" data-index="64"></div>
<div class="card" data-index="65"></div>
<div class="card" data-index="66"></div>
<div class="card" data-index="67"></div>
<div class="card" data-index="68"></div>
<div class="card" data-index="69"></div>
<div class="card" data-index="70"></div>
<div class="card" data-index="71"></div>
<div class="card" data-index="72"></div>
<div class="card" data-index="73"></div>
<div class="card" data-index="74"></div>
<div class="card" data-index="75"></div>
<div class="card" data-index="76"></div>
<div class="card" data-index="77"></div>
<div class="card" data-index="78"></div>
<div class="card" data-index="79"></div>
<div class="card" data-index="80"></div>
<div class="card" data-index="81"></div>
</div>
<script src="./script.js"></script>
</body>
</html>
How the grid looks like