Foro SofosAgora

Foro abierto a los intereses de sus usuarios. Debate, aprende y diviértete.
Fecha actual 14 Dic 2018, 00:55

Todos los horarios son UTC + 1 hora [ DST ]




Nuevo tema Responder al tema  [ 17 mensajes ]  Ir a página 1, 2  Siguiente
Autor Mensaje
NotaPublicado: 16 Nov 2018, 08:01 
Desconectado
Avatar de Usuario

Registrado: 10 Ago 2011, 20:39
Mensajes: 8717
Quiero que un programa muestre todas las posibles combinaciones de 6 ítems pudiendo repetirse infinitamente. Ej:
1
2
3
4
5
6
1 1
1 2
1 3
1 4
etc

Pero quiero que las muestre en cierto orden. Supongamos que fuese así:
Nota: En vez de números se muestran ciertas palabras pero es que los números son convertidos en ellas.
WispG
ShadeG
ShadeG DryadG
DryadG
ShadeG AuraG
AuraG SalaG GnomeG
AuraG
ShadeG SalaG
AuraG GnomeG WispG
WispG ShadeG DryadG AuraG
SalaG
ShadeG GnomeG
AuraG GnomeG ShadeG
WispG ShadeG DryadG SalaG
SalaG GnomeG WispG ShadeG DryadG
GnomeG
DryadG WispG
AuraG GnomeG DryadG
WispG ShadeG DryadG GnomeG
SalaG GnomeG WispG ShadeG AuraG
AuraG SalaG GnomeG WispG ShadeG DryadG
DryadG ShadeG
AuraG GnomeG AuraG
WispG ShadeG AuraG WispG
SalaG GnomeG WispG ShadeG SalaG
AuraG SalaG GnomeG WispG ShadeG AuraG
AuraG SalaG GnomeG WispG ShadeG DryadG AuraG
etc
En realidad sería más bien así:
WispG
ShadeG
DryadG AuraG
DryadG
DryadG SalaG
GnomeG WispG ShadeG
es decir, cada vez que se crea un nuevo largo se inicia con el ítem (o número) más reciente +1.

