Problemas con contar de un número.

Iniciado por Tachikomaia, 1 Enero 2021, 23:38 PM

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

Tachikomaia

Tengo unos viejos códigos que intento recordar cómo funcionaban. Desde el "Conjuntos I" no recuerdo.

// Contar presencias del signo:
Si Num < 0
   NumSigno = 1;
sino
   NumSigno = 0;


// El punto:
Si el num abs > num abs floor
   NumPunto = 1;
sino
   NumPunto = 0;


// Los caracteres X.
// Este código sirve para lo mismo que los anteriores, y más.
Num = 1234567890;
// Asignar a X el caracter que quiera contarse. Ej: X = 4.
X = 0;
NumXs = 0;
Cursor = 0;
CursorMaxpos = String(Num).length;
do {
    trace ("the char "+Cursor+" is "+String(Num).charAt(Cursor));
    if (String(Num).charAt(Cursor) == X) {
        NumXs = NumXs+1;
    }
    Cursor = Cursor+1;
} while (Cursor<CursorMaxpos);
trace (X+" is "+NumXs+" veces.");


// Caracteres XY.
Num = 1234567890;
// Asignar a XY el conjunto de 2 caracteres que quiera contarse. Ej: XY = "48".
XY = 10;
NumXYs = 0;
Cursor = 0;
CursorMaxpos = String(Num).length-1;
// Ese 1 depende de la cantidad de caracteres extra.
do {
         trace ("the char "+Cursor+" is "+String(Num).slice(Cursor, Cursor+2));
         // Ese 2 creo que es el largo del conj a contar.
         if (String(Num).slice(Cursor, Cursor+2) == XY) {
         NumXYs = NumXYs+1;
        }
        Cursor = Cursor+1;
} while (Cursor<CursorMaxpos);
trace (XY+" is "+NumXYs+" veces.");


// Conjuntos C (un elemento o varios contiguos).
Num = 1234567890;
// Asignar a ConjaContar el conjunto que quiera contarse. Ej: ConjaContar = "4861".
// Debe tener al menos 1 caracter o este código malfuncionará, creo. También, su largo no debe ser mayor que el largo del número, sino no sé bien qué hace.
ConjaContar = 567;
NumConjs = 0;
ConjaContarLargo = String(ConjaContar).length;
Cursor = 0;
CursorMaxpos = String(Num).length-(ConjaContarLargo-1);
// Eso es que si el conjunto fuese de 3 caracteres por ejemplo, cuando sólo falte revisar 2 del número entonces ya se sabe que el conjunto no estará ahí. 2 = el largo del conj-1.
do {
    trace ("the char "+Cursor+" is "+String(Num).slice(Cursor, Cursor+ConjaContarLargo));
    // Eso es tomar una parte del número, desde Cursor hasta Cursor + el largo del conj.
    if (String(Num).slice(Cursor, Cursor+ConjaContarLargo) == ConjaContar) {
        NumConjs = NumConjs+1;
    }
    Cursor = Cursor+1;
} while (Cursor<CursorMaxpos);
trace (ConjaContar+" is "+NumConjs+" veces.");


// Conjuntos I (que tienen algún salto o caso de elementos NO contiguos, o que tienen algún caso de "flexibilidad infinita").
Num = 1234567890;
// Asignar a ConjaContar el conjunto que quiera contarse. Ej: ConjaContar = "4I61".
ConjaContar = 234;
NumConjs = 0;
ConjaContarLargo = String(ConjaContar).length;
NumCursor = 0;
NumCursorMaxpos = String(Num).length-(ConjaContarLargo-1);
do {
    ConjCursor = 0;
    CifrasIguales = 0;
    trace ("the char "+NumCursor+" is "+String(Num).charat(NumCursor));
    do {
        trace ("Analizando "+String(Num).charat(NumCursor+ConjCursor)+" y "+String(ConjaContar).charat(ConjCursor));
        if (String(ConjaContar).charat(ConjCursor) == "I" or String(Num).charat(NumCursor+ConjCursor) == String(ConjaContar).charat(ConjCursor)) {
            trace ("son iguales");
            CifrasIguales = CifrasIguales+1;
            ConjCursor = ConjCursor+1;
            if (CifrasIguales == ConjaContarLargo) {
                NumConjs = NumConjs+1;
                trace ("NumConjs+1");
            }
        } else {
            // El conj no se incluye en la parte analizada, pasar a la siguiente.
            ConjCursor = ConjaContarLargo;
        }
    } while (ConjCursor<ConjaContarLargo);
    NumCursor = NumCursor+1;
} while (NumCursor<NumCursorMaxpos);
trace (ConjaContar+" is "+NumConjs+" veces.");


// Conjuntos V (que tienen cierta flexibilidad con posibildad de ser desequilibrada, o "variedad").
Num = 13295152867;
// Asignar a ConjaContar el conjunto que quiera contarse. Ej: ConjaContar = "4V61".
ConjaContar = "1V2IV";
// Asignar a cada V los caracteres aceptados...
V1N1 = "3";
// Eso es Variedad y Número o forma de ella.
V1N2 = "4";
V1N3 = "5";
V1Ns = 3;
V4N1 = "4";
V4N2 = "5";
V4Ns = 2;
NumConjs = 0;
ConjaContarLargo = String(ConjaContar).length;
NumCursor = 0;
NumCursorMaxpos = String(Num).length-(ConjaContarLargo-1);
do {
    ConjCursor = 0;
    CifrasIguales = 0;
    trace ("the char "+NumCursor+" is "+String(Num).charat(NumCursor));
    do {
        trace ("Analizando "+String(Num).charat(NumCursor+ConjCursor)+" y "+String(ConjaContar).charat(ConjCursor));
        if (String(ConjaContar).charat(ConjCursor) == "I" or String(Num).charat(NumCursor+ConjCursor) == String(ConjaContar).charat(ConjCursor)) {
            trace ("son iguales");
            CifrasIguales = CifrasIguales+1;
            ConjCursor = ConjCursor+1;
            if (CifrasIguales == ConjaContarLargo) {
                NumConjs = NumConjs+1;
                trace ("NumConjs+1");
            }
        } else if (String(ConjaContar).charat(ConjCursor) == "V") {
            NCursor = 1;
            NCursorMaxpos = eval("V"+ConjCursor+"Ns");
            do {
                if (String(Num).charat(NumCursor+ConjCursor) == eval("V"+ConjCursor+"N"+NCursor)) {
                    trace ("son iguales");
                    if (CifrasIguales == ConjaContarLargo) {
                        NumConjs = NumConjs+1;
                        trace ("NumConjs+1");
                    }
                    NCursor = NCursorMaxpos;
                }
                NCursor = NCursor+1;
            } while (NCursor < NCursorMaxpos);
            if (NCursor == NCursorMaxpos) {
                // El conj no se incluye en la parte analizada, pasar a la siguiente.
                ConjCursor = ConjaContarLargo;
            }
        } else {
            // El conj no se incluye en la parte analizada, pasar a la siguiente.
            ConjCursor = ConjaContarLargo;
        }
    } while (ConjCursor<ConjaContarLargo);
    NumCursor = NumCursor+1;
} while (NumCursor<NumCursorMaxpos);
trace (ConjaContar+" is "+NumConjs+" veces.");