Descripción: Inicialización para asignar función de resolución al botón correspondiente.
A continuación mostramos los apuntes asociados a este extra:
// Descripción para sindicación:
/*
[rss]Inicialización para asignar función de resolución al botón correspondiente.[/rss]
*/
poner_evento(window, "load", iniciar_sudoku);
function iniciar_sudoku() {
poner_evento(tag("estudiator"), "click", estudiar_sudoku);
poner_evento(tag("resolutor"), "click", resolver_sudoku_facil);
poner_evento(tag("sudoku_alternativo"), "click", poner_sudoku_facil);
tag("sudoku_alternativo").style.cursor = "pointer";
poner_evento(tag("form_sudoku"), "reset", reseteo);
}
function reseteo() {
window.frames.nuevo_sudoku.location.href =
"diario.jocker.php?extra=sudoku&inicio=000020087003090006806100000100000000470080200000054073097000000500040000000260005";
}
arr_sudoku = [];
solucion = [];
function estudiar_casilla(i, j) {
s = arr_sudoku;
fila = s[i];
valor = fila.charAt(j);
if ("123456789".indexOf(valor) > -1) {
solucion.push("casilla [" + i + ", " + j + "] resuelta: " + valor);
}
else {
cadena = "";
for (_i = 0; _i < 9; _i++)
if ("123456789".indexOf(fila.charAt(_i)) > -1)
cadena += fila.charAt(_i);
for (_i = 0; _i < 9; _i++)
if ((_i != i) && "123456789".indexOf(s[_i].charAt(j)) > -1)
if (cadena.indexOf(s[_i].charAt(j)) == -1)
cadena += s[_i].charAt(j);
baseX = 3 * parseInt(i / 3);
baseY = 3 * parseInt(j / 3);
for (_i = 0; _i < 3; _i++) for (_j = 0; _j < 3; _j++)
if (((baseX + _i != i) && (baseY + _j != j)) && "123456789".indexOf(s[baseX + _i].charAt(baseY + _j)) > -1)
if (cadena.indexOf(s[baseX + _i].charAt(baseY + _j)) == -1)
cadena += s[baseX + _i].charAt(baseY + _j);
candidatos = "";
for (_i = 0; _i < 9; _i++)
if (cadena.indexOf("123456789".charAt(_i)) == -1)
candidatos += "123456789".charAt(_i);
solucion.push("casilla[" + i + ", " + j + "]\\nnúmeros: " + cadena + "\\ncandidatos: " + candidatos);
}
}
function estudiar_sudoku() {
solucion = [];
cadena = tag("form_sudoku").elements.inicio.value;
if (cadena.length > 81)
cadena = cadena.substr(0, 81)
else
while (cadena.length < 81)
cadena += "0";
for (i = 0; i < 9; i++)
arr_sudoku[i] = cadena.substr(i * 9, 9);
//alert(arr_sudoku.join("\\n"));
for (i = 0; i < 9; i++)
for (j = 0; j < 9; j++) {
estudiar_casilla(i, j);
}
tag("resolviendo").innerHTML = solucion.join("\\n<br/>");
}
function resolver_casilla_facil(i, j) {
cambio = false;
s = arr_sudoku;
fila = s[i];
valor = fila.charAt(j);
if ("123456789".indexOf(valor) > -1) {
//solucion.push("casilla [" + i + ", " + j + "] resuelta: " + valor);
}
else {
cadena = "";
for (_i = 0; _i < 9; _i++)
if ("123456789".indexOf(fila.charAt(_i)) > -1)
cadena += fila.charAt(_i);
for (_i = 0; _i < 9; _i++)
if ((_i != i) && "123456789".indexOf(s[_i].charAt(j)) > -1)
if (cadena.indexOf(s[_i].charAt(j)) == -1)
cadena += s[_i].charAt(j);
baseX = 3 * parseInt(i / 3);
baseY = 3 * parseInt(j / 3);
for (_i = 0; _i < 3; _i++) for (_j = 0; _j < 3; _j++)
if (((baseX + _i != i) && (baseY + _j != j)) && "123456789".indexOf(s[baseX + _i].charAt(baseY + _j)) > -1)
if (cadena.indexOf(s[baseX + _i].charAt(baseY + _j)) == -1)
cadena += s[baseX + _i].charAt(baseY + _j);
candidatos = "";
for (_i = 0; _i < 9; _i++)
if (cadena.indexOf("123456789".charAt(_i)) == -1)
candidatos += "123456789".charAt(_i);
if (candidatos.length == 1) {
arr_sudoku[i] = s[i].substr(0, j) + candidatos + s[i].substr(j + 1);
tag("form_sudoku").elements.inicio.value = arr_sudoku.join("");
tag("form_sudoku").submit();
//alert(arr_sudoku[i]);
cambio = true;
solucion.push("casilla[" + i + ", " + j + "]\\nnúmeros: " + cadena + "\\ncandidatos: " + candidatos);
}
}
return cambio;
}
function poner_sudoku_facil() {
tag("form_sudoku").elements.inicio.value = "014500032369001004000000010007604090690087020020300000100800070000000008802400603";
tag("form_sudoku").submit();
}
function resolver_sudoku_facil() {
solucion = [];
//cambios = 0;
terminado = false;
cadena = tag("form_sudoku").elements.inicio.value;
if (cadena.length > 81)
cadena = cadena.substr(0, 81)
else
while (cadena.length < 81)
cadena += "0";
for (i = 0; i < 9; i++)
arr_sudoku[i] = cadena.substr(i * 9, 9);
do {
cambios = 0;
for (i = 0; i < 9; i++)
for (j = 0; j < 9; j++) {
//cambio = (cambio || resolver_casilla_facil(i, j));
cambio = resolver_casilla_facil(i, j);
cambios += (cambio) ? 1:0;
terminado = terminado || cambio;
}
// terminado = true;
} while (cambios > 0);
// mensaje = (cambio) ? "hubo cambios":"sin cambios";
// tag("resolviendo").innerHTML = mensaje + "<br/>" + solucion.join("\\n<br/>");
tag("resolviendo").innerHTML = solucion.join("\\n<br/>");
}
Este código ha sido leído en 90 ocasiones.
Esta extra aún no tiene comentarios.
Valoración de esta página: (extra.script.sudoku_resolutor)
Listados: imágenes, categorías, etiquetas, extras | Anuarios: 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024 | Otros enlaces: buscador