Eso lo pude hacer:
Nota: Ignoren de él todo lo relativo a "Creative".
Código:
Escena 1
   actions for fotograma 1
      // Ítems.
      Item1 = "WispG";
      Item2 = "ShadeG";
      Item3 = "DryadG";
      Item4 = "AuraG";
      Item5 = "SalaG";
      Item6 = "GnomeG";
      // Parte 1 del experimento de largo 1.
      L1P1 = 0;
      // Último experimento de largo 1 que se hará.
      LastL1 = "GnomeG ";
      // Último ítem usado.
      RecentItem = 1;
      // Relativo al largo de los experimentos...
      // ...del método clásico.
      ClasicMinL = 1;
      ClasicActualL = 1;
      ClasicMaxL = 1;
      ClasicMaxLReached = 1;
      Info = "";
      function Concatenarytrace () {
         // Concatena las partes de los experimentos.
         Print = "";
         Cursor = 0;
         do {
            Cursor = Cursor+1;
            Print = Print+eval("Item"+eval("L"+ClasicActualL+"P"+Cursor))+" ";
         } while (Cursor<ClasicActualL);
         trace (Print);
         Info = "Func dice exp: "+Print+"\n"+Info;
      }
   actions for fotograma 2
      // Cursor indicará la parte última de un experimento.
      Cursor = ClasicActualL;
      Info = "F2: Cursor está en la última P de un exp, "+ClasicActualL+"\n"+Info;
   actions for fotograma 3
      if (eval("L"+ClasicActualL+"P"+Cursor)<6) {
         // Si el char es aumentable, aumenta.
         set ("L"+ClasicActualL+"P"+Cursor, eval("L"+ClasicActualL+"P"+Cursor)+1);
         Concatenarytrace();
         Info = "F3: Exp del método clásico creado fácil: "+Print+"\n"+Info;
         gotoAndPlay (6);
      }
   actions for fotograma 4
      // El char no es aumentable, ergo se resetea.
      set ("L"+ClasicActualL+"P"+Cursor, 1);
      if (1<Cursor) {
         // Si Cursor puede bajar, baja.
         Cursor = Cursor-1;
      } else {
         // Sino, se muestra el reseteado.
         Concatenarytrace();
         gotoAndPlay (6);
      }
   actions for fotograma 5
      if (eval("L"+ClasicActualL+"P"+Cursor)<6) {
         // Si el char es aumentable, aumenta.
         set ("L"+ClasicActualL+"P"+Cursor, eval("L"+ClasicActualL+"P"+Cursor)+1);
         Concatenarytrace();
         gotoAndPlay (6);
      } else {
         // Sino, se resetea y reinicia un proceso.
         gotoAndPlay (4);
      }
   actions for fotograma 6
      // Esto es aftertrace de clasic.
      if (Print == eval("LastL"+ClasicActualL)) {
         // Si el experimento mostrado es igual al grabado como último...
         // ...no se hacen más experimentos con ese largo.
         Info = "F6: Exps de largo "+ClasicMinL+" completados.\n"+Info;
         ClasicMinL = ClasicMinL+1;
      }
      if (CreativeL<=ClasicActualL && ClasicMaxL-1<=ClasicActualL) {
         // Si el largo del último experimento del método creativo...
         // ...es menor o igual al largo de este experimento clásico...
         // ...y ese es igual o mayor al máximo-1 que puede ser...
         // ..., Recentitem cambia.
         RecentItem = eval("L"+ClasicActualL+"P"+ClasicActualL);
         Info = "F6: RecentItem cambiado a "+RecentItem+"\n"+Info;
      }
      if (ClasicActualL<ClasicMaxL) {
         // Si el largo es aumentable, aumenta.
         ClasicActualL = ClasicActualL+1;
         Info = "F6: El siguiente exp de clasic será de Largo "+ClasicActualL+"\n"+Info;
      } else {
         // Sino, quedará al mínimo pero el máximo aumenta.
         ClasicMaxLReached = ClasicMaxL;
         Info = "F6: Clasic alcanzó su máximo L: "+ClasicMaxL+"\n"+Info;
         if (ClasicMaxL<7) {
            // Ese if es sólo para pruebas del code.
            ClasicMaxL = ClasicMaxL+1;
            Info = "F6: Clasic aumentó su máximo L a "+ClasicMaxL+"\n"+Info;
            if (CreativeL<ClasicMaxL) {
               // Si el método creativo no creó un experimento...
               // ...del largo alcanzado por el método clásico...
               // ..., crearlo (no se usará aún) y marcar que será...
               // ...el último experimento de ese largo.
               Info = "F6: Clasic llegó a un L mayor que creative: "+ClasicMaxL+" > "+CreativeL+"\n"+Info;
               set ("LastL"+ClasicMaxL, "");
               Cursor = 1;
               // Cálculo del ítem más recientemente usado.
               NextRecentItem = eval("L"+ClasicActualL+"P"+ClasicActualL);
               do {
                  NextRecentItem = NextRecentItem+1;
                  if (6<NextRecentItem) {
                     // Si resulta un ítem inexistente, arreglarlo.
                     NextRecentItem = NextRecentItem-((Math.floor(NextRecentItem/6))*6);
                  }
                  set ("L"+ClasicMaxL+"P"+Cursor, NextRecentItem);
                  set ("LastL"+ClasicMaxL, eval("LastL"+ClasicMaxL)+eval("Item"+NextRecentItem)+" ");
                  Cursor = Cursor+1;
               } while (Cursor<ClasicMaxL);
               set ("L"+ClasicMaxL+"P"+Cursor, NextRecentItem);
               set ("LastL"+ClasicMaxL, eval("LastL"+ClasicMaxL)+eval("Item"+NextRecentItem)+" ");
            }
         }
         ClasicActualL = ClasicMinL;
         Info = "F6: El siguiente exp de clasic será de Largo "+ClasicMinL+"\n"+Info;
         Info = "F6: Está listo el exp de máx L: "+eval("LastL"+ClasicMaxL)+"\n"+Info;
      }
      gotoAndPlay (2);
O sea, este programa produce la 2nda lista. Sería más correcto que produzca la 3era, pero lo que pasa es que este programa es parte de otro y no viene mucho al caso ver qué debería modificar para que produzca la 3era. Ya fue. Pero si ven algo que pueda simplificarse no duden en decirlo.

Entendidas las listas anteriores podemos pasar a la que me interesa. Es como la anterior pero en X circunstancias (no se preocupen por X) se produce otro método de selección: Creativo. Así:
WispG
Creativo: ShadeG DryadG
ShadeG
ShadeG AuraG
Creativo: SalaG GnomeG WispG
DryadG
ShadeG SalaG
SalaG GnomeG ShadeG
Creativo: DryadG AuraG SalaG GnomeG
AuraG
ShadeG GnomeG
SalaG GnomeG DryadG
DryadG AuraG GnomeG WispG
Creativo: ShadeG DryadG AuraG SalaG GnomeG
SalaG
DryadG WispG
SalaG GnomeG AuraG
DryadG AuraG GnomeG ShadeG
ShadeG DryadG AuraG GnomeG WispG
Creativo: ShadeG DryadG AuraG SalaG GnomeG WispG
GnomeG
DryadG ShadeG
SalaG GnomeG SalaG
DryadG AuraG GnomeG DryadG
ShadeG DryadG AuraG GnomeG ShadeG
ShadeG DryadG AuraG SalaG GnomeG ShadeG
Creativo: DryadG AuraG SalaG GnomeG WispG ShadeG DryadG
DryadG DryadG
SalaG GnomeG GnomeG
DryadG AuraG GnomeG AuraG
ShadeG DryadG AuraG GnomeG DryadG
ShadeG DryadG AuraG SalaG GnomeG DryadG
DryadG AuraG SalaG GnomeG WispG ShadeG AuraG
GnomeG WispG WispG
etc

Eso se logra quitando el goto del final y agregando esto:
Código:
   actions for fotograma 7
      TimeforCreative = TimeforCreative-1;
      if (TimeforCreative<=0) {
         // Elección creativa.
         if (CreativeL<7) {
            // Ese if es sólo para pruebas del code.
            CreativeL = CreativeL+1;
            if (CreativeL<ClasicMaxLReached) {
               // Si el método creativo no creó un...
               // ...experimento de largo mayor al...
               // ...del método clásico, aumentarlo.
               CreativeL = ClasicMaxLReached+1;
            }
            Info = "F7: Elección creativa de largo "+CreativeL+"\n"+Info;
            set ("LastL"+CreativeL, "");
            Cursor = 1;
            Print = "";
            do {
               RecentItem = RecentItem+1;
               if (6<RecentItem) {
                  // Si resulta un ítem inexistente, arreglarlo.
                  RecentItem = RecentItem-((Math.floor(RecentItem/6))*6);
               }
               set ("L"+CreativeL+"P"+Cursor, RecentItem);
               set ("LastL"+CreativeL, eval("LastL"+CreativeL)+eval("Item"+RecentItem)+" ");
               Cursor = Cursor+1;
            } while (Cursor<CreativeL);
            Print = eval("LastL"+CreativeL);
            set ("LastL"+CreativeL, eval("LastL"+CreativeL)+eval("Item"+RecentItem)+" ");
            Info = "F7: Last creado: "+eval("LastL"+CreativeL)+"\n"+Info;
            RecentItem = RecentItem+1;
            if (6<RecentItem) {
               // Si resulta un ítem inexistente, arreglarlo.
               RecentItem = RecentItem-((Math.floor(RecentItem/6))*6);
            }
            set ("L"+CreativeL+"P"+Cursor, RecentItem);
            Print = Print+eval("Item"+RecentItem)+" ";
            trace ("Creativo:\t"+Print);
            Info = "F7: Método creativo creó exp "+Print+"\n"+Info;
            Info = "F7: RecentItem es "+RecentItem+".\n"+Info;
         } else {
            gotoAndPlay (2);
            Info = "F7: Método creativo alcanzó el máximo.\n"+Info;
         }
      } else {
         Info = "F7: Para la elección creativa falta "+TimeforCreative+"\n"+Info;
         gotoAndPlay (2);
      }
   actions for fotograma 8
      stop ();
En el F8 se determina si hay Creative o no, pero no den bola a eso. Una vez determinado vuelve al frame 2.

En este caso creo que no hay errores en cuanto a usar ítems diferentes cuando inicia un nuevo largo. De hecho eso parece suceder siempre con Creative e imposible de otro modo.
Lo señalado en rojo sí es un error que de momento no sé corregir. El programa debería mostrar más combinaciones de 2, pero por algún motivo cree que las mostró todas. Más info:
F2: Cursor está en la última P de un exp, 1
Func dice exp: WispG
F3: Exp del método clásico creado fácil: WispG
F6: RecentItem cambiado a 1
F6: Clasic alcanzó su máximo L: 1
F6: Clasic aumentó su máximo L a 2
F6: Clasic llegó a un L mayor que creative: 2 > 1
F6: El siguiente exp de clasic será de Largo 1
F6: Está listo el exp de máx L: ShadeG ShadeG
F7: Elección creativa de largo 2
F7: Last creado: ShadeG ShadeG
F7: Método creativo creó exp ShadeG DryadG
F7: RecentItem es 3.
F2: Cursor está en la última P de un exp, 1
Func dice exp: ShadeG
F3: Exp del método clásico creado fácil: ShadeG
F6: El siguiente exp de clasic será de Largo 2
F7: Para la elección creativa falta 1
F2: Cursor está en la última P de un exp, 2
Func dice exp: ShadeG AuraG
F3: Exp del método clásico creado fácil: ShadeG AuraG
F6: RecentItem cambiado a 4
F6: Clasic alcanzó su máximo L: 2
F6: Clasic aumentó su máximo L a 3
F6: Clasic llegó a un L mayor que creative: 3 > 2
F6: El siguiente exp de clasic será de Largo 1
F6: Está listo el exp de máx L: SalaG GnomeG GnomeG
F7: Elección creativa de largo 3
F7: Last creado: SalaG GnomeG GnomeG
F7: Método creativo creó exp SalaG GnomeG WispG

F7: RecentItem es 1.
F2: Cursor está en la última P de un exp, 1
Func dice exp: DryadG
F3: Exp del método clásico creado fácil: DryadG
F6: El siguiente exp de clasic será de Largo 2
F7: Para la elección creativa falta 2
F2: Cursor está en la última P de un exp, 2
Func dice exp: ShadeG SalaG
F3: Exp del método clásico creado fácil: ShadeG SalaG
F6: El siguiente exp de clasic será de Largo 3
F7: Para la elección creativa falta 1
F2: Cursor está en la última P de un exp, 3
Func dice exp: SalaG GnomeG ShadeG
F3: Exp del método clásico creado fácil: SalaG GnomeG ShadeG
F6: RecentItem cambiado a 2
F6: Clasic alcanzó su máximo L: 3
F6: Clasic aumentó su máximo L a 4
F6: Clasic llegó a un L mayor que creative: 4 > 3
F6: El siguiente exp de clasic será de Largo 1
F6: Está listo el exp de máx L: DryadG AuraG SalaG SalaG
F7: Elección creativa de largo 4
F7: Last creado: DryadG AuraG SalaG SalaG
F7: Método creativo creó exp DryadG AuraG SalaG GnomeG
F7: RecentItem es 6.
F2: Cursor está en la última P de un exp, 1
Func dice exp: AuraG
F3: Exp del método clásico creado fácil: AuraG
F6: El siguiente exp de clasic será de Largo 2
F7: Para la elección creativa falta 3
F2: Cursor está en la última P de un exp, 2
Func dice exp: ShadeG GnomeG
F3: Exp del método clásico creado fácil: ShadeG GnomeG
F6: El siguiente exp de clasic será de Largo 3
F7: Para la elección creativa falta 2
F2: Cursor está en la última P de un exp, 3
Func dice exp: SalaG GnomeG DryadG
F3: Exp del método clásico creado fácil: SalaG GnomeG DryadG
F6: El siguiente exp de clasic será de Largo 4
F7: Para la elección creativa falta 1
F2: Cursor está en la última P de un exp, 4
Func dice exp: DryadG AuraG GnomeG WispG
F6: RecentItem cambiado a 1
F6: Clasic alcanzó su máximo L: 4
F6: Clasic aumentó su máximo L a 5
F6: Clasic llegó a un L mayor que creative: 5 > 4
F6: El siguiente exp de clasic será de Largo 1
F6: Está listo el exp de máx L: ShadeG DryadG AuraG SalaG SalaG
F7: Elección creativa de largo 5
F7: Last creado: ShadeG DryadG AuraG SalaG SalaG
F7: Método creativo creó exp ShadeG DryadG AuraG SalaG GnomeG
F7: RecentItem es 6.
F2: Cursor está en la última P de un exp, 1
Func dice exp: SalaG
F3: Exp del método clásico creado fácil: SalaG
F6: El siguiente exp de clasic será de Largo 2
F7: Para la elección creativa falta 4
F2: Cursor está en la última P de un exp, 2
Func dice exp: DryadG WispG
F6: El siguiente exp de clasic será de Largo 3
F7: Para la elección creativa falta 3
F2: Cursor está en la última P de un exp, 3
Func dice exp: SalaG GnomeG AuraG
F3: Exp del método clásico creado fácil: SalaG GnomeG AuraG
F6: El siguiente exp de clasic será de Largo 4
F7: Para la elección creativa falta 2
F2: Cursor está en la última P de un exp, 4
Func dice exp: DryadG AuraG GnomeG ShadeG
F3: Exp del método clásico creado fácil: DryadG AuraG GnomeG ShadeG
F6: El siguiente exp de clasic será de Largo 5
F7: Para la elección creativa falta 1
F2: Cursor está en la última P de un exp, 5
Func dice exp: ShadeG DryadG AuraG GnomeG WispG
F6: RecentItem cambiado a 1
F6: Clasic alcanzó su máximo L: 5
F6: Clasic aumentó su máximo L a 6
F6: Clasic llegó a un L mayor que creative: 6 > 5
F6: El siguiente exp de clasic será de Largo 1
F6: Está listo el exp de máx L: ShadeG DryadG AuraG SalaG GnomeG GnomeG
F7: Elección creativa de largo 6
F7: Last creado: ShadeG DryadG AuraG SalaG GnomeG GnomeG
F7: Método creativo creó exp ShadeG DryadG AuraG SalaG GnomeG WispG
F7: RecentItem es 1.
F2: Cursor está en la última P de un exp, 1
Func dice exp: GnomeG
F3: Exp del método clásico creado fácil: GnomeG
F6: Exps de largo 1 completados.
F6: El siguiente exp de clasic será de Largo 2
F7: Para la elección creativa falta 5
F2: Cursor está en la última P de un exp, 2
Func dice exp: DryadG ShadeG
F3: Exp del método clásico creado fácil: DryadG ShadeG
F6: El siguiente exp de clasic será de Largo 3
F7: Para la elección creativa falta 4
F2: Cursor está en la última P de un exp, 3
Func dice exp: SalaG GnomeG SalaG
F3: Exp del método clásico creado fácil: SalaG GnomeG SalaG
F6: El siguiente exp de clasic será de Largo 4
F7: Para la elección creativa falta 3
F2: Cursor está en la última P de un exp, 4
Func dice exp: DryadG AuraG GnomeG DryadG
F3: Exp del método clásico creado fácil: DryadG AuraG GnomeG DryadG
F6: El siguiente exp de clasic será de Largo 5
F7: Para la elección creativa falta 2
F2: Cursor está en la última P de un exp, 5
Func dice exp: ShadeG DryadG AuraG GnomeG ShadeG
F3: Exp del método clásico creado fácil: ShadeG DryadG AuraG GnomeG ShadeG
F6: El siguiente exp de clasic será de Largo 6
F7: Para la elección creativa falta 1
F2: Cursor está en la última P de un exp, 6
Func dice exp: ShadeG DryadG AuraG SalaG GnomeG ShadeG
F3: Exp del método clásico creado fácil: ShadeG DryadG AuraG SalaG GnomeG ShadeG
F6: RecentItem cambiado a 2
F6: Clasic alcanzó su máximo L: 6
F6: Clasic aumentó su máximo L a 7
F6: Clasic llegó a un L mayor que creative: 7 > 6
F6: El siguiente exp de clasic será de Largo 2
F6: Está listo el exp de máx L: DryadG AuraG SalaG GnomeG WispG ShadeG ShadeG
F7: Elección creativa de largo 7
F7: Last creado: DryadG AuraG SalaG GnomeG WispG ShadeG ShadeG
F7: Método creativo creó exp DryadG AuraG SalaG GnomeG WispG ShadeG DryadG
F7: RecentItem es 3.
F2: Cursor está en la última P de un exp, 2
Func dice exp: DryadG DryadG
F3: Exp del método clásico creado fácil: DryadG DryadG
F6: El siguiente exp de clasic será de Largo 3
F7: Para la elección creativa falta 6
F2: Cursor está en la última P de un exp, 3
Func dice exp: SalaG GnomeG GnomeG
F3: Exp del método clásico creado fácil: SalaG GnomeG GnomeG
F6: Exps de largo 2 completados.

Ya lo veo más o menos. Luego de establecer el último exp de largo 3, SalaG GnomeG GnomeG, el exp que se produce es ese sumándole 1 a la última parte, lo que daría GnomeG WispG WispG, pero da SalaG GnomeG WispG porque programé mal la suma... o mejor dicho no me di cuenta que fuese necesario eso. Ahora entonces lo que está en los 1eros frames lo tengo que aplicar más adelante también. Deberé crear otra función o algo. Lioso ¿no? ¿será que programar funciones desde el inicio es mejor? Pero entiendo más si veo un flujo del código, sin tener que ir a otro lado a ver qué hace cada función.

Ah, y acabo de darme cuenta que en los frames 4 y 5 no he puesto "Info". Es que las puse buscando un error que supuse no estaba ahí. Un error difícil de hallar: En un if del F6 había escrito "Crative" en vez de Creative >___<

_________________
Si no puedes hacerlo, intenta primero hacer algo más simple aunque similar.


Última edición por Tachikomaia el 17 Nov 2018, 03:36, editado 1 vez en total

Arriba
 Perfil  
Responder citando  
NotaPublicado: 16 Nov 2018, 16:09 
Desconectado
Avatar de Usuario

Registrado: 10 Jun 2011, 21:52
Mensajes: 4549
Imagen
Imagen

_________________
Spoiler: show
Imagen


Arriba
 Perfil  
Responder citando  
NotaPublicado: 17 Nov 2018, 00:46 
Desconectado
Avatar de Usuario

Registrado: 13 Oct 2010, 18:30
Mensajes: 11467
Ubicación: Bogotá
Hallando la manera para que lo que era imposible de ejecutar en un L1 puedas ejecutarlo en un L2.

_________________
Qu'est-ce que vous regardez.


Arriba
 Perfil  
Responder citando  
NotaPublicado: 17 Nov 2018, 03:49 
Desconectado
Avatar de Usuario

Registrado: 10 Ago 2011, 20:39
Mensajes: 8717
Nil ¿desde cuando intentas sonar profundo? Me parece que buscar memes te toma más tiempo que escribir. Al menos a mí sí.

Si un lenguaje es más fácil y/o con más capacidades que otro, puede ser útil aprenderlo aunque se siga pensando igual ¿o acaso el hecho de aprenderlo implicaría pensar diferente? No lo creo.

Y en cuanto a la 2nda frase, creo que seguimos en la misma. Una cosa no es mejor que otra sólo porque se pueda hablar o pensar más sobre ella. Están dejando la practicidad de lado.

_________________
Si no puedes hacerlo, intenta primero hacer algo más simple aunque similar.


Arriba
 Perfil  
Responder citando  
NotaPublicado: 17 Nov 2018, 13:13 
Desconectado
Avatar de Usuario

Registrado: 10 Jun 2011, 21:52
Mensajes: 4549
Leí hace mucho esto: http://www.cs.yale.edu/homes/perlis-alan/quotes.html

Y esto: https://www.cs.utexas.edu/~EWD/transcri ... WD340.html

Y otras muchas cosas, como esto: https://en.wikiquote.org/wiki/Bjarne_Stroustrup

Además sigo a esta cuenta de twitter: https://twitter.com/CodeWisdom

Tardo menos en buscar las frases que en escribirlas, y deberías hacer algo más de caso a Dijkstra, Perlis y otros que a cualquier payaso que te encuentres por Internet.

Pero más que leer eso, que lo hago para pasar el rato, te merecería la pena leer cosas más interesantes y con las que vas a aprender más, hay libros gratis en internet:

http://learnyouahaskell.com/
https://www.braveclojure.com/
https://automatetheboringstuff.com/
http://web.mit.edu/alexmv/6.037/sicp.pdf

También artículos, éste es muy recomendable para ti: http://curtclifton.net/papers/MoseleyMarks06a.pdf

Prueba a preguntar menos y leer más, te va a venir bien.

_________________
Spoiler: show
Imagen


Arriba
 Perfil  
Responder citando  
NotaPublicado: 20 Nov 2018, 04:51 
Desconectado
Avatar de Usuario

Registrado: 10 Ago 2011, 20:39
Mensajes: 8717
Si sabes por favor enseñame, no quiero leer cosas que no vienen al caso como un curso de un lenguaje que no usaré.

