Foros del Web » Programación para mayores de 30 ;) » Programación General »

Combinatoria?

Estas en el tema de Combinatoria? en el foro de Programación General en Foros del Web. Un Tateti de 3x1, Tate en realidad. 0 = Vacío. 1 = X 2 = 0 Simplemente quiero representar todas las posibles situaciones, incluyendo las ...
  #1 (permalink)  
Antiguo 26/11/2013, 20:06
Tachikomaia
Invitado
 
Mensajes: n/a
Puntos:
Combinatoria?

Un Tateti de 3x1, Tate en realidad.

0 = Vacío.
1 = X
2 = 0

Simplemente quiero representar todas las posibles situaciones, incluyendo las que son imposibles en una partida normalmente jugada.

Así lo hice.

Código:
// Nueva sit.
M.X = M.X+1;
Act = 0;
if (M.X == 3) {
    M.X = 1;
    M.X2 = M.X2+1;
    if (M.X2 == 3) {
        M.X3 = M.X3+1;
        if (M.X3 == 3) {
            // No más sits
        } else {
            // New Sit con X3 change
            M.X2 = 1;
        }
    } else {
        // New Sit con X2 change
    }
} else {
    // New Sit
}
Mi duda es si hay una forma más simple de hacerlo, porque en este caso son 3 casilleros, no es mucho, pero si fuesen muchos, serían muchos ifs uno adentro del otro, parece demasiado. Quizá con eval se podría evitar, pero ¿no hay algo más simple?

Gracias.
  #2 (permalink)  
Antiguo 27/11/2013, 11:03
Avatar de L3m0n  
Fecha de Ingreso: diciembre-2011
Mensajes: 219
Antigüedad: 12 años, 4 meses
Puntos: 46
Respuesta: Combinatoria?

Y para que quieres codigo?, si simplemente tienes que hacer 3^num casillas.
  #3 (permalink)  
Antiguo 28/11/2013, 20:38
Tachikomaia
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Combinatoria?

Hablas de la cantidad? Yo no, yo hablo de representar cada una, una por una.

Se me ocurrió esto aunque me falta probarlo.
Código:
Frame 1:
M.X = 0;
M.X2 = 0;
M.X3 = 0;
M.XDigit = 1;

Frame 2:
// Nueva sit.
M.X = M.X+1;
if (M.X == 3) {
    M.X = 1;
    M.DoW = 1;
    M.XDigit = 1;
    do {
        M.XDigit = M.XDigit+1;
        if (M.XDigit > 2) {
            M.DoW = 0;
        } else if (eval ("M.X"+M.XDigit) < 2) {
            set ("M.X"+M.XDigit, eval ("M.X"+M.XDigit)+1);
            M.DoW = 0;
        } else {
            M.XDigit = 0;
        }
    } while (M.DoW == 1);
}
Edit:
Bueno... ya he probado esto y funciona:
Código:
Frame 1:
M.X = -1;
M.X2 = 0;
M.X3 = 0;
M.XDigit = 1;

Frame 2:
// Nueva sit.
M.X = M.X+1;
Act = 0;
if (M.X == 3) {
    // Valor del 1er casillero se sobrepasó; resetear.
    M.X = 0;
    M.DoW = 1;
    M.XDigit = 1;
    do {
        M.XDigit = M.XDigit+1;
        // Listo para incrementar siguiente casillero.
        if (M.XDigit > 3) {
            // No más sits.
            M.DoW = -1;
        } else {
            set ("M.X"+M.XDigit, eval ("M.X"+M.XDigit)+1);
            // Incrementa el valor del casillero actual.
            if (eval ("M.X"+M.XDigit) > 2) {
                // Valor del casillero se sobrepasó; resetear.
                set ("M.X"+M.XDigit, 0);
            } else {
                // Done.
                M.DoW = 0;
            }
        }
    } while (M.DoW == 1);
}
if (M.DoW == -1) {
    stop ();
}

Frame 3:
gotoAndPlay (2);

Última edición por Tachikomaia; 28/11/2013 a las 22:28

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:13.