Código AS de Macromedia Flash 5:
Ver original
// Elms_candidatos: Desde A, +1. E = "A"; // Otros elms: Data = "ABCDEFGHIJKLMNÑOPQRSTUVWXYZ"; Char0ID = 0; CursorMaxPos = 0; // Anali: if (E == "OK") { Resp = "Un elemento que cumple la condición es el "+E+"\n"+Resp; stop (); } Resp = "El elemento "+E+" no cumple la condición.\n"+Resp; Cursor = 0; E = ""; Resu = "Char"+Cursor+"ID"; EvaledResu = eval(Resu)+1; set (Resu, EvaledResu); if (EvaledResu < 27) { // Agrega caracter. E = Data.charAt(EvaledResu)+E; Cursor = Cursor+1; if (Cursor > CursorMaxPos) { // Todos agregados. gotoAndPlay (2); } else { // Volverá a agregar. } } else { // El char a agregar está fuera del límite. set (Resu, 0); E = E+Data.charAt(0); Cursor = Cursor+1; if (Cursor > CursorMaxPos) { // Hay que agregar uno. CursorMaxPos = CursorMaxPos+1; set ("Char"+CursorMaxPos+"ID", 0); E = E+Data.charAt(0); gotoAndPlay (2); } else { // Hay que aumentar/agregar uno. gotoAndPlay (4); } } Resu = "Char"+Cursor+"ID"; EvaledResu = eval(Resu); gotoAndPlay (5);
En pseudocódigo -o lo más parecido que puedo hacer a eso- sería:
Código Pseudo:
Ver original
Parte 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.