¿Entiendes esto?
Código:
Escena 1
   actions for fotograma 1
      Char0 = -1;
      Chars = 1;
      function Concatenarytrace () {
         Print = "";
         Cursor = 0;
         do {
            Print = Print+eval("Char"+Cursor);
            Cursor = Cursor+1;
         } while (Cursor<Chars);
         trace (Print);
      }
   actions for fotograma 2
      Cursor = Chars-1;
   actions for fotograma 3
      if (eval("Char"+Cursor)<9) {
         // Si el char es aumentable, aumenta.
         set ("Char"+Cursor, eval("Char"+Cursor)+1);
         Concatenarytrace();
         gotoAndPlay (2);
      }
   actions for fotograma 4
      // El char no es aumentable, ergo Se resetea.
      set ("Char"+Cursor, 0);
      if (0<Cursor) {
         // Si Cursor puede bajar, baja.
         Cursor = Cursor-1;
      } else {
         // Sino (el cursor no puede bajar), se agrega un char.
         set ("Char"+Chars, 0);
         Chars = Chars+1;
         Concatenarytrace();
         gotoAndPlay (2);
      }
   actions for fotograma 5
      if (eval("Char"+Cursor)<9) {
         // Si el char es aumentable, aumenta.
         set ("Char"+Cursor, eval("Char"+Cursor)+1);
         Concatenarytrace();
         gotoAndPlay (2);
      } else {
         // Sino, se resetea y reinicia un proceso.
         gotoAndPlay (4);
      }
Similar a como dijiste en otro post, yo con esfuerzo lo entendería, lo cual indica un problema ¿no? ¿por qué algo que hice me resulta difícil entenderlo?

El output:
0
1
2
3
4
5
6
7
8
9
00
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
000
001
002
003
y sigue.

Como ves, es un código que muestra todas las posibles mezclas de los números del 0 al 1.

Te comentaré todo el código.

Código:
Escena 1
   actions for fotograma 1
      Char0 = -1;
      Chars = 1;
Char0 marca el valor del caracter que esté 1ero. En el output ves por ejemplo 12, lo cual está formado por Char0 valiendo 1 y Char1 valiendo 2. 12. Por ahora Char1 no existe. Char0 inicia como -1 pero por la forma conque está programado se aumentará antes de mostrarse, por lo que en el output el 1er valor que se muestre será 0.
Chars es la cantidad de caracteres.

Código:
      function Concatenarytrace () {
         Print = "";
         Cursor = 0;
         do {
            Print = Print+eval("Char"+Cursor);
            Cursor = Cursor+1;
         } while (Cursor<Chars);
         trace (Print);
      }
Esta función inicia Print como algo vacío y Cursor como 0.
Print al final de la función será un número que se mostrará en pantalla, más especificamente es la concatenación de Char0, Char1 y todo el que haya sido creado, marcado por Chars. Si Chars es 3 entonces concatenará desde Char0 al Char2.
Para comprender Cursor ayuda imaginar la mezcla y que el cursor es una rayita debajo de una parte. También lo puedes considerar un contador, que determina qué Char se está concatenando.
¿eval entiences cómo funciona ahí? Si por ejemplo Cursor es 1 entonces hace Print+Char1.
trace muestra Print en pantalla.

Código:
actions for fotograma 2
      Cursor = Chars-1;
Cursor se pone en la última posición de la mezcla.

Código:
   actions for fotograma 3
      if (eval("Char"+Cursor)<9) {
         // Si el char es aumentable, aumenta.
         set ("Char"+Cursor, eval("Char"+Cursor)+1);
         Concatenarytrace();
         gotoAndPlay (2);
      }
Esto tiene un comentario, así que... Igual bueno, se suma 1 al último caracter, si su valor es menor que 9. Luego se concatena en Print y se muestra en pantalla. Tienes que entender que los caracteres no están en una misma variable, salvo cuando se unen en Print, pero piensa que si fuesen palabras en una misma variable sería complicado modificarlas del modo que lo estoy haciendo. Supongo que usarías un array, pero como no pude guardarlos y cargarlos en un archivo, hace mucho, decidí no usarlos. Y nunca me gustaron. Acá no preciso archivos externos, pero por costumbre lo hago así. O sea, supongo que tú lo harías algo así:
Numero = [1, 2]
Y tendrías una función en el lenguaje que sea "concatenar las partes del array", pero yo lo hago así:
Char0 = 1
Char1 = 2
Y para concatenar uso la función esa que te mostré al inicio.

Sí, es más complicado capaz, pero no uso arrays.

Código:
  actions for fotograma 4
      // El char no es aumentable, ergo Se resetea.
      set ("Char"+Cursor, 0);
      if (0<Cursor) {
         // Si Cursor puede bajar, baja.
         Cursor = Cursor-1;
      } else {
         // Sino (el cursor no puede bajar), se agrega un char.
         set ("Char"+Chars, 0);
         Chars = Chars+1;
         Concatenarytrace();
         gotoAndPlay (2);
      }
Si le aumentamos 1 a 9, queda en 0, eso es resetearse. Luego de eso, vemos si hay más números hacia atrás, hacia la izquierda. Si los hay, movemos el cursor hacia él. Tienes que imaginarte que las variables estuvieran una al lado de la otra, como si formaran un número.
Si no hay más números, es hora de crear uno, como cuando al sumar 1 a 9 obtenemos 10, o sea 2 caracteres, uno más que antes. Pero en este caso obtendremos 00.

Código:
   actions for fotograma 5
      if (eval("Char"+Cursor)<9) {
         // Si el char es aumentable, aumenta.
         set ("Char"+Cursor, eval("Char"+Cursor)+1);
         Concatenarytrace();
         gotoAndPlay (2);
      } else {
         // Sino, se resetea y reinicia un proceso.
         gotoAndPlay (4);
      }
Esto es muy similar a lo del frame 3. El tema es que generalmente los números finales son aumentables, por lo que pensé que todo quedaría más simple si pusiera el caso más simple al inicio, limpio, aunque en cuanto a eficiencia no sé si es mejor así (no carga tantas veces un else innecesario, pero el code queda más largo).
Lo de "reinicia un proceso" es muy vago, fue lo que me salió en el momento... Se refiere a que vuelve a la parte donde se resetea el char y se fija si es posible bajar el cursor.

¿Ok? Como ves, eso es una versión simplificada del problema inicial que plantee. Esto lo había hecho antes y lo otro está bastado bastante en esto.

Bueno Nil. si entendiste mi código, quisiera que me digas cómo harías para mejorarlo, hacerlo más legible, editalo, no sé. No me muestres un código en otro lenguaje porque no lo voy a entender. No creo que sea un problema del lenguaje sino de cómo lo uso o cómo describo las cosas. En este caso no es tan complejo, pero a lo mejor sabes algo.

Si entendés eso te planteo otra cosa y así sucesivamente hasta llegar al problema original.

_________________
Si no puedes hacerlo, intenta primero hacer algo más simple aunque similar.


Arriba
 Perfil  
Responder citando  
NotaPublicado: 20 Nov 2018, 11:17 
Desconectado
Avatar de Usuario

Registrado: 10 Jun 2011, 21:52
Mensajes: 4549
Las cosas que puse vienen al caso, por las frases anteriores. Necesitas aprender más lenguajes, aunque no los uses, sino para aprender. Deja de preguntar a la gente, pregunta a los libros y compiladores.

_________________
Spoiler: show
Imagen


Arriba
 Perfil  
Responder citando  
NotaPublicado: 20 Nov 2018, 19:56 
Desconectado

Registrado: 05 Mar 2013, 14:43
Mensajes: 10472
Seguramente nunca leyó un libro de programación y quiere magicamente programar cosas para mejorar el mundo.


Arriba
 Perfil  
Responder citando  
NotaPublicado: 21 Nov 2018, 05:09 
Desconectado
Avatar de Usuario

Registrado: 10 Ago 2011, 20:39
Mensajes: 8717
Nil no es práctico. Edu es un poser.

Uno de los problemas que tengo es que si dejo de pensar en el código por un tiempo, luego me es difícil entenderlo, tendría que hacer dibujos...
Además, tendría que ir viendo al ejecutarse cada línea de código, o al final de cada proceso o frame, qué cambios hubieron. Si Flash tiene algo para eso, no he aprendido a usarlo, aunque sí lo intenté. Creo que he visto otros IDES o como se llame, donde el ¿intérprete? avanza una línea y se detiene hasta que recibe la orden de avanzar otra. En Flash se puede hacer algo parecido, pero es un tanto tedioso.

Ya básicamente entendí cómo solucionar el problema y además cómo optimizar mi código. Cuando haga las modificaciones lo pongo y explico.

_________________
Si no puedes hacerlo, intenta primero hacer algo más simple aunque similar.


Arriba
 Perfil  
Responder citando  
NotaPublicado: 22 Nov 2018, 23:21 
Desconectado
Avatar de Usuario

Registrado: 10 Jun 2011, 21:52
Mensajes: 4549
"no es práctico"

Imagen
Imagen

_________________
Spoiler: show
Imagen


Arriba
 Perfil  
Responder citando  
Mostrar mensajes previos:  Ordenar por  
Nuevo tema Responder al tema  [ 17 mensajes ]  Ir a página 1, 2  Siguiente

Todos los horarios son UTC + 1 hora [ DST ]


¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado


No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro

Buscar:
Saltar a:  
POWERED_BY
Traducción al español por Huan Manwë para phpbb-es.com
phpBB SEO