Página 1 de 1

Solucionado (caso partic): Desde una serie obtener subserie.

Publicado: 05 Nov 2018, 04:00
por Tachikomaia
Llamemos a esto:
1
2
3, 4
3
3, 5
6, 7, 8
4
3, 6
6, 7, 9
10, 11, 12, 13
etc
...la serie base.

Como ven, sus elementos pueden ser un número o subseries de números. Ahí están siempre en orden pero no necesariamente es así.

Se describe o produce (en resumen) así:

Código: Seleccionar todo

El 1er número es 1.
El largo actual (ActualL) es 1.
El largo máximo (MaxL) es 1.
Repetir:
   Si ActualL < MaxL
      ActualL aumenta 1.
      Sumar 1 al último número de la subserie con ese largo, y si llega al máximo (sigo hablando del número, no del largo) resetearlo y aumentar el delantero y así sucesivamente. Es igual a aumentar un número cualquiera, acá el tema es que los elementos no van del 0 al 9 sino del 1 hasta aún no sé cuánto, pero más de 100. Además, si por ejemplo el largo es 2 y los números son máximo, máximo, queda 1, 1, no se agregan números (sino cambiaría el largo).
   Sino
      Crear una serie compuesta de ActualL números, que comience desde el último número usado+1.
      ActualL vuelve a ser 1
      MaxL aumenta 1.
No sé si estoy olvidando algo importante, una descripción más detallada sería esta:
Spoiler: show

Código: Seleccionar todo

Escena 1
   actions for fotograma 1
      Item1 = "WispG";
      Item2 = "ShadeG";
      Item3 = "DryadG";
      Item4 = "AuraG";
      Item5 = "SalaG";
      L1P1 = 0;
      MinL = 1;
      ActualL = 1;
      MaxL = 1;
      FirstL1 = "TakoB ";
      function Concatenarytrace () {
         Print = "";
         Cursor = 0;
         do {
            Cursor = Cursor+1;
            Print = Print+eval("Item"+eval("L"+ActualL+"P"+Cursor))+" ";
         } while (Cursor<ActualL);
         trace (Print);
         if (Print == eval("FirstL"+ActualL)) {
            // Si lo mostrado es igual al grabado como último...
            // ...no se hacen más exp con ese L.
            MinL = MinL+1;
         }
         if (ActualL<MaxL) {
            // Si el largo es aumentable, aumenta.
            ActualL = ActualL+1;
         } else {
            // Sino, queda al mínimo pero el máximo aumenta.
            // Se genera el límite para el nuevo MaxL.
            if (MaxL<7) {
               MaxL = MaxL+1;
               set ("FirstL"+MaxL, "");
               Cursor = 1;
               LXPY = MaxL+eval("L"+ActualL+"P1")+Cursor-1;
               if (5<LXPY) {
                  LXPY = 1;
               }
               do {
                  set ("L"+MaxL+"P"+Cursor, LXPY);
                  set ("FirstL"+MaxL, eval("FirstL"+MaxL)+eval("Item"+LXPY)+" ");
                  Cursor = Cursor+1;
                  LXPY = LXPY+1;
                  if (5<LXPY) {
                     LXPY = 1;
                  }
               } while (Cursor<MaxL);
               if (LXPY == 1) {
                  LXPY = 6;
               }
               LXPY = LXPY-1;
               set ("L"+MaxL+"P"+Cursor, LXPY);
               set ("FirstL"+MaxL, eval("FirstL"+MaxL)+eval("Item"+LXPY)+" ");
            }
            ActualL = MinL;
         }
         gotoAndPlay (2);
      }
   actions for fotograma 2
      Cursor = ActualL;
   actions for fotograma 3
      if (eval("L"+ActualL+"P"+Cursor)<5) {
         // Si el char es aumentable, aumenta.
         set ("L"+ActualL+"P"+Cursor, eval("L"+ActualL+"P"+Cursor)+1);
         Concatenarytrace();
      }
   actions for fotograma 4
      // El char no es aumentable, ergo se resetea.
      set ("L"+ActualL+"P"+Cursor, 1);
      if (1<Cursor) {
         // Si Cursor puede bajar, baja.
         Cursor = Cursor-1;
      } else {
         // Sino, se muestra el reseteado.
         Concatenarytrace();
      }
   actions for fotograma 5
      if (eval("L"+ActualL+"P"+Cursor)<5) {
         // Si el char es aumentable, aumenta.
         set ("L"+ActualL+"P"+Cursor, eval("L"+ActualL+"P"+Cursor)+1);
         Concatenarytrace();
      } else {
         // Sino, se resetea y reinicia un proceso.
         gotoAndPlay (4);
      }
Aunque los números se cambian por ítems, está limitado a 5, largo 7, y tiene un error o más de uno que no viene/n al caso. Creo que nada más...
Quiero transformar la serie en esto:
1
3, 4
2
6, 7, 8 si se cumplen ciertas condiciones, sino saltear.
3, 5
(6, 7, 8) o (10, 11, 12, 13) o saltear, dependiendo de ciertas condiciones.
(6, 7, 8) o 6, 7, 9, dependiendo de si 6, 7, 8 se usó o no.

El cambio es que en los momentos pares puede haber una serie paralela, compuesta de subseries de largo+1 al anterior. En cuanto a qué números contiene, eso es parte de lo complejo, porque usa los que habría en la serie base.
La serie base sólo cambia en que al producir un largo por 1era vez, le suma 1 al último número, no repite una subserie ya producida.

Lo que quiero, como dice el título, es obtener las subseries de la serie paralela, a partir de la serie base que ya tenga.

Si por ejemplo tengo
1
3, 4
2
...debo poder obtener 6, 7, 8 sin hacer previamente la serie.

Si tengo
1
3, 4
2
6, 7, 8
3, 5
...debo poder obtener 10, 11, 12, 13.

Si tengo
1
3, 4
2
3, 5
...debo poder obtener 6, 7, 8

Por lo que veo es algo como:
Último número de la subserie anterior más larga + 2 - veces que se salteó el crear un nuevo largo.

Si por ejemplo tengo
1
3, 4
2
...debo hacer 4+2 para obtener 6, el resto es sólo sumar 1.

Si tengo
1
3, 4
2
6, 7, 8
3, 5
...debo hacer 8+2 para obtener 10...

1
3, 4
2
salteado
3, 5
...debo hacer 5+2-1 para obtener 6...

Bueno... probaré a ver si funciona o no. ¿Qué creen? ¿saben (o se les ocurre) un método más simple?

Re: Desde una serie obtener subserie.

Publicado: 05 Nov 2018, 04:09
por Tachikomaia
Eh, acabo de ver que el número inicial de las subseries con nuevo máximo largo forman una serie que ya he tratado y me han comentado que tiene un nombre y formula.
1, 3, 6, 10.
El número siguiente es el anterior + la posición actual.
3 = 1+2
6 = 3+3
10 = 6+4
So... en mi caso sería ActualL+1er número de la anterior subserie más larga. Como se puede resetear tengo que guardarlo cuando recién se crea, y hacer otros arreglos, pero bue, creo que es más fácil que lo que había pensado.

Re: Solucionado (caso partic): Desde una serie obtener subse

Publicado: 10 Nov 2018, 02:14
por Juan Zuluaga
No entendí nada.

Re: Solucionado (caso partic): Desde una serie obtener subse

Publicado: 10 Nov 2018, 19:19
por ManuelB
Juan Zuluaga escribió:No entendí nada.
Es lo que nos pasa contigo...

Re: Solucionado (caso partic): Desde una serie obtener subse

Publicado: 10 Nov 2018, 20:02
por Edu
Yo a Jvahn lo entiendo, a Tachi no porque ni él se entiende.

Re: Solucionado (caso partic): Desde una serie obtener subse

Publicado: 10 Nov 2018, 20:29
por Nil
Yo sé que con esfuerzo puedo entender a cualquiera (al menos en este foro), porque en alguna ocasión lo he hecho. Pero, ¿para qué malgastar esfuerzos?

Imagen

Re: Solucionado (caso partic): Desde una serie obtener subse

Publicado: 11 Nov 2018, 00:11
por Juan Zuluaga
ManuelB escribió:
Juan Zuluaga escribió:No entendí nada.
Es lo que nos pasa contigo...

Es que soy selectivo.

Re: Solucionado (caso partic): Desde una serie obtener subse

Publicado: 16 Nov 2018, 08:49
por Tachikomaia
Al final hallé una solución más simple a lo que necesitaba. Pero es complicado explicar todo ¿curioso no? Simple pero complejo de explicar.

A ver... yo quería algo así:
1
3, 4
2
6, 7, 8 si se cumplen ciertas condiciones, sino saltear.
3, 5
(6, 7, 8) o (10, 11, 12, 13) o saltear, dependiendo de ciertas condiciones.
(6, 7, 8) o 6, 7, 9, dependiendo de si 6, 7, 8 se usó o no.

Pero al final (luego incluso de decir "solucionado"), programando la cosa, me di cuenta que era más fácil que las series de nuevo largo comenzaran con el número más recientemente usado+1, de modo que no había que calcular cómo sería la 1era parte de la serie base. Y tiene más sentido así.
1
2, 3
2
4, 5, 6 si se cumplen ciertas condiciones, sino saltear.
2, 4
(5, 6, 7) si antes se salteó, sino (7, 8, 9, 10).

Antes decía "A, B o saltear", para simplificar, pero bueno, es más complejo que eso, y no es "en las partes pares".


En resumen estoy buscando una forma óptima y divertida de hacer experimentos, en lo que sea. Pongamos que fuese química. Sería aburrido hacer:
Agua+Alcohol
Agua+Arena
Agua+Algodón
Agua+Azúcar
¡Siempre Agua! ¡Siempre 2 cosas!

Del modo que he desarrollado se pueden hacer combinaciones mucho más variadas...

También se trata de hacer los experimentos de un modo más inteligente, lo probablemente más efectivo probarlo 1ero, pero eso me resulta complicado de programar. En parte porque varío el largo y el número con el que empiezan, pero el aumento es siempre 1 y hay marcado un límite. Ej: Empiezo desde 10, 10, llego hasta 100, 100, vuelvo a 1, 1, termina en 10, 9. Si en cambio probara lo más probable tendría que hacer una lista paralela de lo que he probado y cada vez que se pruebe siguiendo una lista clásica ver si ya se probó o no. Sino, generar una lista con un orden anormal, pero es difícil, y además yo cuando genero una lista no guardo mucho, sólo qué numeros son, pero para hacer algo con lo probable habría que tener una lista guardada.

Lo más simple es tener un número o conjunto de números e irlos aumentando:
10, 10
10, 11
etc
Nada se graba, sólo están los números que se van modificando.

En cambio, si se quiere un orden "inteligente", hay que tenerlo guardado porque no hay forma de deducirlo (o no conozco) así de la nada, y además el criterio puede ir cambiando o sea que la lista debería poderse reordenar... Me perdí. Son cosas difíciles de explicar a tal punto que a veces siento que no sé de lo que hablo. Pero haré un tema de eso. Algo como una IA que adivine una película, videojuego, etc, diciendo letras. En mi país es un juego llamado Ahorcado, no sé en los vuestros.

En fin, nos vemos en otro tema, este ya fue o al menos ya no estoy concentrado en él.