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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ¿Cómo harías esto en el lenguaje en que prefieras hacerlo?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿Cómo harías esto en el lenguaje en que prefieras hacerlo?  (Leído 2,169 veces)
Tachikomaia


Desconectado Desconectado

Mensajes: 1.411


Hackentifiko!


Ver Perfil
¿Cómo harías esto en el lenguaje en que prefieras hacerlo?
« en: 27 Septiembre 2019, 08:38 am »

Describiré una forma de hacerlo aunque creo que también se puede hacer con un árbol.

Parte 1:
Asignar una posición a un objeto. Por ejemplo el objeto O en 5 en el eje de las X.
Una posible acción es -1, o sea mover O hacia atrás. Esto es candidato, Cand.
La cantidad de situaciones nuevas no analizadas es 0. Us = 0
// Us viene de unsolved, no resuelto, que viene a ser más o menos como no analizada.
La cantidad de situaciones nuevas analizadas es 0. U = 0
// Us es el total, U marcará cual se está analizando de ese total.
Crear archivo cuyo nombre indique la posición de O y en su contenido diga que Cand es "Ninguno". O sea, para llegar a esta situación no se realizaron acciones desde otra, es la inicial.
// Nota: La situación inicial no cuenta en la cantidad de nuevas.

Parte 2:
Aplicar candidato en la situación, o sea, a OX sumarle Cand.
Si 7<OX
   // Solución hallada, ir a Parte MostrarLista.
sino si la situación no está registrada
   Crearla de modo similar a antes, pero el contenido debe marcar en qué situación se estaba antes (OX antes de modificarse), y qué Cand se aplicó.
   Us++
   Crear archivo "U"+Us, o sea, por ejemplo "U1", si Us es 1. El contenido debe ser OX, la situación nueva.
fin del si

Parte 3:
Si Cand < 1
   Cand+2
   // O sea, si el último movimiento fue -1, ahora cambia a +1. La pregunta es si queda alguna acción no realizada.
   Resetear la situación (o sea, OX debe volver al valor que tenía antes de que se le sumara Cand). Esto en realidad lo hago al inicio de la parte 2, pero es largo explicar cómo. Aquí también se puede.
   Ir a la Parte 2.
sino
   U++
   Cargar archivo U (esto implica modificar OX)
   Cand = -1, o sea, resetear Cand
   Ir a Parte 2
fin del si

Parte MostrarLista
Se agrega Cand en la lista, se carga el archivo OX, y así sucesivamente hasta que Cand sea "Ninguno", o sea, se carga un archivo, luego ese marca cual otro cargar, o sea qué situación hubo antes y qué se hizo en ella, y así sucesivamente hasta la 1er situación, a la cual no se llegó por otra. Lo que muestra es 1, 1, 1, o sea, para llegar de 5 a >7 se mueve 3 veces 1 a la derecha.

¿Qué sentido tiene eso?
El método es aplicable a casos más complejos pero quiero aprender a usarlo así que lo apliqué a algo muy simple.

Problemas que tengo al programarlo en Macromedia Flash 5:
- Cuando se da la instrucción de crear/cargar archivo, no se sabe cuando termina, por lo que hay que hacer comprobaciones y el código se hace mucho más largo y complicado de lo que debería.
- Al crear un archivo mediante código, se guardan todas las variables del LV0 (o sea las que no estén en objetos), por lo cual las que no se quieren guardar hay que ponerlas dentro de un objeto, lo cual estira y complica el code.
- Cuando hay una función en el lv0 y se crea un archivo mediante código, una variable extra se guarda en él, el nombre de la función, por ejemplo así:
&PreptoLoadSit=[type Function]&S=5&C=Ninguno
....en vez de:
&S=5&C=Ninguno
- Intenté poner funciones en objetos y llamarlas desde el LV0 pero no me funciona, por lo que, si no descubro alguna forma... tengo un montón de código repetido...

¿Por qué hago el tema?
Porque quiero ver cómo sería posible hacer más fácilmente lo que comenté.

