Foro SofosAgora
http://sofosagora.net/

Solucionado (caso partic): Desde una serie obtener subserie.
http://sofosagora.net/ciencia-general/solucionado-caso-partic-desde-una-serie-obtener-subserie-t9227.html
Página 1 de 1

Autor:  Tachikomaia [ 05 Nov 2018, 04:00 ]
Asunto:  Solucionado (caso partic): Desde una serie obtener subserie.

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:
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:
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?

Autor:  Tachikomaia [ 05 Nov 2018, 04:09 ]
Asunto:  Re: Desde una serie obtener subserie.

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.

Autor:  Juan Zuluaga [ 10 Nov 2018, 02:14 ]
Asunto:  Re: Solucionado (caso partic): Desde una serie obtener subse

No entendí nada.

Autor:  ManuelB [ 10 Nov 2018, 19:19 ]
Asunto:  Re: Solucionado (caso partic): Desde una serie obtener subse

Juan Zuluaga escribió:
No entendí nada.


Es lo que nos pasa contigo...

Autor:  Edu [ 10 Nov 2018, 20:02 ]
Asunto:  Re: Solucionado (caso partic): Desde una serie obtener subse

Yo a Jvahn lo entiendo, a Tachi no porque ni él se entiende.

Autor:  Nil [ 10 Nov 2018, 20:29 ]
Asunto:  Re: Solucionado (caso partic): Desde una serie obtener subse

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

Autor:  Juan Zuluaga [ 11 Nov 2018, 00:11 ]
Asunto:  Re: Solucionado (caso partic): Desde una serie obtener subse

ManuelB escribió:
Juan Zuluaga escribió:
No entendí nada.


Es lo que nos pasa contigo...



Es que soy selectivo.

Página 1 de 1 Todos los horarios son UTC + 1 hora [ DST ]
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/