JSFiddle - React, Tailwind, and code Playground
by philwills
HTML
<!DOCTYPE html>
<!-- TODO: Generate puzzle -->
<html>
<title>Soduku</title>
<table>
<tr>
<td><input type="text" name="x0y0">
<td><input type="text" name="x1y0">
<td><input type="text" name="x2y0">
<td><input type="text" name="x3y0">
<td><input type="text" name="x4y0">
<td><input type="text" name="x5y0">
<td><input type="text" name="x6y0">
<td><input type="text" name="x7y0">
<td><input type="text" name="x8y0">
</tr>
<tr>
<td><input type="text" name="x0y1">
<td><input type="text" name="x1y1">
<td><input type="text" name="x2y1">
<td><input type="text" name="x3y1">
<td><input type="text" name="x4y1">
<td><input type="text" name="x5y1">
<td><input type="text" name="x6y1">
<td><input type="text" name="x7y1">
<td><input type="text" name="x8y1">
</tr>
<tr>
<td><input type="text" name="x0y2">
<td><input type="text" name="x1y2">
<td><input type="text" name="x2y2">
<td><input type="text" name="x3y2">
<td><input type="text" name="x4y2">
<td><input type="text" name="x5y2">
<td><input type="text" name="x6y2">
<td><input type="text" name="x7y2">
<td><input type="text" name="x8y2">
</tr>
<tr>
<td><input type="text" name="x0y3">
<td><input type="text" name="x1y3">
<td><input type="text" name="x2y3">
<td><input type="text" name="x3y3">
<td><input type="text" name="x4y3">
<td><input type="text" name="x5y3">
<td><input type="text" name="x6y3">
<td><input type="text" name="x7y3">
<td><input type="text" name="x8y3">
</tr>
<tr>
<td><input type="text" name="x0y4">
<td><input type="text" name="x1y4">
<td><input type="text" name="x2y4">
<td><input type="text" name="x3y4">
<td><input type="text" name="x4y4">
<td><input type="text" name="x5y4">
<td><input type="text" name="x6y4">
<td><input type="text" name="x7y4">
<td><input type="text" name="x8y4">
</tr>
<tr>
<td><input type="text" name="x0y5">
<td><input type="text"...
CSS
table, td {
border: 1px solid black;
}
td {
height: 60px;
width: 60px;
text-align: center;
}
table {
border-collapse: collapse;
}
input {
height: 50px;
width: 50px;
border: none;
text-align: center;
font-size: 30px;
}
JavaScript
var colVal = [[], [], [], [], [], [], [], [], []];
var rowVal = [[], [], [], [], [], [], [], [], []];
var squareVal = [[], [], [], [], [], [], [], [], []];
// Validate columns
function valCols() {
for(var a = 0; a < colVal.length; a++) {
if(areValuesValid(colVal[a]) !== true) {
return false;
}
}
return true;
}
function valRows() {
for(var a = 0; a < rowVal.length; a++) {
if(areValuesValid(rowVal[a]) !== true) {
return false;
}
}
return true;
}
function valSquares() {
for(var a = 0; a < squareVal.length; a++) {
if(areValuesValid(squareVal[a]) !== true) {
return false;
}
}
return true;
}
function areValuesValid(numArray) {
for(var i = 0; i < numArray.length; i++) {
if (!numArray[i] < 10 && !numArray[i] > 0) {
alert("Invalid input! (Must be between 0 and 10)");
return false;
}
for(var j = 0; j < numArray.length; j++) {
if (i == j) {
continue;
} else if (numArray[i] == numArray[j]) {
alert("Invalid input! (Each cell's value must be different)");
return false;
}
}
}
return true;
}
function getcellVal() {
// Numbers by column
colVal = [[x0y0.value, x0y1.value, x0y2.value, x0y3.value, x0y4.value, x0y5.value, x0y6.value, x0y7.value, x0y8.value],
[x1y0.value, x1y1.value, x1y2.value, x1y3.value, x1y4.value, x1y5.value, x1y6.value, x1y7.value, x1y8.value],
[x2y0.value, x2y1.value, x2y2.value, x2y3.value, x2y4.value, x2y5.value, x2y6.value, x2y7.value, x2y8.value],
[x3y0.value, x3y1.value, x3y2.value, x3y3.value, x3y4.value, x3y5.value, x3y6.value, x3y7.value, x3y8.value],
[x4y0.value, x4y1.value, x4y2.value, x4y3.value, x4y4.value, x4y5.value, x4y6.value, x4y7.value, x4y8.value],
[x5y0.value, x5y1.value, x5y2.value, x5y3.value, x5y4.value, x5y5.value, x5y6.value, x5y7.value, x5y8.value],
[x6y0.value, x6y1.value, x6y2.value, x6y3.value, x6y4.value, x6y5.value, x6y6.value, x6y7.value, x6y8.value],
[x7y0.value, x7y1.value, x7y2.value, x7y3.value, x7y4.value, x7y5.value,...