El códogo:
Nota: Algunos nombres son distintos al del ejemplo. Creo que lo principal es que OX es S, que significa Situación pero en esencia es lo mismo.
Código:
Escena 1
   actions for fotograma 1
      // SitIni.
      Base.S = 5;
      // CandIni.
      Actual.C = -1;
      // Vars de Unsolved sits.
      Actual.U = 0;
      Actual.Us = 0;
      // Save iniSit y preparar comprobación.
      S = 5;
      C = "Ninguno";
      Loading.S = -1;
      Loading.C = -10;
      Loading.Cargas = 0;
      Loading.ArchID = "S"+S+".txt";
      fscommand ("save", Loading.ArchID);
   actions for fotograma 3
      Loading.Comps = 0;
      Loading.Cargas = Loading.Cargas+1;
      loadVariables (Loading.ArchID, "Loading");
   actions for fotograma 5
      Loading.Comps = Loading.Comps+1;
      Loading.Verif = 1;
      if (Loading.S != S) {
         Loading.Verif = 0;
      } else if (Loading.C != C) {
         Loading.Verif = 0;
      }
      if (Loading.Verif == 0) {
         if (Loading.Comps == 10) {
            if (Loading.Cargas == 3) {
               fscommand ("save", "30 fallas en savecheck de "+Loading.ArchID);
               fscommand ("quit");
            } else {
               // reload.
               gotoAndPlay (3);
            }
         } else {
            // retry.
            gotoAndPlay (4);
         }
      }
   actions for fotograma 6
      // Reset Sit. Aplic.
      Actual.S = Base.S+Actual.C;
      // ¿Sol?
      if (7<Actual.S) {
         // Sol; begin loads to show list
         List = Actual.C;
         gotoAndPlay (26);
      } else {
         // ¿Sit exist?
         Loading.Cargas = 0;
         Loading.S = -1;
         Loading.C = -10;
         Loading.ArchID = "S"+Actual.S+".txt";
      }
   actions for fotograma 7
      Loading.Comps = 0;
      Loading.Cargas = Loading.Cargas+1;
      loadVariables (Loading.ArchID, "Loading");
   actions for fotograma 9
      Loading.Comps = Loading.Comps+1;
      Loading.Verif = 1;
      if (Loading.S == -1) {
         Loading.Verif = 0;
      } else if (Loading.C == -10) {
         Loading.Verif = 0;
      }
      if (Loading.Verif == 0) {
         if (Loading.Comps == 10) {
            if (Loading.Cargas == 3) {
               // La Sit parece no existir, crearla.
               S = Base.S;
               C = Actual.C;
               Loading.Cargas = 0;
               Loading.ArchID = "S"+Actual.S+".txt";
               gotoAndPlay (15);
            } else {
               // reload.
               gotoAndPlay (7);
            }
         } else {
            // retry.
            gotoAndPlay (8);
         }
      }
   actions for fotograma 10
      // La sit existe. ¿Candmod is pos?
      if (Actual.C<1) {
         // Candmod.
         Actual.C = Actual.C+2;
         // Reset sit, then Aplic.
         gotoAndPlay (6);
      } else {
         // Load UnsSit.
         Actual.U = Actual.U+1;
         Loading.Cargas = 0;
         Base.S = -1;
         Loading.ArchID = "U"+Actual.U+".txt";
      }
   actions for fotograma 11
      Loading.Comps = 0;
      Loading.Cargas = Loading.Cargas+1;
      loadVariables (Loading.ArchID, "Base");
   actions for fotograma 13
      if (Base.S == -1) {
         Loading.Comps = Loading.Comps+1;
         if (Loading.Comps == 10) {
            if (Loading.Cargas == 3) {
               fscommand ("save", "30 fallas en loading "+Loading.ArchID);
               fscommand ("quit");
            } else {
               // reload.
               gotoAndPlay (11);
            }
         } else {
            // retry.
            gotoAndPlay (12);
         }
      }
   actions for fotograma 14
      Base.S = Number(Base.S);
      // Reset Cand. Aplic.
      Actual.C = -1;
      gotoAndPlay (6);
   actions for fotograma 15
      // Creando Sit.
      fscommand ("save", Loading.ArchID);
   actions for fotograma 17
      Loading.Comps = 0;
      Loading.Cargas = Loading.Cargas+1;
      loadVariables (Loading.ArchID, "Loading");
   actions for fotograma 19
      Loading.Comps = Loading.Comps+1;
      Loading.Verif = 1;
      if (Loading.S != S) {
         Loading.Verif = 0;
      } else if (Loading.C != C) {
         Loading.Verif = 0;
      }
      if (Loading.Verif == 0) {
         if (Loading.Comps == 10) {
            if (Loading.Cargas == 3) {
               fscommand ("save", "30 fallas en savecheck de "+Loading.ArchID);
               fscommand ("quit");
            } else {
               // reload.
               gotoAndPlay (17);
            }
         } else {
            // retry.
            gotoAndPlay (18);
         }
      }
   actions for fotograma 20
      // Save UnsSit.
      delete C;
      S = Actual.S;
      Actual.Us = Actual.Us+1;
      Loading.S = -1;
      Loading.Cargas = 0;
      Loading.ArchID = "U"+Actual.Us+".txt";
      fscommand ("save", Loading.ArchID);
   actions for fotograma 22
      Loading.Comps = 0;
      Loading.Cargas = Loading.Cargas+1;
      loadVariables (Loading.ArchID, "Loading");
   actions for fotograma 24
      if (Loading.S == -1) {
         Loading.Comps = Loading.Comps+1;
         if (Loading.Comps == 10) {
            if (Loading.Cargas == 3) {
               fscommand ("save", "30 fallas en savecheck de "+Loading.ArchID);
               fscommand ("quit");
            } else {
               // reload.
               gotoAndPlay (22);
            }
         } else {
            // retry.
            gotoAndPlay (23);
         }
      }
   actions for fotograma 25
      // ¿Candmod is pos?
      gotoAndPlay (10);
   actions for fotograma 26
      S = Base.S;
      Loading.Cargas = 0;
      Base.S = -1;
      Base.C = -10;
      Loading.ArchID = "S"+S+".txt";
   actions for fotograma 27
      Loading.Comps = 0;
      Loading.Cargas = Loading.Cargas+1;
      loadVariables (Loading.ArchID, "Base");
   actions for fotograma 29
      Loading.Comps = Loading.Comps+1;
      Loading.Verif = 1;
      if (Base.S == -1) {
         Loading.Verif = 0;
      } else if (Base.C == -10) {
         Loading.Verif = 0;
      }
      if (Loading.Verif == 0) {
         if (Loading.Comps == 10) {
            if (Loading.Cargas == 3) {
               fscommand ("save", "30 fallas en loading "+Loading.ArchID);
               fscommand ("quit");
            } else {
               // reload.
               gotoAndPlay (27);
            }
         } else {
            // retry.
            gotoAndPlay (28);
         }
      }
   actions for fotograma 30
      if (Base.C != "Ninguno") {
         List = Base.C+" "+List;
         gotoAndPlay (26);
      } else {
         stop ();
      }

Gracias.


« Última modificación: 28 Septiembre 2019, 00:24 am por Tachikomaia » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Programa estilo Microsoft Math ¿Como harias? « 1 2 »
.NET (C#, VB.NET, ASP)
traviatØ 11 7,700 Último mensaje 20 Marzo 2010, 19:51 pm
por traviatØ
¿Se puede hacer? y... ¿qué lenguaje se utilizaría para hacerlo?
Dudas Generales
avmiitxe 3 3,561 Último mensaje 16 Febrero 2011, 17:34 pm
por SuperDraco
te gustaria destruir facebook? como lo harias? :D « 1 2 »
Foro Libre
MasterPM2 16 6,827 Último mensaje 29 Marzo 2012, 13:48 pm
por m0rf
Linux Mint 19 ya tiene fecha de lanzamiento, quizás prefieras esperar por él ...
Noticias
wolfbcn 0 2,173 Último mensaje 5 Enero 2018, 02:05 am
por wolfbcn
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines