Por ejemplo aquí se considera que no hay:

En este contexto lo blanco no se considera pintado, es fondo. Todos los cuadraditos pintados tienen al menos 1 pintado al lado (diagonal también cuenta).
Estoy haciendo un generador de dibujos así y quiero que no muestre (o que no genere, sería lo ideal) los que tengan cierta cantidad de cuadraditos pintados aislados. La cantidad depende del tamaño del dibujo, no importa aquí cual es. El dibujo se va modificando de a 1 cuadradito, se pinta uno, o se despinta uno (o más) y se pinta otro. Así, debo hacer algo como:
- Cuando se pinte uno nuevo, mirar si al lado hay otro. Si no hay, incrementar el contador de aislados. Si hay, ver si ese o esos estaban aislados, en cuyo caso disminuir el contador cuanto corresponda (según cuantos eran los aislados).
- Cuando se despinte uno, mirar si hay cuadraditos pintados al lado. Si no hay, disminuir el contador de aislados. Si hay, mirar al lado de cada uno y aumentar el contador de aislados por cada uno que haya quedado aislado.
Mi pregunta es: ¿Hay un modo más fácil? ¿es posible que lo haga GPT o algo así? Es que es mucho código... Por ahora hice esto y luego vi que no sirven else ifs, sólo ifs:
// Para juzgar:
// ¿El dibujo tiene menos de Largo/2 cuadraditos aislados?
// 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á.
CuadraditoAislado = "Sí";
// ¿El modificado es el inferior derecho?
if (Puntero == MaxPosiciondePuntero) {
// Sí, ver el -1 (izquierdo), -L (up) y -L-1 (iu):
// xSS
// xS*
if (eval("ColordeCuadradito"+(Puntero-1)) == 1) {
CuadraditoAislado = "No";
}
if (eval("ColordeCuadradito"+(Puntero-CuadraditosPorFila)) == 1) {
CuadraditoAislado = "No";
} else if (eval("ColordeCuadradito"+(Puntero-CuadraditosPorFila-1)) == 1) {
CuadraditoAislado = "No";
}
} else if (Puntero > MinCuadraditoInferior) {
// Inferior no en una esquina,
// contar el +1 (derecho), -1, -L+1 (du), -L y -L-1:
// SSS
// S*S
if (eval("ColordeCuadradito"+(Puntero+1)) == 1) {
CuadraditoAislado = "No";
} else if (eval("ColordeCuadradito"+(Puntero-1) == 1) {
CuadraditoAislado = "No";
} else if (eval("ColordeCuadradito"+(Puntero-CuadraditosPorFila+1)) == 1) {
CuadraditoAislado = "No";
} else if (eval("ColordeCuadradito"+(Puntero-CuadraditosPorFila)) == 1) {
CuadraditoAislado = "No";
} else if (eval("ColordeCuadradito"+(Puntero-CuadraditosPorFila-1)) == 1) {
CuadraditoAislado = "No";
}
} else if (Puntero == MinCuadraditoInferior) {
// Inferior izquierdo,
// contar el +1, -L+1 y -L:
// SSx
// *Sx
if (eval("ColordeCuadradito"+(Puntero+1)) == 1) {
CuadraditoAislado = "No";
} else if (eval("ColordeCuadradito"+(Puntero-CuadraditosPorFila+1)) == 1) {
CuadraditoAislado = "No";
} else if (eval("ColordeCuadradito"+(Puntero-CuadraditosPorFila)) == 1) {
CuadraditoAislado = "No";
}
} else if (Puntero > CuadraditosPorFila) {
// No es superior.
if (Puntero%CuadraditosPorFila == 0) {
// Central derecho,
// contar el +L, +L-1, -1, -L y -L-1:
// xSS
// xS*
// xSS
if (eval("ColordeCuadradito"+(Puntero+CuadraditosPorFila)) == 1) {
CuadraditoAislado = "No";
} else if (eval("ColordeCuadradito"+(Puntero+CuadraditosPorFila-1)) == 1) {
CuadraditoAislado = "No";
} else if (eval("ColordeCuadradito"+(Puntero-1)) == 1) {
CuadraditoAislado = "No";
} else if (eval("ColordeCuadradito"+(Puntero-CuadraditosPorFila)) == 1) {
CuadraditoAislado = "No";
} else if (eval("ColordeCuadradito"+(Puntero-CuadraditosPorFila-1)) == 1) {
CuadraditoAislado = "No";
}
} else if (Puntero%CuadraditosPorFila != 1) {
// Central, contar todos los contiguos:
// SSS
// S*S
// SSS
if (eval("ColordeCuadradito"+(Puntero+CuadraditosPorFila+1)) == 1) {
CuadraditoAislado = "No";
} else if (eval("ColordeCuadradito"+(Puntero+CuadraditosPorFila)) == 1) {
CuadraditoAislado = "No";
} else if (eval("ColordeCuadradito"+(Puntero+CuadraditosPorFila-1)) == 1) {
CuadraditoAislado = "No";
} else if (eval("ColordeCuadradito"+(Puntero+1)) == 1) {
CuadraditoAislado = "No";
} else if (eval("ColordeCuadradito"+(Puntero-1)) == 1) {
CuadraditoAislado = "No";
} else if (eval("ColordeCuadradito"+(Puntero-CuadraditosPorFila+1)) == 1) {
CuadraditoAislado = "No";
} else if (eval("ColordeCuadradito"+(Puntero-CuadraditosPorFila)) == 1) {
CuadraditoAislado = "No";
} else if (eval("ColordeCuadradito"+(Puntero-CuadraditosPorFila-1)) == 1) {
CuadraditoAislado = "No";
}
} else {
// Central izquierdo,
// contar el +L+1, +L, +1, -L+1 y -L:
// SSx
// *Sx
// SSx
if (eval("ColordeCuadradito"+(Puntero+CuadraditosPorFila+1)) == 1) {
CuadraditoAislado = "No";
} else if (eval("ColordeCuadradito"+(Puntero+CuadraditosPorFila)) == 1) {
CuadraditoAislado = "No";
} else if (eval("ColordeCuadradito"+(Puntero+1)) == 1) {
CuadraditoAislado = "No";
} else if (eval("ColordeCuadradito"+(Puntero-CuadraditosPorFila+1)) == 1) {
CuadraditoAislado = "No";
} else if (eval("ColordeCuadradito"+(Puntero-CuadraditosPorFila)) == 1) {
CuadraditoAislado = "No";
}
}
} else if (Puntero == CuadraditosPorFila) {
// Superior derecho,
// contar el +L+1, +L y +1:
// *Sx
// SSx
if (eval("ColordeCuadradito"+(Puntero+CuadraditosPorFila+1)) == 1) {
CuadraditoAislado = "No";
} else if (eval("ColordeCuadradito"+(Puntero+CuadraditosPorFila)) == 1) {
CuadraditoAislado = "No";
} else if (eval("ColordeCuadradito"+(Puntero+1)) == 1) {
CuadraditoAislado = "No";
}
} else if (Puntero > 1) {
// Superior cemtral,
// contar el +L+1, +L, +L-1, +1 y -1:
// S*S
// SSS
if (eval("ColordeCuadradito"+(Puntero+CuadraditosPorFila+1)) == 1) {
CuadraditoAislado = "No";
} else if (eval("ColordeCuadradito"+(Puntero+CuadraditosPorFila)) == 1) {
CuadraditoAislado = "No";
} else if (eval("ColordeCuadradito"+(Puntero+CuadraditosPorFila-1)) == 1) {
CuadraditoAislado = "No";
} else if (eval("ColordeCuadradito"+(Puntero+1)) == 1) {
CuadraditoAislado = "No";
} else if (eval("ColordeCuadradito"+(Puntero-1)) == 1) {
CuadraditoAislado = "No";
}
} else {
// Superior izquierdo,
// contar el +L+1, +L y +1:
// *Sx
// SSx
if (eval("ColordeCuadradito"+(Puntero+CuadraditosPorFila+1)) == 1) {
CuadraditoAislado = "No";
} else if (eval("ColordeCuadradito"+(Puntero+CuadraditosPorFila)) == 1) {
CuadraditoAislado = "No";
} else if (eval("ColordeCuadradito"+(Puntero-1)) == 1) {
CuadraditoAislado = "No";
}
}
if (CuadraditoAislado == "Sí") {
CuadraditosAislados++;
} Es decir, ahí sólo estoy viendo si el cuadradito nuevo está aislado ¡me falta ver si sus contiguos lo estaban! (o si lo están sin contar al nuevo) y me falta el caso en que se despinta un cuadradito. ¿Tal vez se podrían usar functions para evitar repetir código? No sé bien cómo. Además, siendo tanto, puede que haya cometido algún error :/