Me refiero a este código:
En pseudocódigo -o lo más parecido que puedo hacer a eso- sería:
Código Pseudo:
Ver originalParte 1:
// Cadenas candidatas: Desde "A", +1 ("B", "C"... "Z", "AA", etc).
Cadena = "A";
// Otros elementos:
Caracteres = "ABCDEFGHIJKLMNÑOPQRSTUVWXYZ";
Caracter0ID = 0;
CursorMaxPos = 0;
Parte 2:
// Análisis:
Si la cadena es "OK", fin.
Parte 3:
Cursor = 0;
Cadena = "";
Parte 4:
Resumen = "Caracter"+Cursor+"ID";
Evaluación_del_Resumen = eval(Resumen)+1;
set (Resumen, Evaluación_del_Resumen);
// Las dos 1eras variables son para evitar repetir la obtención de la suma de "Caracter", Cursor e "ID", y para evitar repetir su evaluación. Si no las usara entonces tendría que hacer, con los mismos valores, las mismas sumas y evaluaciones más de una vez. No tiene sentido, es mejor hacerlo una vez, guardar el resultado y volver a usarlo mientras los valores no cambien. Eso es lo que hago.
Parte 5:
Si la Evaluación_del_Resumen es menos que 27
Agrega (delante), en Cadena, el caracter Evaluación_del_Resumen de Caracteres.
Cursor = Cursor+1;
Si Cursor es mayor que CursorMaxPos, el cambio en la cadena está completo, ir a parte 2 a analizarla.
Sino, volverá a agregar, ver parte 6.
Sino
// El char a agregar está fuera del límite.
set (Resumen, 0);
Cadena = Cadena+"A";
Cursor = Cursor+1;
Si Cursor es mayor que CursorMaxPos, es como si del número 9 hubiera pasado al 10, hay que agregar un caracter.
CursorMaxPos = CursorMaxPos+1;
set ("Caracter"+CursorMaxPos+"ID", 0);
Cadena = Cadena+"A";
ir a Parte 2.
Sino
// Hay que aumentar/agregar uno.
Ir a parte 4.
fin_del_si
fin_del_si
Parte 6:
Resumen = "Caracter"+Cursor+"ID";
Evaluación_del_Resumen = eval(Resumen);
ir al la parte 5.
¿Cómo optimizar el código?
Conste que tengo un criterio especial:
- No usar arrays, do while, for y similares.
- No crear una función por algo que sólo se aplique en una parte del código.
- Si else se puede evitar con un goto, usar goto.
- Si un montón de ifs se pueden evitar con eval, usar eval.
- Goto y eval no son problema, pero evitarlos de ser posible.
...en cuanto a funciones que se llamen recursivamente, no sé, tendría que ver, pero supongo que prefiero goto.
Una de las cosas que me parecen QUIZÁ mejorables es que E (o Cadena) en la parte 3 inicia como "" cuando es sabido que debería iniciar como Char0ID. Uno de los problemas es que Char0ID podría tener que cambiar ANTES, si es 27 o más. Con eso podría suponer que un
if (EvaledResu < 27) {
o
if (Char0ID < 27) {
...es necesario en la parte 3. ¿Pero un if es realmente mejor que definir vacía a una variable? No creo, pero habría que seguir viendo qué más hay.
Otra cosa, en la parte 3, es que
set (Resu, EvaledResu);
...aparentemente conviene ponerlo dentro del 1er if de la parte 4. Porque ahí hay un else con
set (Resu, 0);
...o sea, si queda antes del if entonces puede que se defina la variable y luego se reseté, por lo cual convendría no haberla definido; no se usa para hacer el if así que puede definirse después, momento en que se sabe que no se reseteará. Esto ya lo probé y funciona, es un comentario/ejemplo más para que entiendan qué estoy pidiendo.
En fin, hay más, pero no lo logro entender bien ahora.
Gracias.