Autor
|
Tema: Adivinar número más probable falla creo. (Leído 4,151 veces)
|
Tachikomaia
Desconectado
Mensajes: 1.411
Hackentifiko!
|
Escena 1 actions for fotograma 1 N0 = 0; N1 = 0; N2 = 0; N3 = 0; N4 = 0; N5 = 0; N6 = 0; N7 = 0; N8 = 0; N9 = 0; MostProbably = 0; actions for fotograma 2 Num = random(10); trace ("Num es "+Num); set ("N"+Num, eval("N"+Num)+1); if (MostProbably < eval("N"+Num)) { MostProbably = Num; } trace ("MostProbably es "+MostProbably); actions for fotograma 3 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
|
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: Escena 1 actions for fotograma 1 N0 = 0; N1 = 0; N2 = 0; N3 = 0; N4 = 0; N5 = 0; N6 = 0; N7 = 0; N8 = 0; N9 = 0; MostProbably = "N0"; actions for fotograma 2 Num = random(10); trace("Num es " + Num); set( "N" + Num, eval("N" + Num) + 1 ); if ( eval(MostProbably) < eval("N" + Num) ) { MostProbably = "N" + Num; } trace( "MostProbably es " + eval(MostProbably) ); actions for fotograma 3 gotoAndPlay (2);
|
|
|
En línea
|
|
|
|
nosoy
Desconectado
Mensajes: 33
|
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
|
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 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
Mensajes: 1.411
Hackentifiko!
|
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. Escena 1 actions for fotograma 1 N0 = 0; N1 = 0; N2 = 0; N3 = 0; N4 = 0; N5 = 0; N6 = 0; N7 = 0; N8 = 0; N9 = 0; MostProbably = "N0"; actions for fotograma 2 Num = random(10); set ("N"+Num, eval("N"+Num)+1); trace ("Num es "+Num+" con "+eval("N"+Num)); if (eval(MostProbably)<eval("N"+Num)) { MostProbably = "N"+Num; } trace ("MostProbably es "+MostProbably+" con "+eval(MostProbably)); actions for fotograma 3 gotoAndPlay (2);
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? 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
Mensajes: 33
|
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"). #include <stdio.h> #include <stdlib.h> #include <time.h> int main () { long num_tot; /* nº total de pruebas dígito 0-9 que se han hecho */ long num_veces [10]; /* nº veces que ha aparecido cada dígito */ float frec_relat [10]; /* frecuencia relativa de apariciones de cada dígito */ int digito_azar; /* dígito entre 0-9 para elegir al azar */ int i; /* contador bucle */ num_tot = 0; /* inicialización */ for (i = 0; i < 10; i++) { /* de */ num_veces [i] = 0; frec_relat [i] = 0; } /* variables */ while (1 == 1) /* bucle infinito */ { digito_azar = rand() %10; /* se elige dígito al azar entre 0-9 */ printf ("digito_azar = %u\n", digito_azar ); num_tot++; /* se actualiza el nº total de pruebas */ for (i = 0; i < 10; i++) /* se actualiza */ { if (i == digito_azar) { /* el nº de repeticiones */ ++num_veces [i]; } } /* de cada dígito */ for (i = 0; i < 10; i++) /* actualiza frecuencias */ { frec_relat [i] = (float) num_veces [i] / num_tot; } /* de cada dígito */ printf ("Nº total de pruebas: %ld\n", num_tot ); /* imprime */ for (i = 0; i < 10; i++) { printf ("Nº de apariciones de %u", i ); printf (": %ld", num_veces [i ]); printf (" Frecuencia relativa: %f\n", frec_relat [i ]); } /* resultados */ printf ("pulsar para seguir"); /* espera pulsar */ while (getchar () != '\n') /* pulsar tecla */ ; /* para seguir */ } return 0; }
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Script adivinar numero en bash
Scripting
|
andaluz
|
9
|
13,514
|
22 Noviembre 2011, 12:59 pm
por andaluz
|
|
|
Programa que no funciona para adivinar un numero
.NET (C#, VB.NET, ASP)
|
eva87
|
1
|
3,055
|
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,491
|
29 Diciembre 2016, 18:34 pm
por wolfbcn
|
|
|
Duda adivinar numero sin fallar
Programación C/C++
|
Beginner Web
|
7
|
3,300
|
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,350
|
3 Octubre 2019, 01:54 am
por wolfbcn
|
|