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

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Hacer que un generador de una lista haga excepciones y agregue elementos.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Hacer que un generador de una lista haga excepciones y agregue elementos.  (Leído 1,985 veces)
Tachikomaia


Desconectado Desconectado

Mensajes: 1.226


Superhacker (es broma xD )


Ver Perfil
Hacer que un generador de una lista haga excepciones y agregue elementos.
« en: 28 Enero 2024, 12:58 pm »

La lista que se genera es de cosas/eventos contables en un programa, por ejemplo la cantidad de clics.

Pero "sólo un clic" no es lo mismo que un "clic mientras se hace algo", por ejemplo. Para diferenciar eso puse +Nada, +Algo y +Lo que sea (Nada/Algo). Supongo que eso es lo más raro a primera vista. "Casos de Nada" está mal, no debe ir, puede haber otras cosas que tampoco.

Citar
0:   Casos de Nada
1:   1er Frame en que ocurrió Nada
2:   Frames en que ocurrió Nada
3:   En 10 Frames, mínimos casos de Nada
4:   En 10 Frames, máximos casos de Nada
5:   En 10 Frames, mínima cantidad de Frames en que ocurrió Nada
6:   En 10 Frames, máxima cantidad de Frames en que ocurrió Nada
1:   Casos de Mov + Nada
2:   1er Frame en que ocurrió Mov + Nada
etc, etc, son 1344 líneas (7*4*4*4*3, permutaciones o como se llame, 7 posibilidades en una variable, 4 en otra, etc).

El código es:
Código
  1.   actions for fotograma 1
  2.      // Frames.
  3.      V1 = -1;
  4.      Max1 = 6;
  5.      V1Texto0 = "Casos de ";
  6.      V1Texto1 = "1er Frame en que ocurrió ";
  7.      V1Texto2 = "Frames en que ocurrió ";
  8.      V1Texto3 = "En 10 Frames, mínimos casos de ";
  9.      V1Texto4 = "En 10 Frames, máximos casos de ";
  10.      V1Texto5 = "En 10 Frames, mínima cantidad de Frames en que ocurrió ";
  11.      V1Texto6 = "En 10 Frames, máxima cantidad de Frames en que ocurrió ";
  12.      // Mov.
  13.      V2 = 0;
  14.      Max2 = 3;
  15.      V2Texto0 = "";
  16.      V2Texto1 = "Mov + ";
  17.      V2Texto2 = "Frenada + ";
  18.      V2Texto3 = "Moviéndose + ";
  19.      // Clic.
  20.      V3 = 0;
  21.      Max3 = 3;
  22.      V3Texto0 = "";
  23.      V3Texto1 = "Clic + ";
  24.      V3Texto2 = "Desclic + ";
  25.      V3Texto3 = "Cliqueando + ";
  26.      // Clac.
  27.      V4 = 0;
  28.      Max4 = 3;
  29.      V4Texto0 = "";
  30.      V4Texto1 = "Clac + ";
  31.      V4Texto2 = "Desclac + ";
  32.      V4Texto3 = "Claqueando + ";
  33.      // Final.
  34.      V5 = 0;
  35.      Max5 = 2;
  36.      V5Texto0 = "Nada";
  37.      V5Texto1 = "Algo";
  38.      V5Texto2 = "Lo que sea";
  39.      Puntero = 0;
  40.      Completado = "No";
  41.      function Variar () {
  42.         Puntero = Puntero+1;
  43.         Nombre = "V"+Puntero;
  44.         Valor = eval(Nombre);
  45.         Max = eval("Max"+Puntero);
  46.         // ¿La variable puede aumentar?
  47.         if (Valor<Max) {
  48.            // Sí, aumentarla:
  49.            set (Nombre, Valor+1);
  50.            // Obtener suma:
  51.            Suma = V1+V2+V3+V4+V5;
  52.            // Obtener texto:
  53.            Texto = eval("V1Texto"+V1)+eval("V2Texto"+V2)+eval("V3Texto"+V3);
  54.            Texto = Suma+":\t"+Texto+eval("V4Texto"+V4)+eval("V5Texto"+V5);
  55.            trace (Texto);
  56.            Puntero = 0;
  57.            // Esta función se repetirá.
  58.         } else {
  59.            // No, resetearla:
  60.            set (Nombre, 0);
  61.            // ¿Hay otra variable aumentable?
  62.            if (Puntero<5) {
  63.               // Podríhacer, apuntar a esa.
  64.               // Esta función se repetirá.
  65.            } else {
  66.               // Esta variable se pone para que del F3 no vuelva al 2.
  67.               Completado = "Sí";
  68.               stop ();
  69.            }
  70.         }
  71.      }
  72.   actions for fotograma 2
  73.      Variar();
  74.   actions for fotograma 3
  75.      Variar();
  76.      if (Completado == "No") {
  77.         gotoAndPlay (2);
  78.      }
  79.  

Quisiera que:

1:
Moviéndose, Cliqueando y Claqueando sólo aparezcan en frames, o sea:
"Casos de Moviéndose" no debe producirse, porque ¿cómo se cuentan los casos en que el mouse se está moviendo o algo se está presionando? Que yo sepa no se puede, se cuenta el tiempo (frames) en que eso sucede.
"1er Frame en que ocurrió Moviéndose" está bien.
"Frames en que ocurrió Moviéndose", ok.
"En 10 Frames, mínimos casos de Moviéndose", no, por lo ya explicado.
"En 10 Frames, máximos casos de Moviéndose", idem.
"En 10 Frames, mínima cantidad de Frames en que ocurrió ", ok.
"En 10 Frames, máxima cantidad de Frames en que ocurrió ", ok.
Lo mismo se aplica cuando lo único que hay es "Nada" o "Lo que sea", porque no se pueden contar los casos de Nada ¿cuántos puede haber en un frame? Lo que puede contarse es la cantidad de tiempo (frames) en que ocurre Nada. "Lo que sea" puede ser Nada también así que se le aplica lo mismo.

2:
Se generaran también expresiones que en vez de Clac tengan 2Clac y otras de 3Clac. Esto probablemente sea lo más fácil de lograr. Y es que no es posible hacer 2 clics al mismo tiempo (o al menos no en lo que estoy haciendo, sólo se usa el clic izquierdo) ni hacer 2 movimientos de mouse al mismo tiempo (quizá arriba+derecha, etc, pero no me refiero a eso), pero tocar varias teclas a la vez sí.

3:
Se generaran también expresiones como "Casos de Mov+Nada, Mov+Nada", "1er Frame en que ocurrió Clic+Clac+Algo, Mov+Lo que sea", etc. Significa que ocurrió una cosa y luego (,) otra. Si dice + es que son "a la vez", no es lo mismo que "luego". No debe haber más de 2 comas.

4:
No se generen combinaciones imposibles como "Clic+Desclic".


Por otro lado ¿qué otras cosas relativas a lo que el usuario haga se les ocurre que se pueden contar en un programa? Por ejemplo: Variedad de teclas presionadas, hay muchas cosas que no he puesto aún.


« Última modificación: 28 Enero 2024, 13:07 pm por Tachikomaia » En línea

TickTack


Desconectado Desconectado

Mensajes: 428


CipherX


Ver Perfil
Re: Hacer que un generador de una lista haga excepciones y agregue elementos.
« Respuesta #1 en: 16 Febrero 2024, 15:04 pm »

No lo entiendo del todo. Pero con respecto a tus puntos específicos:

1. Para manejar la exclusión de ciertas combinaciones, como "Moviéndose + Nada", podrías tener una lista de combinaciones excluidas y verificar si la combinación actual está en esa lista antes de generarla.

2. Para generar expresiones con "2Clac" y "3Clac", podrías tener una matriz que almacene la cantidad de cada evento en la combinación, y modificar tu algoritmo para manejar estas cantidades.

3. Con respecto a este tercer punto tuyo, podrías definir una lista de eventos que pueden ocurrir simultáneamente, luego generar todas las combinaciones posibles de eventos de longitud 1 (un evento) y de longitud 2 (dos eventos simultáneos) y luego combinar las combinaciones de longitud 1 y de longitud 2.

4. Para evitar combinaciones imposibles como "Clic + Desclic", podrías verificar si un evento y su opuesto están presentes en la misma combinación y omitir la combinación si es así.

En cuanto a otras cosas que se pueden contar en un programa, eso realmente depende del contexto. Algunas ideas podrían ser:

- Duración de eventos: ¿Cuánto tiempo duró cada evento o combinación de eventos?
- Frecuencia de eventos: ¿Con qué frecuencia ocurre cada evento o combinación de eventos en un período de tiempo dado?
- Secuencias de eventos: ¿Qué secuencias específicas de eventos ocurren con mayor frecuencia?
- Interacciones de usuario: ¿Qué acciones realiza el usuario y en qué secuencia?
- Rendimiento del sistema: ¿Cuánto tiempo tarda cada proceso en ejecutarse y cómo afecta eso al rendimiento general del sistema?


« Última modificación: 16 Febrero 2024, 15:15 pm por TickTack » En línea

Tachikomaia


Desconectado Desconectado

Mensajes: 1.226


Superhacker (es broma xD )


Ver Perfil
Re: Hacer que un generador de una lista haga excepciones y agregue elementos.
« Respuesta #2 en: 16 Febrero 2024, 20:37 pm »

Me surgió un lío con respecto a:
En 10 Frames, mínimos casos de...
En 10 Frames, mínima cantidad de Frames en que ocurrió...
Y el otro par.

Me puse a pensar qué mediría cada cosa:
R = risking (parece que es aplicable siempre).
-> significa cambiado a

Casos de: Pushing speed, ability to evade pushing, R ability.

1er Frame en que: Reaction, max time evading push, how fast the risk begin, max R time.

Last Frame en que: Puntería, max time evading push, max R time.

Frames en que (only for "ing"): Ab to evade pushing, time R.

En 10 Frames, mín casos de -> Max distancia entre Fs en que:
Min pushing speed, Max time/ability evading push, max time R.

En 10 Frames, máx casos de -> Min distancia entre Fs en que:
Max pushing speed, Min time/ability evading push, min time R.


Me estaban faltando 2 y no veía cual era cual... Pero al leerte me di cuenta mejor, quedaría algo así:
- Casos de...
- 1er Frame en que...
- Último Frame en que...
- Frames en que... (sólo para Moviéndose, Cliqueando o Claqueando).
- Por Frame, mínimos casos de... (se excluyen los de arriba, y generalmente sería 0, por ejemplo 0 clics por Frame, es casi imposible que se haga 1 clic en cada uno).
- Por Frame, máximos casos de... (mismos excluídos, esto mide la velocidad máxima, por ejemplo 0.1 clics/frame).
- Mínima duración de... (sólo para Moviéndose, Cliqueando o Claqueando).
- Máxima duración de... (idem).

En cuanto a qué mide lo nuevo o no tan nuevo:
- Por Frame, mínimos casos de: Es como "Max distancia entre Fs en que", pero con la ventaja de que se tiene en cuenta también si hubo más de un mismo evento en un mismo Frame.
- Por Frame, máximos casos de: Es como "Min distancia entre Fs en que", pero con la ventaja mencionada arriba.
- Mínima duración de: Relacionado con time/ability to evade pushing y R ability.
- Máxima duración de: Idem.

Debo pensarlo más, algunas cosas parecen lo mismo y debo ver si encaja agregar medir la habilidad de no arriesgar.

El contexto de esto es medir la habilidad de jugadores en videojuegos, por ahora únicamente vinculado al manejo del PC. En juegos más específicos se podría medir la máxima velocidad conque el jugador agarró monedas por ejemplo.

Había logrado algunas cosas en el código pero como estaba liado (y sigo un poco) con eso me había trancado un poco y ya no recuerdo bien qué puntos solucioné y cuales no...

1- Agregué exclusiones, sí, pero actualmente me resulta difícil y poco útil (porque ahora tengo ideas mejores) ver si tienen sentido o no.

2- Sí logré que se generen casos de Clac+Clac, etc, hasta 3.

3- Aún no llegué a intentar cosas como "evento 1, luego evento 2".

4- Con el código que había puesto se evitaba esto, no recuerdo. Creo que el problema será al intentar cumplir el punto 3.

Código actualizado (24-02-10):
Código
  1. Escena 1
  2.   actions for fotograma 1
  3.      // Frames.
  4.      V1 = 0;
  5.      Max1 = 6;
  6.      V1Texto0 = "Casos de ";
  7.      V1Texto1 = "1er Frame en que ocurrió ";
  8.      V1Texto2 = "Frames en que ocurrió ";
  9.      V1Texto3 = "En 10 Frames, mínimos casos de ";
  10.      V1Texto4 = "En 10 Frames, máximos casos de ";
  11.      V1Texto5 = "En 10 Frames, mínima cantidad de Frames en que ocurrió ";
  12.      V1Texto6 = "En 10 Frames, máxima cantidad de Frames en que ocurrió ";
  13.      // Mov.
  14.      V2 = 0;
  15.      Max2 = 3;
  16.      V2Texto0 = "";
  17.      V2Texto1 = "Mov + ";
  18.      V2Texto2 = "Frenada + ";
  19.      V2Texto3 = "Moviéndose + ";
  20.      // Clic.
  21.      V3 = 0;
  22.      Max3 = 3;
  23.      V3Texto0 = "";
  24.      V3Texto1 = "Clic + ";
  25.      V3Texto2 = "Desclic + ";
  26.      V3Texto3 = "Cliqueando + ";
  27.      // Clac1.
  28.      V4 = 0;
  29.      Max4 = 3;
  30.      V4Texto0 = "";
  31.      V4Texto1 = "Clac + ";
  32.      V4Texto2 = "Desclac + ";
  33.      V4Texto3 = "Claqueando + ";
  34.      // Clac2.
  35.      V5 = 0;
  36.      Max5 = 3;
  37.      V5Texto0 = "";
  38.      V5Texto1 = "Clac + ";
  39.      V5Texto2 = "Desclac + ";
  40.      V5Texto3 = "Claqueando + ";
  41.      // Clac3.
  42.      V6 = 0;
  43.      Max6 = 3;
  44.      V6Texto0 = "";
  45.      V6Texto1 = "Clac + ";
  46.      V6Texto2 = "Desclac + ";
  47.      V6Texto3 = "Claqueando + ";
  48.      // Final.
  49.      V7 = -1;
  50.      Max7 = 2;
  51.      V7Texto0 = "Nada";
  52.      V7Texto1 = "Algo";
  53.      V7Texto2 = "Lo que sea";
  54.      Puntero = 8;
  55.      ProgramaCompletado = "No";
  56.      function GenerarTexto () {
  57.         // Obtener suma:
  58.         Suma = V1+V2+V3+V4+V5+V6+V7;
  59.         // Obtener texto:
  60.         Texto = eval("V2Texto"+V2)+eval("V3Texto"+V3);
  61.         Texto = Texto+eval("V4Texto"+V4)+eval("V5Texto"+V5);
  62.         Texto = Texto+eval("V6Texto"+V6)+eval("V7Texto"+V7);
  63.         // Esto es para que en vez de mostrar por ejemplo "Casos de Nada"...
  64.         // ...sea "Casos en que Nada "ocurrió".
  65.         // ¿La suma de Mov, Clic, etc, es > 0?
  66.         if (Suma-V2-V7>0) {
  67.            // Sí, se muestra el texto simple.
  68.            trace (Suma+":\t"+eval("V1Texto"+V1)+Texto);
  69.         } else {
  70.            // No, se muestra "Casos en que Nada "ocurrió".
  71.            trace (Suma+":\tCasos en que "+Texto+" ocurrió");
  72.         }
  73.      }
  74.      function ModificarVariable () {
  75.         // ¿La variable puede aumentar?
  76.         if (Valor<Max) {
  77.            // Sí, aumentarla:
  78.            set (Nombre, Valor+1);
  79.            // Los textos 3 de las variables 2~6, es decir...
  80.            // Moviéndose, Cliqueando y Claqueando, sólo son...
  81.            // válidos si el texto de la variable 1 o frames...
  82.            // es 1, 2, 5 o 6, es decir, si se cuentan los frames...
  83.            // en que eso ocurrió. Lo siguiente es para evitar...
  84.            // los casos inválidos.
  85.            // ¿La variable 1 es 1, 2, 5 o 6?
  86.            if (V1 != 0 && V1 != 3 && V1 != 4) {
  87.               // Sí, el texto es válido.
  88.               GenerarTexto();
  89.            } else {
  90.               // No. ¿Alguna variable 2~6 tiene valor 3?
  91.               if (V2 != 3 && V3 != 3 && V4 != 3 && V5 != 3 && V6 != 3) {
  92.                  // No, el texto es válido.
  93.                  GenerarTexto();
  94.               }
  95.               // sino no es válido y no se muestra.
  96.            }
  97.            Puntero = 8;
  98.            // Esta función se repetirá.
  99.         } else {
  100.            // No, resetearla:
  101.            set (Nombre, 0);
  102.            // ¿Hay otra variable aumentable?
  103.            if (Puntero>1) {
  104.               // Podría ser, apuntar a esa.
  105.               // Esta función se repetirá.
  106.            } else {
  107.               // Esta variable se pone para que del F3 no vuelva al 2.
  108.               ProgramaCompletado = "Sí";
  109.               stop ();
  110.            }
  111.         }
  112.      }
  113.      function ProcesoaRepetir () {
  114.         Puntero = Puntero-1;
  115.         Nombre = "V"+Puntero;
  116.         Valor = eval(Nombre);
  117.         Max = eval("Max"+Puntero);
  118.         // ¿La variable es tipo distinto de Clac2 y Clac3?
  119.         if (Puntero != 5 && Puntero != 6) {
  120.            // Sí, modificarla.
  121.            ModificarVariable();
  122.         } else if (eval("V"+(Puntero-1))>0) {
  123.            // Es tipo Clac2 o 3. ¿La de tipo Clac anterior tiene valor>0?
  124.            // Sí, modificar la señalada por el puntero.
  125.            ModificarVariable();
  126.         } else {
  127.            ProcesoaRepetir();
  128.         }
  129.      }
  130.   actions for fotograma 2
  131.      ProcesoaRepetir();
  132.   actions for fotograma 3
  133.      ProcesoaRepetir();
  134.      if (ProgramaCompletado == "No") {
  135.         gotoAndPlay (2);
  136.      }
Hallé una forma de simplificar el tema de las repeticiones rápidas, pero aún no la apliqué . Poner las funciones en objetos, básicamente, que la película se frene ahí y que la función indique si debe ir a otro lado. Mientras la película esté detenida, la función en el objeto puede repetirse como si ocurriera en cada frame. Hm, ahora me doy cuenta que quizá ese método no es tan rápido como usar goto que podría ser como hacer 2 cosas en 1 mismo frame (no sé), pero para mí quedaría mejor con esto, es buena velocidad pero no tan lioso.

1. Para manejar la exclusión de ciertas combinaciones, como "Moviéndose + Nada", podrías tener una lista de combinaciones excluidas y verificar si la combinación actual está en esa lista antes de generarla.
Podría ser una lista larga xD
Puse las condiciones que deben cumplirse.

Citar
3. Con respecto a este tercer punto tuyo, podrías definir una lista de eventos que pueden ocurrir simultáneamente, luego generar todas las combinaciones posibles de eventos de longitud 1 (un evento) y de longitud 2 (dos eventos simultáneos) y luego combinar las combinaciones de longitud 1 y de longitud 2.
Lo pensaré.

Citar
4. Para evitar combinaciones imposibles como "Clic + Desclic", podrías verificar si un evento y su opuesto están presentes en la misma combinación y omitir la combinación si es así.
Buena idea.

Buenas ideas también las que pusiste al final. La del rendimiento no porque es sobre el jugador no sobre la máquina.
En línea

TickTack


Desconectado Desconectado

Mensajes: 428


CipherX


Ver Perfil
Re: Hacer que un generador de una lista haga excepciones y agregue elementos.
« Respuesta #3 en: 17 Febrero 2024, 12:12 pm »

Me atrevo a escribir que estás haciendo progresos significativos en la lógica del programa.

Como mencionaste, es importante considerar el rendimiento y la eficiencia de la solución.

Para manejar las combinaciones excluidas, aunque la lista podría ser larga, puedes automatizar su generación o definir patrones para evitar tener que enumerar cada combinación específica. Por ejemplo, si ciertos eventos son mutuamente excluyentes, podrías escribir reglas para evitar su combinación.

Con respecto al tercer punto sobre generar combinaciones de eventos ocurriendo simultáneamente, trata de buscar una manera de tener una visión más completa de los escenarios de juego.

¡Buena suerte con tu proyecto!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
¿Como hacer la sumaroria de los elementos de una lista?; Python « 1 2 »
Scripting
XD YO 10 59,275 Último mensaje 10 Marzo 2010, 04:41 am
por XD YO
dar la vuelta elementos de una lista
Programación C/C++
indict 4 2,723 Último mensaje 11 Julio 2013, 01:53 am
por dato000
bat que haga una lista de todas las carpetas de la unidad C:
Scripting
binario010101 5 2,555 Último mensaje 24 Diciembre 2014, 01:03 am
por sabeeee
modificar elementos de una lista
Programación C/C++
creiko 0 1,643 Último mensaje 25 Octubre 2016, 00:35 am
por creiko
lista a traves de generador
Scripting
PUAROT 9 4,750 Último mensaje 2 Enero 2017, 15:10 pm
por PUAROT
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines