JSFiddle - React, Tailwind, and code Playground
HTML
<body>
<a href = "#" id = "solve-link">Решить</a>
<table class = "sudoku-table">
<tr>
<td id = "c00">1</td>
<td id = "c01">2</td>
<td id = "c02">3</td>
<td id = "c03">4</td>
<td id = "c04">5</td>
<td id = "c05">6</td>
<td id = "c06">7</td>
<td id = "c07">8</td>
<td id = "c08">9</td>
</tr>
<tr>
<td id = "c10">4</td>
<td id = "c11">5</td>
<td id = "c12">6</td>
<td id = "c13">7</td>
<td id = "c14">8</td>
<td id = "c15">9</td>
<td id = "c16">1</td>
<td id = "c17">2</td>
<td id = "c18">3</td>
</tr>
<tr>
<td id = "c20">7</td>
<td id = "c21">8</td>
<td id = "c22">9</td>
<td id = "c23">1</td>
<td id = "c24">2</td>
<td id = "c25">3</td>
<td id = "c26">4</td>
<td id = "c27">5</td>
<td id = "c28">6</td>
</tr>
<tr>
<td id = "c30">2</td>
<td id = "c31">3</td>
<td id = "c32">4</td>
<td id = "c33">5</td>
<td id = "c34">6</td>
<td id = "c35">7</td>
<td id = "c36">8</td>
<td id = "c37">9</td>
<td id = "c38">1</td>
</tr>
<tr>
<td id = "c40">5</td>
<td id = "c41">6</td>
<td id = "c42">7</td>
<td id = "c43">8</td>
<td id = "c44">9</td>
<td id = "c45">1</td>
<td id = "c46">2</td>
<td id = "c47">3</td>
<td id = "c48">4</td>
</tr
<tr>
<td id = "c50">8</td>
<td id = "c51">9</td>
<td id = "c52">1</td>
<td id = "c53">2</td>
<td id = "c54">3</td>
<td id = "c55">4</td>
<td id = "c56">5</td>
<td id = "c57">6</td>
<td id = "c58">7</td>
</tr>
<tr>
<td id = "c60">3</td>
<td id = "c61">4</td>
<td id = "c62">5</td>
<td id = "c63">6</td>
<td id = "c64">7</td>
<td id = "c65">8</td>
<td id = "c66">9</td>
<td id = "c67">1</td>
<td id = "c68">2</td>
</tr>
<tr>
<td id = "c70">6</td>
<td id = "c71">7</td>
<td id = "c72">8</td>
<td id = "c73">9</td>
<td id = "c74">1</td>
<td id...
CSS
.sudoku-table
{
font-family: "Courier New";
border-spacing: 0;
}
.sudoku-table td
{
width: 20px;
height: 20px;
border-left: 1px solid black;
border-top: 1px solid black;
padding: 0px;
text-align: center;
}
#c80, #c81, #c82, #c83, #c84, #c85, #c86, #c87, #c88
{
border-bottom: 1px solid black;
}
#c08, #c18, #c28, #c38, #c48, #c58, #c68, #c78, #c88
{
border-right: 1px solid black;
}
#c02, #c12, #c22, #c32, #c42, #c52, #c62, #c72, #c82,
#c05, #c15, #c25, #c35, #c45, #c55, #c65, #c75, #c85
{
border-right: 2px solid black;
}
#c20, #c21, #c22, #c23, #c24, #c25, #c26, #c27, #c28,
#c50, #c51, #c52, #c53, #c54, #c55, #c56, #c57, #c58
{
border-bottom: 2px solid black;
}
JavaScript
g = [[1,2,3,4,5,6,7,8,9], [4,5,6,7,8,9,1,2,3], [7,8,9,1,2,3,4,5,6], [2,3,4,5,6,7,8,9,1], [5,6,7,8,9,1,2,3,4],
[8,9,1,2,3,4,5,6,7], [3,4,5,6,7,8,9,1,2], [6,7,8,9,1,2,3,4,5], [9,1,2,3,4,5,6,7,8]];
var $ = function(id) { return document.getElementById(id); }
var r = function(a) {
if (a == undefined) return Math.floor(Math.random() * 3) + 1;
return Math.floor(Math.random() * 3) + (a - 1) * 3; };
var u = function(a, o) {
o.j = o.i = r(a);
while (o.i == o.j) o.j = r(a); };
var f = function(flushes, cells_to_hide) {
for (var i = 0; i < flushes; i++) {
var rows = {}; u(r(), rows); var cols = {}; u(r(), cols);
for (var j = 0; j < 9; j++) {
var tdr1 = $("c" + rows.i + j);
var tdr2 = $("c" + rows.j + j);
var tmp = tdr1.innerHTML; tdr1.innerHTML = tdr2.innerHTML; tdr2.innerHTML = tmp;
tmp = g[rows.i][j]; g[rows.i][j] = g[rows.j][j]; g[rows.j][j] = tmp; }
for (var j = 0; j < 9; j++) {
var tdc1 = $("c" + j + cols.i);
var tdc2 = $("c" + j + cols.j);
var tmp = tdc1.innerHTML; tdc1.innerHTML = tdc2.innerHTML; tdc2.innerHTML = tmp;
tmp = g[j][cols.i]; g[j][cols.i] = g[j][cols.j]; g[j][cols.j] = tmp; } }
for (var i = 0; i < cells_to_hide; i++) {
var x = Math.floor(Math.random() * 9);
var y = Math.floor(Math.random() * 9);
document.getElementById("c" + x + y).innerHTML = ""; } };
$("solve-link").onclick = function() {
for (var i = 0; i < 9; i++) for (var j = 0; j < 9; j++) {
$("c" + i + j).innerHTML = g[i][j]; } }
f(6400, 50);