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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Adivinar número más probable falla creo.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Adivinar número más probable falla creo.  (Leído 4,203 veces)
Tachikomaia


Desconectado Desconectado

Mensajes: 1.460


Hackentifiko!


Ver Perfil
Adivinar número más probable falla creo.
« en: 22 Febrero 2021, 01:52 am »

Código
  1. Escena 1
  2.   actions for fotograma 1
  3.      N0 = 0;
  4.      N1 = 0;
  5.      N2 = 0;
  6.      N3 = 0;
  7.      N4 = 0;
  8.      N5 = 0;
  9.      N6 = 0;
  10.      N7 = 0;
  11.      N8 = 0;
  12.      N9 = 0;
  13.      MostProbably = 0;
  14.   actions for fotograma 2
  15.      Num = random(10);
  16.      trace ("Num es "+Num);
  17.      set ("N"+Num, eval("N"+Num)+1);
  18.      if (MostProbably < eval("N"+Num)) {
  19.         MostProbably = Num;
  20.      }
  21.      trace ("MostProbably es "+MostProbably);
  22.   actions for fotograma 3
  23.      gotoAndPlay (2);

Por ejemplo en una ejecución:
Num es 4
MostProbably es 4
Num es 7
MostProbably es 4
Num es 6
MostProbably es 4
Num es 9
MostProbably es 4
Num es 7
MostProbably es 4

El 4 apareció sólo 1 vez mientras que el 7 2, pero el más probable no cambió a 7.


En línea

EdePC
Moderador Global
***
Desconectado Desconectado

Mensajes: 2.176



Ver Perfil
Re: Adivinar número más probable falla creo.
« Respuesta #1 en: 23 Febrero 2021, 21:19 pm »

Tienes un malentendido en tu IF, no debes guardar el Num aleatorio en MostProbably, por ejemplo si te da 4 como en tu código, entonces tendría que generarse al menos 4 veces un Num para que recién pueda cambiar el valor de MostProbably

Lo que si podrías hacer es guardar en MostProbably el nombre de la variable que tenga la mayor cantidad de repeticiones, y acceder al contenido de esa variable usando eval:

Código
  1. Escena 1
  2.  
  3.  actions for fotograma 1
  4.    N0 = 0;
  5.    N1 = 0;
  6.    N2 = 0;
  7.    N3 = 0;
  8.    N4 = 0;
  9.    N5 = 0;
  10.    N6 = 0;
  11.    N7 = 0;
  12.    N8 = 0;
  13.    N9 = 0;
  14.    MostProbably = "N0";
  15.  
  16.  actions for fotograma 2
  17.    Num = random(10);
  18.    trace("Num es " + Num);
  19.    set( "N" + Num, eval("N" + Num) + 1 );
  20.    if ( eval(MostProbably) < eval("N" + Num) ) {
  21.      MostProbably = "N" + Num;
  22.    }
  23.    trace( "MostProbably es " + eval(MostProbably) );
  24.  
  25.  actions for fotograma 3
  26.    gotoAndPlay (2);


En línea

nosoy

Desconectado Desconectado

Mensajes: 33


Ver Perfil
Re: Adivinar número más probable falla creo.
« Respuesta #2 en: 24 Febrero 2021, 12:43 pm »

Ese algoritmo lo que no tiene en cuenta, me parece, es la posibilidad de que haya varios dígitos cuya frecuencia de repeteción es máxima, en lugar de uno solo. Ese caso deberá presentarse cíclcamente si la función random está bien construida, porque la probabilidad teórica de cada dígito es 0.1, y con el crecimiento de pruebas más debe de acercarse la frecuencia de cada dígito a ese teórico 0.1.

Creo que el algoritmo lo que presenta es el nº de aparciones del primer dígito que llega a ese máximo, y luego sigue presetando el mismo dígito (aunque otros dígitos hayan igualado el nº de repeticiones) hasta que es superado por algún dígito que aparezca una vez más.

Si por ejemplo en un momento dado el que más ha salido es el '7' con 14 apariciones, digamos, y de pronto el '1' llega a también a 14 apariciones sigue saliendo el '7' en exclusiva ¿no? O eso creo. Y si otro dígito llega también a las 14 repeticiones seguirá saliendo el '7'; solamente cambiará cuando alguno alcance las 15 repeticiones, y entonces volvera a quedarse en ese nuevo hasta que alguno llegue a 16, y así sucesivamente...
En línea

EdePC
Moderador Global
***
Desconectado Desconectado

Mensajes: 2.176



Ver Perfil
Re: Adivinar número más probable falla creo.
« Respuesta #3 en: 24 Febrero 2021, 13:43 pm »

Excelente análisis @nosoy, yo me he tenido que leer la referencia del lenguaje AS2.0 para entenderlo completamente.

Por cierto me he encontrado con el Macromedia Flash MX 2004, solo pesa 62MB, también un manual de referencia del lenguaje Action Script 2.0 para Macromedia Flash MX 2004:
https://mega.nz/folder/V1ZRwKZL#H3zOInCBHyewEvT9OZ8gvQ

- Es un programa viejo y sin soporte (AbandomWare), así que no creo que tenga problemas :P

Su depurador puede ser útil para resolver problemas ya que permite ejecutar línea a línea y ver las variables, trace (output), etc
En línea

Tachikomaia


Desconectado Desconectado

Mensajes: 1.460


Hackentifiko!


Ver Perfil
Re: Adivinar número más probable falla creo.
« Respuesta #4 en: 25 Febrero 2021, 23:50 pm »

Acertaste EdePC, sólo que al final no va eval, sino muestra la cantidad de veces que salió el número, no el número en sí. Agregué más datos a los trace.

Código
  1. Escena 1
  2.   actions for fotograma 1
  3.      N0 = 0;
  4.      N1 = 0;
  5.      N2 = 0;
  6.      N3 = 0;
  7.      N4 = 0;
  8.      N5 = 0;
  9.      N6 = 0;
  10.      N7 = 0;
  11.      N8 = 0;
  12.      N9 = 0;
  13.      MostProbably = "N0";
  14.   actions for fotograma 2
  15.      Num = random(10);
  16.      set ("N"+Num, eval("N"+Num)+1);
  17.      trace ("Num es "+Num+" con "+eval("N"+Num));
  18.      if (eval(MostProbably)<eval("N"+Num)) {
  19.         MostProbably = "N"+Num;
  20.      }
  21.      trace ("MostProbably es "+MostProbably+" con "+eval(MostProbably));
  22.   actions for fotograma 3
  23.      gotoAndPlay (2);
  24.  

Num es 4 con 1
MostProbably es N4 con 1
Num es 6 con 1
MostProbably es N4 con 1
Num es 1 con 1
MostProbably es N4 con 1
Num es 7 con 1
MostProbably es N4 con 1
Num es 5 con 1
MostProbably es N4 con 1
Num es 2 con 1
MostProbably es N4 con 1
Num es 7 con 2
MostProbably es N7 con 2
Num es 5 con 2
MostProbably es N7 con 2
Num es 0 con 1
MostProbably es N7 con 2
Num es 3 con 1
MostProbably es N7 con 2
Num es 2 con 2
MostProbably es N7 con 2
Num es 8 con 1
MostProbably es N7 con 2
Num es 6 con 2
MostProbably es N7 con 2
Num es 6 con 3
MostProbably es N6 con 3
Num es 0 con 2
MostProbably es N6 con 3
Num es 4 con 2
MostProbably es N6 con 3
Num es 1 con 2
MostProbably es N6 con 3
Num es 7 con 3
MostProbably es N6 con 3
Num es 4 con 3
MostProbably es N6 con 3
Num es 9 con 1
MostProbably es N6 con 3
Num es 4 con 4
MostProbably es N4 con 4
Num es 0 con 3
MostProbably es N4 con 4
Num es 9 con 2
MostProbably es N4 con 4


Bien interpretado nosoy.

Excelente análisis @nosoy, yo me he tenido que leer la referencia del lenguaje AS2.0 para entenderlo completamente.
¿Qué no habías entendido? ¿eval?

Citar
Su depurador puede ser útil para resolver problemas ya que permite ejecutar línea a línea y ver las variables, trace (output), etc
Yo me quedé con el 5 básicamente porque es el único, o el último, en que funciona el comando save, además de poder poner variables en las películas (eso se quitó no sé cuando). Producir archivos exe puede que aún funcione.

https://board.flashkit.com/board/showthread.php?294768-FScommand-help-saving-in-txt-file
En línea

nosoy

Desconectado Desconectado

Mensajes: 33


Ver Perfil
Re: Adivinar número más probable falla creo.
« Respuesta #5 en: 26 Febrero 2021, 13:31 pm »

Como curiosidad pongo un algoritmo en C que no hace exactamente lo mismo, pero parecido. No determina el/los dígito/s que ha/n salido más veces, sino que determina el nº de veces que ha salido cada dígito (para ello usa una tabla unidimensional o array) y la frecuencia relativa de cada uno de ellos. También indica el número total de tiradas o pruebas que se han hecho. Como es un bucle infinito hay que pararlo expresamente con Ctrl+c.

Adjunto también de una imagen a las 10.000 pruebas. Como se ve, con ese número de tiradas ya las frecuencia se aproximan bastante a la probabilidad teórica 1 / 10. Lo que quiere decir que la función rand() de C parece que  se comporta bastante bien cuando el nº de pruebas es alto.

El código está ejecutado sobre Linux; si se ejecuta sobre Windows habría que cambiar la función para borrar pantalla system("clear") por system("cls").

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. int main ()
  5. {
  6. long num_tot; /* nº total de pruebas dígito 0-9 que se han hecho */
  7. long num_veces [10]; /* nº veces que ha aparecido cada dígito */
  8. float frec_relat [10]; /* frecuencia relativa de apariciones de cada dígito */
  9. int digito_azar; /* dígito entre 0-9 para elegir al azar */
  10. int i; /* contador bucle */
  11.  
  12. num_tot = 0; /* inicialización */
  13. for (i = 0; i < 10; i++)
  14. { /* de */
  15. num_veces [i] = 0;
  16. frec_relat [i] = 0;
  17. } /* variables */
  18.  
  19. srand (time(NULL)); /* semilla para rand */
  20.  
  21. while (1 == 1) /* bucle infinito */
  22. {
  23. system ("clear");
  24.  
  25. digito_azar = rand() %10; /* se elige dígito al azar entre 0-9 */
  26. printf ("digito_azar = %u\n", digito_azar);
  27.  
  28. num_tot++; /* se actualiza el nº total de pruebas */
  29.  
  30. for (i = 0; i < 10; i++) /* se actualiza */
  31. {
  32. if (i == digito_azar)
  33. { /* el nº de repeticiones */
  34. ++num_veces [i];
  35. }
  36. } /* de cada dígito */
  37.  
  38. for (i = 0; i < 10; i++) /* actualiza frecuencias */
  39. {
  40. frec_relat [i] = (float) num_veces [i] / num_tot;
  41. } /* de cada dígito */
  42.  
  43. printf ("Nº total de pruebas: %ld\n", num_tot); /* imprime */
  44. for (i = 0; i < 10; i++)
  45. {
  46. printf ("Nº de apariciones de %u", i);
  47. printf (": %ld", num_veces [i]);
  48. printf ("     Frecuencia relativa: %f\n", frec_relat [i]);
  49. } /* resultados */
  50.  
  51. printf ("pulsar para seguir"); /* espera pulsar */
  52. while (getchar () != '\n') /* pulsar tecla */
  53. ; /* para seguir */
  54.  
  55. }
  56.  
  57. return 0;
  58. }


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Script adivinar numero en bash
Scripting
andaluz 9 13,596 Último mensaje 22 Noviembre 2011, 12:59 pm
por andaluz
Programa que no funciona para adivinar un numero
.NET (C#, VB.NET, ASP)
eva87 1 3,063 Último mensaje 19 Abril 2012, 00:28 am
por $Edu$
Si has montado tu PC por piezas, es probable que tu RAM vaya más lenta de lo ...
Noticias
wolfbcn 0 1,532 Último mensaje 29 Diciembre 2016, 18:34 pm
por wolfbcn
Duda adivinar numero sin fallar
Programación C/C++
Beginner Web 7 3,338 Último mensaje 29 Junio 2019, 00:06 am
por huchoko
Esta es la causa más probable detrás de la misteriosas muertes por usar vapead..
Noticias
wolfbcn 0 1,365 Último mensaje 3 Octubre 2019, 01:54 am
por wolfbcn
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines