// En este programa hay cuadraditos nombrados así:
// 123
// 456
// 789
// Se irán pintando diferentes combinaciones,
// evitando resultados en que muchos queden aislados,
// dibujos producibles en hojas más pequeñas,
// y simétricos (espejo vertical) ya producidos.
// El tamaño de la hoja irá aumentando.
// Debido a que en cierto chequeo se asume que...
// si el cuadradito no está en la parte inferior ni...
// superior entonces está en la fila central,
// conviene que CuadraditosPorFila comience siendo 2,
// cambia enseguida a 3.
// PorFila y porColumna:
CuadraditosPorFila = 2;
// Los cuadraditos están nombrados de modo que...
// los de nombre mayor están abajo en la derecha, ejemplo:
// 12
// 34
// Usada en ContarContiguosDeContiguoAlModificado:
function ParteDeContarEtc () {
// ¿El contiguo indicado está pintado?
if (eval("Cuadradito"+Fila3+"_"+Columna3) == 0 ) {
// Sí, aumentar contador:
ContiguosPintados++;
}
}
// Usada en Variar:
function ContarContiguosDeContiguoAlModificado () {
// ¿El contiguo indicado está pintado?
if (eval("Cuadradito"+Fila2+"_"+Columna2) == 0 ) {
// Sí, el recién pintado no está aislado:
ElRecienPintadoEstaAislado = "No";
// Se contarán los contiguos de este (contiguo al recién...).
ContiguosPintados = 0;
// Para analizar a su inferior derecho:
Fila3 = Fila2+1;
Columna3 = Columna2+1;
ParteDeContarEtc();
// Para analizar a su inferior:
Columna3--;
ParteDeContarEtc();
// Para analizar a su inferior izquierdo:
Columna3--;
ParteDeContarEtc();
// Para analizar a su derecho:
Columna3 = Columna3+2;
Fila3--;
ParteDeContarEtc();
// Para analizar a su izquierdo:
Columna3 = Columna3-2;
ParteDeContarEtc();
// Para analizar a su superior derecho:
Columna3 = Columna3+2;
Fila3--;
ParteDeContarEtc();
// Para analizar a su superior:
Columna3--;
ParteDeContarEtc();
// Para analizar a su superior izquierdo:
Columna3--;
ParteDeContarEtc();
// ¿Estaba aislado?
if (ContiguosPintados == 1) {
// Sí, reducir el contador:
CuadraditosAislados--;
}
}
}
// En F3 se repite:
function Variar () {
ReferenciaAlColoraModificar = "ColordeCuadradito"+Puntero;
ColoraModificar = eval(ReferenciaAlColoraModificar);
// ¿El cuadradito puede cambiar de color?
if (ColoraModificar < 1) {
// Sí, hacer los cambios:
set (ReferenciaAlColoraModificar, ColoraModificar+1);
NuevoColor = new Color("Cuadradito"+Puntero);
NuevoColor.setRGB(0);
// Obtener fila y columna del cuadradito:
Fila = Math.ceil(Puntero/CuadraditosPorFila);
Columna = (Puntero-1)%CuadraditosPorFila+1;
set("Cuadradito"+Fila+"_"+Columna, 0);
// Para juzgar:
// ¿Los cuadraditos aislados en el dibujo es...
// menos de MaxCuadraditosAislados?
// Se actualizará el contador de pintados aislados:
// De cada pintado al lado del recién pintado,
// se verá si estaba aislado,
// en cuyo caso disminuirá el contador.
// Si no hay pintados al lado del nuevo, aumentará.
// Esta variable puede cambiar, se refiere al recién pintado:
ElRecienPintadoEstaAislado = "Sí";
// en vez de usar CuadraditoAislado = "Sí"; se podría definir
// ContiguosPintados = 0; desde el inicio y si aumentó entonces
// se entiende que ek recién pintado no estaba aislado.
// Pero igual ese contador debe reiniciarse cada vez que se empieza a contar,
// pero en esos casos siempre es 1 mínimo.
// Para analizar a su inferior derecho:
Fila2 = Fila+1;
Columna2 = Columna+1;
// Si su inferior derecho existe y está pintado,
// entonces el actual no está aislado,
// y se mira si el infder estaba aislado:
// Cuántos de sus contiguos están pintados.
// Por practicidad se cuenta también el recién pintado.
// Si la cantidad es 1, estaba aislado,
// el contador de Aislados baja:
ContarContiguosDeContiguoAlModificado();
// Para analizar a su inferior:
Columna2--;
ContarContiguosDeContiguoAlModificado();
// Para analizar a su inferior izquierdo:
Columna2--;
ContarContiguosDeContiguoAlModificado();
// Para analizar a su derecho:
Columna2 = Columna2+2;
Fila2--;
ContarContiguosDeContiguoAlModificado();
// Para analizar a su izquierdo:
Columna2 = Columna2-2;
ContarContiguosDeContiguoAlModificado();
// Para analizar a su superior derecho:
Columna2 = Columna2+2;
Fila2--;
ContarContiguosDeContiguoAlModificado();
// Para analizar a su superior:
Columna2--;
ContarContiguosDeContiguoAlModificado();
// Para analizar a su superior izquierdo:
Columna2--;
ContarContiguosDeContiguoAlModificado();
if (ElRecienPintadoEstaAislado == "Sí") {
CuadraditosAislados++;
}