elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Mejorar esta búsqueda del camino menos costoso.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Mejorar esta búsqueda del camino menos costoso.  (Leído 225 veces)
Tachikomaia


Desconectado Desconectado

Mensajes: 1.518


Hackentifiko!


Ver Perfil
Mejorar esta búsqueda del camino menos costoso.
« en: 30 Marzo 2025, 10:08 am »

Flash pone carteles si un proceso es muy largo así que lo dividí en frames. En ese sentido no es que digo de mejorarlo, eso es complicado.

Código
  1. Escena 1
  2.   actions for fotograma 1
  3.      // De las permutaciones a crear:
  4.      Largo = 1;
  5.      // Primeras opciones y costos:
  6.      // Largo de la permutación, id:
  7.      L1P1 = "A";
  8.      L1P1Costo = 4;
  9.      L1P1Opciones = ["B", "C", "D", "E", "F", "G", "H"];
  10.      L1P2 = "B";
  11.      L1P2Costo = 4;
  12.      L1P2Opciones = ["A", "C", "D", "E", "F", "G", "H"];
  13.      L1P3 = "C";
  14.      L1P3Costo = 4;
  15.      L1P3Opciones = ["A", "B", "D", "E", "F", "G", "H"];
  16.      L1P4 = "D";
  17.      L1P4Costo = 4;
  18.      L1P4Opciones = ["A", "B", "C", "E", "F", "G", "H"];
  19.      L1P5 = "E";
  20.      L1P5Costo = 2;
  21.      L1P5Opciones = ["A", "B", "C", "D", "F", "G", "H"];
  22.      L1P6 = "F";
  23.      L1P6Costo = 2;
  24.      L1P6Opciones = ["A", "B", "C", "D", "E", "G", "H"];
  25.      L1P7 = "G";
  26.      L1P7Costo = 2;
  27.      L1P7Opciones = ["A", "B", "C", "D", "E", "F", "H"];
  28.      L1P8 = "H";
  29.      L1P8Costo = 2;
  30.      L1P8Opciones = ["A", "B", "C", "D", "E", "F", "G"];
  31.      // Costes:
  32.      CostoAB = 2;
  33.      CostoBA = 2;
  34.      CostoAC = 1;
  35.      CostoCA = 1;
  36.      CostoAD = 2;
  37.      CostoDA = 2;
  38.      CostoAE = 2;
  39.      CostoEA = 2;
  40.      CostoAF = 2;
  41.      CostoFA = 2;
  42.      CostoAG = 3;
  43.      CostoGA = 3;
  44.      CostoAH = 3;
  45.      CostoHA = 3;
  46.      //
  47.      CostoBC = 2;
  48.      CostoCB = 2;
  49.      CostoBD = 1;
  50.      CostoDB = 1;
  51.      CostoBE = 2;
  52.      CostoEB = 2;
  53.      CostoBF = 2;
  54.      CostoFB = 2;
  55.      CostoBG = 3;
  56.      CostoGB = 3;
  57.      CostoBH = 3;
  58.      CostoHB = 3;
  59.      //
  60.      CostoCD = 2;
  61.      CostoDC = 2;
  62.      CostoCE = 2;
  63.      CostoEC = 2;
  64.      CostoCF = 2;
  65.      CostoFC = 2;
  66.      CostoCG = 3;
  67.      CostoGC = 3;
  68.      CostoCH = 3;
  69.      CostoHC = 3;
  70.      //
  71.      CostoDE = 3;
  72.      CostoED = 3;
  73.      CostoDF = 2;
  74.      CostoFD = 2;
  75.      CostoDG = 3;
  76.      CostoGD = 3;
  77.      CostoDH = 3;
  78.      CostoHD = 3;
  79.      //
  80.      CostoEF = 1;
  81.      CostoFE = 1;
  82.      CostoEG = 1;
  83.      CostoGE = 1;
  84.      CostoEH = 2;
  85.      CostoHE = 2;
  86.      //
  87.      CostoFG = 2;
  88.      CostoGF = 2;
  89.      CostoFH = 1;
  90.      CostoHF = 1;
  91.      //
  92.      CostoGH = 1;
  93.      CostoHG = 1;
  94.      // Para saber cuántas permutaciones con el largo anterior hay...
  95.      // que extender:
  96.      PermutacionesDeOldL = 8;
  97.      Mensaje = "";
  98.   actions for fotograma 2
  99.      // Se extenderá L?P1, L?P2, etc, esto evita repetir concatenaciones:
  100.      L_OldLargo_P = "L"+Largo+"P";
  101.      // Incrementar largo de las permutaciones a crearse:
  102.      Largo++;
  103.      Mensaje = "Nuevo largo de permutaciones: "+Largo;
  104.      // Parte de nombres de nuevas permutaciones, usado para evitar...
  105.      // repetir concatenaciones:
  106.      L_NewLargo_P = "L"+Largo+"P";
  107.      NroDePermutacionaExtender = 0;
  108.      // Cuando se empiece a extender permutaciones más largas,
  109.      // esto determina cuántas hay que extender (PermutacionesDeOldL):
  110.      PermutacionesNuevas = 0;
  111.   actions for fotograma 3
  112.      // Cambiar permutación a extender:
  113.      NroDePermutacionaExtender++;
  114.      NombreDePaExtender = L_OldLargo_P+NroDePermutacionaExtender;
  115.      // Para evitar evals:
  116.      EvaluedNombreDePaExtender = eval(NombreDePaExtender);
  117.      // trace ("Se extenderá la permutación "+NombreDePaExtender+", que es "+EvaluedNombreDePaExtender);
  118.      // Copia de variable, para evitar referencias:
  119.      CaracteresDisponibles = eval(NombreDePaExtender+"Opciones");
  120.      // Para evitar restas:
  121.      LastNroDeCaracter = CaracteresDisponibles.length-1;
  122.      NroDeCaracteraAgregar = -1;
  123.      // Copia para evitar referencias:
  124.      Costo = eval(NombreDePaExtender+"Costo");
  125.      Mensaje = "Se extenderá la permutación "+NombreDePaExtender+", que es "+EvaluedNombreDePaExtender+" y cuesta "+Costo;
  126.      // Último punto alcanzado:
  127.      LastPunto = EvaluedNombreDePaExtender.charat(EvaluedNombreDePaExtender.length-1);
  128.      // ¿NO SE PODRÍA USAR LastNroDeCaracter?
  129.      // Para evitar repetir concatenaciones al averiguar costo a sumar:
  130.      Costo_LastPunto = "Costo"+LastPunto;
  131.      // ResumenParaCosto = "Costo"+(eval(NombreDePaExtender).charat(LastNroDeCaracter));
  132.   actions for fotograma 4
  133.      // Cambiar el caracter que se agrega:
  134.      NroDeCaracteraAgregar++;
  135.      // Crear permutación usando la a extender,
  136.      // agregándole el caracter señalado:
  137.      PermutacionesNuevas++;
  138.      NombreDeNuevaP = L_NewLargo_P+PermutacionesNuevas;
  139.      set (NombreDeNuevaP, eval(NombreDePaExtender)+CaracteresDisponibles[NroDeCaracteraAgregar]);
  140.      // trace ("Nueva permutación: "+NombreDeNuevaP+": "+eval(NombreDeNuevaP));
  141.      // Crear su variable de Opciones
  142.      // (slice para copiar el array,
  143.      // splice para quitarle un elemento):
  144.      // Copia el array:
  145.      CopiaDelArray = CaracteresDisponibles.slice();
  146.      // A esa copia se le quita el caracter agregado en la permutación:
  147.      CopiaDelArray.splice(NroDeCaracteraAgregar, 1);
  148.      set (NombreDeNuevaP+"Opciones", CopiaDelArray);
  149.      // trace ("Sus opciones son: "+NombreDeNuevaP+"Opciones: "+eval(NombreDeNuevaP+"Opciones"));
  150.      set (NombreDeNuevaP+"Costo", Costo+(eval(Costo_LastPunto+(eval(NombreDeNuevaP).charat(eval(NombreDeNuevaP).length-1)))));
  151.   actions for fotograma 5
  152.      if (NroDeCaracteraAgregar<LastNroDeCaracter) {
  153.         // Se volverá a extender la permutación, cambiando el caracter:
  154.         gotoAndPlay (4);
  155.      } else if (NroDePermutacionaExtender<PermutacionesDeOldL) {
  156.         // Se volverá a cambiar la permutación a extender:
  157.         delete eval(NombreDePaExtender);
  158.         delete eval(NombreDePaExtender+"Opciones");
  159.         delete eval(NombreDePaExtender+"Costo");
  160.         gotoAndPlay (3);
  161.      } else if (Largo<4) {
  162.         // Se volverá a incrementar el largo...
  163.         // de las permutaciones a extender:
  164.         delete eval(NombreDePaExtender);
  165.         delete eval(NombreDePaExtender+"Opciones");
  166.         delete eval(NombreDePaExtender+"Costo");
  167.         PermutacionesDeOldL = PermutacionesNuevas;
  168.         gotoAndPlay (2);
  169.      }
  170.   actions for fotograma 6
  171.      Mensaje = "Borrando variables innecesarias.";
  172.      NroDePermutacionaBorrar = 0;
  173.      do {
  174.         NroDePermutacionaBorrar++;
  175.         delete eval(L_NewLargo_P+NroDePermutacionaBorrar+"Opciones");
  176.         delete eval(L_NewLargo_P+NroDePermutacionaBorrar);
  177.      } while (NroDePermutacionaBorrar<PermutacionesNuevas);
  178.   actions for fotograma 7
  179.      delete eval(NombreDePaExtender);
  180.      delete eval(NombreDePaExtender+"Opciones");
  181.      delete PermutacionesDeOldL;
  182.      delete Largo;
  183.      delete L_OldLargo_P;
  184.      delete L_NewLargo_P;
  185.      delete NroDePermutacionaExtender;
  186.      delete PermutacionesNuevas;
  187.      delete NombreDePaExtender;
  188.      delete CaracteresDisponibles;
  189.      delete LastNroDeCaracter;
  190.      delete NroDeCaracteraAgregar;
  191.      delete NombreDeNuevaP;
  192.      delete CopiaDelArray;
  193.      delete NroDePermutacionaBorrar;
  194.      Mensaje = "Listo.";
  195.      stop ();
  196.  

Tanto borrado de variables al final es porque falta que muestre cual es el camino, tendría que comparar cada costo obtenido y quedarse con el menor ¿me conviene hacer eso al final?

El caso que estoy analizando es probablemente simplón: Pasar por los 8 tornillos (o lo que sean) tocando la menor cantidad de escaleras posible:
https://www.youtube.com/watch?v=ovi2Vr1Wza0
El video ese no es mío y no se está intentando eso, es simplemente para que vean.

Pero bueno ¿estoy borrando variables inexistentes?

Y me faltaría que se borren estas:
  Variable _level0.CostoAB = 2
  Variable _level0.CostoBA = 2
  Variable _level0.CostoAC = 1
  Variable _level0.CostoCA = 1
  Variable _level0.CostoAD = 2
  Variable _level0.CostoDA = 2
  Variable _level0.CostoAE = 2
  Variable _level0.CostoEA = 2
  Variable _level0.CostoAF = 2
  Variable _level0.CostoFA = 2
  Variable _level0.CostoAG = 3
  Variable _level0.CostoGA = 3
  Variable _level0.CostoAH = 3
  Variable _level0.CostoHA = 3
  Variable _level0.CostoBC = 2
  Variable _level0.CostoCB = 2
  Variable _level0.CostoBD = 1
  Variable _level0.CostoDB = 1
  Variable _level0.CostoBE = 2
  Variable _level0.CostoEB = 2
  Variable _level0.CostoBF = 2
  Variable _level0.CostoFB = 2
  Variable _level0.CostoBG = 3
  Variable _level0.CostoGB = 3
  Variable _level0.CostoBH = 3
  Variable _level0.CostoHB = 3
  Variable _level0.CostoCD = 2
  Variable _level0.CostoDC = 2
  Variable _level0.CostoCE = 2
  Variable _level0.CostoEC = 2
  Variable _level0.CostoCF = 2
  Variable _level0.CostoFC = 2
  Variable _level0.CostoCG = 3
  Variable _level0.CostoGC = 3
  Variable _level0.CostoCH = 3
  Variable _level0.CostoHC = 3
  Variable _level0.CostoDE = 3
  Variable _level0.CostoED = 3
  Variable _level0.CostoDF = 2
  Variable _level0.CostoFD = 2
  Variable _level0.CostoDG = 3
  Variable _level0.CostoGD = 3
  Variable _level0.CostoDH = 3
  Variable _level0.CostoHD = 3
  Variable _level0.CostoEF = 1
  Variable _level0.CostoFE = 1
  Variable _level0.CostoEG = 1
  Variable _level0.CostoGE = 1
  Variable _level0.CostoEH = 2
  Variable _level0.CostoHE = 2
  Variable _level0.CostoFG = 2
  Variable _level0.CostoGF = 2
  Variable _level0.CostoFH = 1
  Variable _level0.CostoHF = 1
  Variable _level0.CostoGH = 1
  Variable _level0.CostoHG = 1
  Variable _level0.EvaluedNombreDePaExtender = "HGF"
  Variable _level0.Costo = 5
  Variable _level0.LastPunto = "F"
  Variable _level0.Costo_LastPunto = "CostoF"
  Variable _level0.L3P336Costo = 5

O sea, si el programa tuviese más posibles caminos, serían más cantidad de "CostoLetra1Letra2". Además esta L3P336Costo, que supongo es la última de largo 3, si el programa llegara a formar caminos más largos (lo configuré hasta 4 por ahora para pruebas, pero se precisan 8), sería otra. No sé por qué no se borra.
Otras supongo que son fáciles de borrar.

¿Qué más me recomiendan?

No he olvidado esto:
https://foro.elhacker.net/buscador-t522268.0.html
pasa que en aquél entonces no me atraía tanto el tema. Leeré eso pronto.


« Última modificación: 30 Marzo 2025, 10:14 am por Tachikomaia » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines