Autor Tema: Falla al contar cuadraditos aislados.

0 Usuarios y 1 Visitante están viendo este tema.

06 Octubre, 2024, 09:47 pm
Leído 468 veces

Tachikomaia

  • $$\Large \color{#5b61b3}\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 1,297
  • País: uy
  • Karma: +0/-0
  • Sexo: Masculino
Intento hacer un programa que "vea" los dibujos de color negro con fondo blanco. Siempre están compuestos por cuadraditos. Empieza así:
BBN
BNB
NBB
o sea con una diagonal así /. No viene al caso el motivo. En este punto, la cantidad de cuadraditos pintados aislados es 0. Se considera que uno está aislado si no tiene pintado uno arriba, ni abajo, ni en un lado ni en una de sus diagonales, al lado.

Luego el programa modifica el cuadradito inferior derecho, sea para pintarlo o despintarlo, en este caso para pintarlo:
BBN
BNB
NBN
Debe entonces actualizar el contador de cuadraditos aislados, sigue siendo 0.

Ahora, ya no puede pintar el inferior derecho, así que lo despinta, y pinta el que está al lado. Digamos que están nombrados así (ya no recuerdo, no importa mucho aquí):
123
456
789
y empieza a modificar desde el 9 al 1.

Creo que cuando se pinta uno, los de abajo estarán despintados, es como cuando tienes 0.99 y le sumas 0.01, aumentará la parte de adelamte y todo lo anterior volverá a 0. El de su derecha también estará despintado. Así que, supongo, no es necesario chequear todos los cuadraditos contiguos cuando se debe actualizar el contador de aislados al pintar uno.

Cuando se despinta, no logro pensarlo, no logro darme cuenta. Por ejemplo:
BBN
NNN
NNN
Se despinta el 9:
BBN
NNN
NNB
Deben revisarse los de la izquierda y arriba porque podrían estar pintados o despintados. El de la derecha y los de abajo no veo que sea necesario revisarlos.

¿Pero por qué entonces mi programa falla en actualizar la cantidad correctamente?

El programa hace otras cosas también pero no viene mucho al caso, les dejo un video y el código, si ven la falla díganme cual es.


Frame 1: En cierto punto es recomendable leer el frame 2 y 3 antes de continuar leyendo.
Código: [Seleccionar]
// En este programa hay cuadraditos nombrados así:
// 123
// 456
// 789
// Se irán pintando diferentes combinaciones y...
// el tamaño de la hoja irá aumentando.
// Para que un dibujo se muestre...
// debe tener algún cuadradito pintado...
// en cada columna y fila.
// Y no debe haber muchos pintados aislados.
// Ver frame 2 por más información.
//
// Esto es también porColumna.
// Debido a que en cierto chequeo se asume que...
// si el cuadradito no está en la parte inferior ni...
// superior entonces está en una fila intermedia,
// conviene que CuadraditosPorFila comience siendo 2,
// cambia enseguida a 3.
CuadraditosPorFila = 2;
// Usada en Variar:
function ObtenerColumnayFila () {
Fila = Math.ceil(Puntero/CuadraditosPorFila);
trace ("Su Fila según el cálculo es: "+Fila);
Columna = (Puntero-1)%CuadraditosPorFila+1;
trace ("Su Columna: "+Columna);
// Esto se usa para evitar repeticiones...
// de concatenaciones y simplificarlas:
ColumnaRelevante = "PintadosenC"+Columna;
FilaRelevante = "PintadosenF"+Fila;
}
// Usada en ParteDeContarEtc:
function PosibleIncrementoDeContiguosPintados () {
// ¿El contiguo indicado está pintado?
if (eval("Cuadradito"+Fila3+"_"+Columna3) == 0) {
// Sí, aumentar contador:
ContiguosPintados++;
trace ("De ese contiguo ("+Fila2+"_"+Columna2+"), su contiguo "+Fila3+"_"+Columna3+" está pintado; por ahora se vió que tiene "+ContiguosPintados+" contiguos pintados.");
}
}
// Usada en ContarContiguosDeContiguoAlNewPintado y ContarContiguosDeContiguoAlNewDespintado:
function ParteDeContarEtc () {
ContiguosPintados = 0;
trace("Analizando su inferior derecho.");
Fila3 = Fila2+1;
Columna3 = Columna2+1;
PosibleIncrementoDeContiguosPintados();
trace("Analizando su inferior.");
Columna3--;
PosibleIncrementoDeContiguosPintados();
trace("Analizando su inferior izquierdo.");
Columna3--;
PosibleIncrementoDeContiguosPintados();
trace("Analizando su derecho.");
Columna3 = Columna3+2;
Fila3--;
PosibleIncrementoDeContiguosPintados();
trace("Analizando su izquierdo.");
Columna3 = Columna3-2;
PosibleIncrementoDeContiguosPintados();
trace("Analizando su superior derecho.");
Columna3 = Columna3+2;
Fila3--;
PosibleIncrementoDeContiguosPintados();
trace("Analizando su superior.");
Columna3--;
PosibleIncrementoDeContiguosPintados();
trace("Analizando su superior izquierdo.");
Columna3--;
PosibleIncrementoDeContiguosPintados();
}
// Usada en Variar:
function ContarContiguosDeContiguoAlNewPintado () {
// ¿El contiguo indicado está pintado?
trace ("Analizando Cuadradito"+Fila2+"_"+Columna2+": "+eval("Cuadradito"+Fila2+"_"+Columna2));
if (eval("Cuadradito"+Fila2+"_"+Columna2) == 0) {
// Sí, el recién pintado no está aislado:
ElRecienPintadoEstaAislado = "No";
trace ("Está pintado; el recién pintado no está aislado.");
// Se contarán los contiguos de este (contiguo al recién...).
ParteDeContarEtc();
trace ("Ese contiguo ("+Fila2+"_"+Columna2+") al recién pintado tiene "+ContiguosPintados+" contiguos pintados.");
// ¿Estaba aislado?
if (ContiguosPintados == 1) {
// Sí, reducir el contador:
CuadraditosAislados--;
trace ("El contiguo al recién pintado sólo tiene 1 contiguo pintado, estaba aislado, ahora hay "+CuadraditosAislados+" aislados.");
}
} else {
trace ("No está pintado.");
}
}
// Usada en Variar:
function ContarContiguosDeContiguoAlNewDespintado () {
// ¿El contiguo indicado está pintado?
trace ("Analizando Cuadradito"+Fila2+"_"+Columna2+": "+eval("Cuadradito"+Fila2+"_"+Columna2));
if (eval("Cuadradito"+Fila2+"_"+Columna2) == 0) {
// Sí, el recién despintado no estaba aislado:
ElRecienDespintadoEstabaAislado = "No";
trace ("Está pintado; el recién despintado no estaba aislado.");
// Se contarán los contiguos de este (contiguo al recién...).
ParteDeContarEtc();
trace ("Ese contiguo ("+Fila2+"_"+Columna2+") al recién despintado tiene "+ContiguosPintados+" contiguos pintados.");
// ¿Está aislado?
if (ContiguosPintados == 0) {
// Sí, aumentar el contador:
CuadraditosAislados++;
trace ("El contiguo al recién despintado quedó aislado, ahora hay "+CuadraditosAislados+" aislados.");
}
} else {
trace ("No está pintado.");
}
}
// En F3 se repite:
function Variar () {
ReferenciaAlColoraModificar = "ColordeCuadradito"+Puntero;
ColoraModificar = eval(ReferenciaAlColoraModificar);
NuevoColor = new Color("Cuadradito"+Puntero);
// ¿El cuadradito puede cambiar de color?
if (ColoraModificar>0) {
// Sí, hacer los cambios:
set (ReferenciaAlColoraModificar, ColoraModificar-1);
NuevoColor.setRGB(0);
trace (" Se pintó el cuadradito "+Puntero);
ObtenerColumnayFila();
// Asignarle el color de la 2nda manera:
set ("Cuadradito"+Fila+"_"+Columna, 0);
// Incrementar contador de cuadraditos pintados en...:
// la columna y fila donde se pintó:
set (ColumnaRelevante, eval(ColumnaRelevante)+1);
set (FilaRelevante, eval(FilaRelevante)+1);
// Actualizar cantidad de cuadraditos 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á.
trace ("Se actualizará el contador de pintados aislados:");
// Esta variable puede cambiar, se refiere al recién pintado:
ElRecienPintadoEstaAislado = "Sí";
// Para analizar a su izquierdo:
Fila2 = Fila;
Columna2 = Columna-1;
// Si su izquierdo existe y está pintado,
// entonces el actual no está aislado,
// y se mira si el izquierdo de ese estaba aislado:
// Cuántos de sus contiguos están pintados.
// Si la cantidad es 1, estaba aislado,
// el contador de Aislados baja.
// Debido a que el pintar un cuadradito...
// los de abajo y el de la derecha estarán despintados,
// sólo se miran el de la izquierda y los de arriba:
ContarContiguosDeContiguoAlNewPintado();
// Para analizar a su izquierdo de arriba:
Fila2 = Fila-1;
ContarContiguosDeContiguoAlNewPintado();
// Para analizar al de arriba:
Columna2 = Columna+1;
ContarContiguosDeContiguoAlNewPintado();
// Para analizar a su derecho de arriba:
Columna2 = Columna+1;
ContarContiguosDeContiguoAlNewPintado();
if (ElRecienPintadoEstaAislado == "Sí") {
trace("El recién pintado está aislado");
CuadraditosAislados++;
}
trace(" El dibujo tiene "+CuadraditosAislados+" cuadraditos aislados");
// Preparar Puntero para generar el próximo dibujo:
Puntero = MaxPosiciondePuntero;
// Para juzgar:
// ¿El dibujo tiene cuadraditos pintados en toda columna y fila?
Puntero2 = 0;
// Esto puede que cambie:
CuadraditoenCadaFyC = "Sí";
do {
Puntero2 = Puntero2+1;
// ¿La columna Puntero2 no tiene algún cuadradito pintado?
if (eval("PintadosenC"+Puntero2)<1) {
CuadraditoenCadaFyC = "No";
} else if (eval("PintadosenF"+Puntero2)<1) {
// La fila Puntero2 no tiene algún cuadradito pintado.
CuadraditoenCadaFyC = "No";
}
} while (CuadraditoenCadaFyC == "Sí" && Puntero2<CuadraditosPorFila);
// ¿El dibujo tiene cuadraditos pintados en toda columna y fila?
if (CuadraditoenCadaFyC == "No") {
// No, no mostrarlo y hacer otro:
trace ("    No ocupa cada F y C, salteándolo.");
DibujosPequeños++;
// Variar();
gotoAndStop(4);
} else if (CuadraditosAislados>MaxCuadraditosAislados) {
trace ("    Tiene demasiados cuadraditos pintados aislados: "+CuadraditosAislados+" salteándolo.");
DibujosAislados++;
// Variar();
gotoAndStop(4);
} else {
DibujosOk++;
trace ("  Mostrando dibujo nro: "+DibujosOk);
// play ();
gotoAndStop(4);
}
} else {
// El cuadradito no puede cambiar de color, resetearlo:
set (ReferenciaAlColoraModificar, 1);
NuevoColor.setRGB(0xFFFFFF);
trace (" Se despintó el cuadradito "+Puntero);
ObtenerColumnayFila();
// Asignarle el color de la 2nda manera:
set ("Cuadradito"+Fila+"_"+Columna, 1);
// Disminuir contador de cuadraditos pintados en...:
// la columna y fila donde se pintó:
set (ColumnaRelevante, eval(ColumnaRelevante)-1);
set (FilaRelevante, eval(FilaRelevante)-1);
// Actualizar cantidad de cuadraditos pintados aislados:
trace ("Se actualizará el contador de pintados aislados:");
// Esta variable puede cambiar, se refiere al recién despintado:
ElRecienDespintadoEstabaAislado = "Sí";
// Para analizar a su izquierdo:
Fila2 = Fila;
Columna2 = Columna-1;
ContarContiguosDeContiguoAlNewDespintado();
// Para analizar a su izquierdo de arriba:
Fila2 = Fila-1;
ContarContiguosDeContiguoAlNewDespintado();
// Para analizar al de arriba:
Columna2 = Columna+1;
ContarContiguosDeContiguoAlNewDespintado();
// Para analizar a su derecho de arriba:
Columna2 = Columna+1;
ContarContiguosDeContiguoAlNewDespintado();
if (ElRecienDespintadoEstabaAislado == "Sí") {
trace("El recién despintado estaba aislado");
CuadraditosAislados--;
}
trace(" El dibujo tiene "+CuadraditosAislados+" cuadraditos aislados");
// ¿Hay un cuadradito anterior?
if (Puntero>1) {
// Sí, apuntar a ese:
Puntero = Puntero-1;
// Continuar haciendo el dibujo:
// trace ("   Haciendo dibujo, apuntando al cuadradito anterior.");
Variar();
} else {
// No, aumentar tamaño de hoja y reiniciar.
// trace ("   No hay más dibujos, aumentando tamaño.");
trace ("DibujosOk: "+DibujosOk);
trace ("DibujosPequeños: "+DibujosPequeños);
trace ("DibujosAislados: "+DibujosAislados);
gotoAndPlay (2);
}
}
}

Frame 2: No creo que haya errores en él.
Código: (actionscript) [Seleccionar]
CuadraditosPorFila = CuadraditosPorFila+1;
DistanciaEntreCuadraditos = 384/CuadraditosPorFila;
// Aquí MinCuadraditoInferior es 3:
// 12
// 34
// Se usa para trazar la diagonal inicial más adelante,
// y en conteos de aislados.
MinCuadraditoInferior = CuadraditosPorFila*(CuadraditosPorFila-1)+1;
MaxPosiciondePuntero = CuadraditosPorFila*CuadraditosPorFila;
// Agregar y distribuir cuadraditos en blanco:
CuadraditosColocados = 0;
Fila = 0;
Columna = 0;
do {
CuadraditosColocados++;
attachMovie("mCuadradito", "Cuadradito"+CuadraditosColocados, CuadraditosColocados);
setProperty ("Cuadradito"+CuadraditosColocados, _x, 64+Columna*DistanciaEntreCuadraditos);
setProperty ("Cuadradito"+CuadraditosColocados, _y, Fila*DistanciaEntreCuadraditos);
setProperty ("Cuadradito"+CuadraditosColocados, _width, DistanciaEntreCuadraditos);
setProperty ("Cuadradito"+CuadraditosColocados, _height, DistanciaEntreCuadraditos);
ColorDeCuadradito = new Color("Cuadradito"+CuadraditosColocados);
ColorDeCuadradito.setRGB(0xFFFFFF);
// Esto es para modificar con más practicidad el color:
set ("ColordeCuadradito"+CuadraditosColocados, 1);
// Esto es la misma variable pero definida de modo que...
// facilita contar el aislamiento del cuadradito:
// Colocarlos es más fácil si se empieza a contar...
// desde 0 (ej: Fila 0), pero en esto creo que...
// es más claro si la fila 1 es la 1, etc:
set ("Cuadradito"+(Fila+1)+"_"+(Columna+1), "FFFFFF");
Columna++;
if (Columna == CuadraditosPorFila) {
Columna = 0;
Fila++;
}
} while (CuadraditosColocados<MaxPosiciondePuntero);
// Pintar una diagonal /
// Es el dibujo más bajo (considerando los valores...
// de los casilleros) en que hay un cuadradito...
// pintado en cada fila y columna:
Incremento = CuadraditosPorFila-1;
Puntero = CuadraditosPorFila-Incremento;
Fila = 1;
Columna = CuadraditosPorFila;
do {
Puntero = Puntero+Incremento;
set ("ColordeCuadradito"+Puntero, 0);
ColorDeCuadradito = new Color("Cuadradito"+Puntero);
ColorDeCuadradito.setRGB(0);
set ("Cuadradito"+Fila+"_"+Columna, 0);
Fila++;
Columna--;
// trace("Se pintó el cuadradito "+Puntero);
} while (Puntero<MinCuadraditoInferior);
// Asignar que en cada columna y fila hay 1 cuadradito pintado:
Puntero = 0;
do {
Puntero++;
set ("PintadosenC"+Puntero, 1);
set ("PintadosenF"+Puntero, 1);
} while (Puntero<CuadraditosPorFila);
// Usado para juzgar si un dibujo tiene muchos cuadraditos aislados:
CuadraditosAislados = 0;
MaxCuadraditosAislados = CuadraditosPorFila/2;
// El puntero debe iniciar abajo a la derecha:
Puntero = MaxPosiciondePuntero;
// Contadores relativos a los dibujos:
// El 1er dibujo contado no será la diagonal sino...
// ella con el cuadradito mayor pintado, así que...
// los dibujos ok siempre son +1 de lo que se dice aquí.
DibujosOk = 0;
DibujosPequeños = 0;
DibujosAislados = 0;
stop ();

Frame 3:
stop ();
Tiene un objeto con:
Código: [Seleccionar]
onClipEvent (enterFrame) {
_level0.Variar();
}

Frame 4: Vacío, existe para que el programa se pause para facilitarme entender qué pasa.

Frame 5:
gotoAndPlay (3);

Los traces en el momento de la falla son:
Spoiler
   Se despintó el cuadradito 9
Su Fila según el cálculo es: 3
Su Columna: 3
Se actualizará el contador de pintados aislados:
Analizando Cuadradito3_2: 0
Está pintado; el recién despintado no estaba aislado.
Analizando su inferior derecho.
Analizando su inferior.
Analizando su inferior izquierdo.
Analizando su derecho.
Analizando su izquierdo.
De ese contiguo (3_2), su contiguo 3_1 está pintado; por ahora se vió que tiene 1 contiguos pintados.
Analizando su superior derecho.
De ese contiguo (3_2), su contiguo 2_3 está pintado; por ahora se vió que tiene 2 contiguos pintados.
Analizando su superior.
De ese contiguo (3_2), su contiguo 2_2 está pintado; por ahora se vió que tiene 3 contiguos pintados.
Analizando su superior izquierdo.
Ese contiguo (3_2) al recién despintado tiene 3 contiguos pintados.
Analizando Cuadradito2_2: 0
Está pintado; el recién despintado no estaba aislado.
Analizando su inferior derecho.
Analizando su inferior.
De ese contiguo (2_2), su contiguo 3_2 está pintado; por ahora se vió que tiene 1 contiguos pintados.
Analizando su inferior izquierdo.
De ese contiguo (2_2), su contiguo 3_1 está pintado; por ahora se vió que tiene 2 contiguos pintados.
Analizando su derecho.
De ese contiguo (2_2), su contiguo 2_3 está pintado; por ahora se vió que tiene 3 contiguos pintados.
Analizando su izquierdo.
Analizando su superior derecho.
De ese contiguo (2_2), su contiguo 1_3 está pintado; por ahora se vió que tiene 4 contiguos pintados.
Analizando su superior.
Analizando su superior izquierdo.
Ese contiguo (2_2) al recién despintado tiene 4 contiguos pintados.
Analizando Cuadradito2_4:
No está pintado.
Analizando Cuadradito2_4:
No está pintado.
      El dibujo tiene 0 cuadraditos aislados
   Se despintó el cuadradito 8
Su Fila según el cálculo es: 3
Su Columna: 2
Se actualizará el contador de pintados aislados:
Analizando Cuadradito3_1: 0
Está pintado; el recién despintado no estaba aislado.
Analizando su inferior derecho.
Analizando su inferior.
Analizando su inferior izquierdo.
Analizando su derecho.
Analizando su izquierdo.
Analizando su superior derecho.
De ese contiguo (3_1), su contiguo 2_2 está pintado; por ahora se vió que tiene 1 contiguos pintados.
Analizando su superior.
Analizando su superior izquierdo.
Ese contiguo (3_1) al recién despintado tiene 1 contiguos pintados.
Analizando Cuadradito2_1: FFFFFF
No está pintado.
Analizando Cuadradito2_3: 0
Está pintado; el recién despintado no estaba aislado.
Analizando su inferior derecho.
Analizando su inferior.
Analizando su inferior izquierdo.
Analizando su derecho.
Analizando su izquierdo.
De ese contiguo (2_3), su contiguo 2_2 está pintado; por ahora se vió que tiene 1 contiguos pintados.
Analizando su superior derecho.
Analizando su superior.
De ese contiguo (2_3), su contiguo 1_3 está pintado; por ahora se vió que tiene 2 contiguos pintados.
Analizando su superior izquierdo.
Ese contiguo (2_3) al recién despintado tiene 2 contiguos pintados.
Analizando Cuadradito2_3: 0
Está pintado; el recién despintado no estaba aislado.
Analizando su inferior derecho.
Analizando su inferior.
Analizando su inferior izquierdo.
Analizando su derecho.
Analizando su izquierdo.
De ese contiguo (2_3), su contiguo 2_2 está pintado; por ahora se vió que tiene 1 contiguos pintados.
Analizando su superior derecho.
Analizando su superior.
De ese contiguo (2_3), su contiguo 1_3 está pintado; por ahora se vió que tiene 2 contiguos pintados.
Analizando su superior izquierdo.
Ese contiguo (2_3) al recién despintado tiene 2 contiguos pintados.
      El dibujo tiene 0 cuadraditos aislados
   Se despintó el cuadradito 7
Su Fila según el cálculo es: 3
Su Columna: 1
Se actualizará el contador de pintados aislados:
Analizando Cuadradito3_0:
No está pintado.
Analizando Cuadradito2_0:
No está pintado.
Analizando Cuadradito2_2: 0
Está pintado; el recién despintado no estaba aislado.
Analizando su inferior derecho.
Analizando su inferior.
Analizando su inferior izquierdo.
Analizando su derecho.
De ese contiguo (2_2), su contiguo 2_3 está pintado; por ahora se vió que tiene 1 contiguos pintados.
Analizando su izquierdo.
Analizando su superior derecho.
De ese contiguo (2_2), su contiguo 1_3 está pintado; por ahora se vió que tiene 2 contiguos pintados.
Analizando su superior.
Analizando su superior izquierdo.
Ese contiguo (2_2) al recién despintado tiene 2 contiguos pintados.
Analizando Cuadradito2_2: 0
Está pintado; el recién despintado no estaba aislado.
Analizando su inferior derecho.
Analizando su inferior.
Analizando su inferior izquierdo.
Analizando su derecho.
De ese contiguo (2_2), su contiguo 2_3 está pintado; por ahora se vió que tiene 1 contiguos pintados.
Analizando su izquierdo.
Analizando su superior derecho.
De ese contiguo (2_2), su contiguo 1_3 está pintado; por ahora se vió que tiene 2 contiguos pintados.
Analizando su superior.
Analizando su superior izquierdo.
Ese contiguo (2_2) al recién despintado tiene 2 contiguos pintados.
      El dibujo tiene 0 cuadraditos aislados
   Se despintó el cuadradito 6
Su Fila según el cálculo es: 2
Su Columna: 3
Se actualizará el contador de pintados aislados:
Analizando Cuadradito2_2: 0
Está pintado; el recién despintado no estaba aislado.
Analizando su inferior derecho.
Analizando su inferior.
Analizando su inferior izquierdo.
Analizando su derecho.
Analizando su izquierdo.
Analizando su superior derecho.
De ese contiguo (2_2), su contiguo 1_3 está pintado; por ahora se vió que tiene 1 contiguos pintados.
Analizando su superior.
Analizando su superior izquierdo.
Ese contiguo (2_2) al recién despintado tiene 1 contiguos pintados.
Analizando Cuadradito1_2: FFFFFF
No está pintado.
Analizando Cuadradito1_4:
No está pintado.
Analizando Cuadradito1_4:
No está pintado.
      El dibujo tiene 0 cuadraditos aislados
   Se despintó el cuadradito 5
Su Fila según el cálculo es: 2
Su Columna: 2
Se actualizará el contador de pintados aislados:
Analizando Cuadradito2_1: FFFFFF
No está pintado.
Analizando Cuadradito1_1: FFFFFF
No está pintado.
Analizando Cuadradito1_3: 0
Está pintado; el recién despintado no estaba aislado.
Analizando su inferior derecho.
Analizando su inferior.
Analizando su inferior izquierdo.
Analizando su derecho.
Analizando su izquierdo.
Analizando su superior derecho.
Analizando su superior.
Analizando su superior izquierdo.
Ese contiguo (1_3) al recién despintado tiene 0 contiguos pintados.
El contiguo al recién despintado quedó aislado, ahora hay 1 aislados.
Analizando Cuadradito1_3: 0
Está pintado; el recién despintado no estaba aislado.
Analizando su inferior derecho.
Analizando su inferior.
Analizando su inferior izquierdo.
Analizando su derecho.
Analizando su izquierdo.
Analizando su superior derecho.
Analizando su superior.
Analizando su superior izquierdo.
Ese contiguo (1_3) al recién despintado tiene 0 contiguos pintados.
El contiguo al recién despintado quedó aislado, ahora hay 2 aislados.
      El dibujo tiene 2 cuadraditos aislados
   Se pintó el cuadradito 4
Su Fila según el cálculo es: 2
Su Columna: 1
Se actualizará el contador de pintados aislados:
Analizando Cuadradito2_0:
No está pintado.
Analizando Cuadradito1_0:
No está pintado.
Analizando Cuadradito1_2: FFFFFF
No está pintado.
Analizando Cuadradito1_2: FFFFFF
No está pintado.
El recién pintado está aislado
      El dibujo tiene 3 cuadraditos aislados
    No ocupa cada F y C, salteándolo.
[cerrar]
Obviamente es aburrido leer eso, lo haré más adelante si no hay remedio, pero puede que no sirva. Tal vez debo poner otros, y destacar otros ¿qué me sugieren?


Creo que ya lo vi, publicado acá se ven los últimos traces, yo sólo vi los 1eros, y se nota que indican que analizan 2 veces el mismo cuadradito. Según vi, es porque hago Columna2 = Columna++;
y luego de nuevo Columna2 = Columna++;
cuando en ese caso debería ser Columna2++;

06 Octubre, 2024, 10:28 pm
Respuesta #1

imaginaryboy

  • $$\Large \color{#5e8d56}\pi\,\pi\,\pi$$
  • Mensajes: 134
  • País: ar
  • Karma: +0/-0
  • Sexo: Masculino
Elegiste bien la estructura de datos (matriz), y considerando que la indexación en las matrices comienza desde 0, puedes aprovechar esto para definir una función auxiliar que te permita encontrar las posiciones indefinidas. Por ejemplo, si es una matriz de 3x3, podrías hacer algo como pos_indefinidas(parametros), donde, en tu caso, para una matriz de 3x3, las posiciones indefinidas serían aquellas en las que \(  index≠0,…,index≠8 \).

Además, este enfoque puede generalizarse fácilmente a una matriz de \( n\times{n} \). Una vez que tengas esto, es importante que las demás funciones auxiliares también estén bien implementadas. En lugar de pensar en cómo abordar todo el problema de una vez, es mejor dividirlo en pequeñas funciones auxiliares que puedas ir resolviendo una por una.

En resumen trata de pensar el problema antes de pasar al código, espero que esto te sea de ayuda, al menos un poco.

PD: También te puede ser útil definir funciones que revisen si existe una diagonal, fila "completa" o culumna "completa". Puedes sacarle el jugo a las propiedades matemáticas que tiene la matriz. Si consigues programar esto, te sera más fácil implementar los contadores y demás cosas.

Saludos.