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

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


  Mostrar Mensajes
Páginas: 1 ... 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 [185] 186 187 188 189 190 191 192 193 194
1841  Programación / Programación General / Re: "Variable" está mal usado en programación. ¿Solución? en: 24 Julio 2019, 06:07 am
Por qué insistes en querer reinventar (malamente) la rueda..?.
Ufa ¿qué estás diciendo, más específicamente?
Quizá sería mejor ni preguntarte.

Citar
Por qué no estudias algo de la gramática de calquier lenguaje de programación y así por fín podrías llamar a las cosas de alguna manera que tenga sentido?
No lo había pensado recientemente, no me pareció necesario antes, y no me gusta leer esas cosas. Basicamente por eso.

Creo que plantee una duda bastante concreta. Menos mal que no hablé de "variables innacidas inmortales" por ejemplo. Si quieres te explico mejor de qué va lo que hago, pero me salgo de tema, y me podrías preguntar o cuestionar por qué hago lo que hago, y no me interesa discutir al respecto.
Está incompleto:
https://i.ibb.co/Dkfh0YQ/gfhfgh.jpg
Basicamente es agregarle cosas a un código, luego (en una nueva fila) agregarle cosas a uno de los resultados y así sucesivamente con todos los resultados hasta llegar a cierto punto.
El código resuelve una duda mediante fuerza bruta. Las cosas a agregarle están relacionadas con las propiedades de dicho código. Por ejemplo no tiene variables (Vs, lo que dije al inicio que decidí llamar Sitparts; C se refiere a candidato que aunque es "variable" no es algo de la situación sino algo que se inserta). En principio es inútil agregarlas, pero para llegar a ciertos niveles es necesario, puedes considerar que en ciertos códigos lo que ves son códigos a medio hacer.
Bueno ¿cuales son las propiedades de un código así? ¿en qué libro está escrito prolijamente? Si conoces alguno y me quieres dar un link, bárbaro. Sino seguiré intentando percibirlas y asignarles nombres lo menos confusos posibles (que conste entiendo que lo son, precisamente intento mejorar eso). Y aunque exista un libro tengo derecho a pensar por mi mismo ¿por qué no?

Citar
muchos términos se llaman de una manera en un lenguaje y de otra en otro
No sabía. Menos motivo para prestarle atención entonces ¿no?

Citar
Una 'variable' que como tú dices no cambia de valor, se llama 'constante' en programación...
Pensé que también le llamaban variable. Quizá es un problema del lenguaje que uso, ya que no existe por ejemplo "borrar constante", es "borrar variable".

Citar
Lo que tu llamas 'situaciones', 'sitparts' o lo que sea, en programación se llaman 'estados'
Algo había visto... lo que pasa es que yo suelo querer resolver situaciones, no estados... En el fondo es lo mismo sí, pero situación es una palabra más común y específica creo, pues estado puede referirse al gobierno de un país.

¿El estado se compone de variables y constantes? Creo que estado a su vez se relaciona más bien con el estado del programa, no con el estado de la situación que se intenta resolver. Creo que es más fácil quitar "el estado de". Puedes decir "la sit que se intenta..." pero no puedes decir "el estado que se intenta...", o al menos me suena a frase incompleta.

Bueno, gracias por la info, pero por lo dicho no me interesa usar estado en vez de situación.

Citar
Referencia del lenguaje VB11:
https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/index
Especificación de VB11:
https://github.com/dotnet/vblang/blob/master/spec/README.md
(hay un pdf para descargar, aconsejo descargarlo).

No es preciso que aprendas Visual Basic, si no quieres, pero al menos aprende que es cada cosa, cada componente de un lenguaje de programación... Nadie usa al 100% la terminología precisa de programación, muchas veces porque prima hacerse entender que la exactitud de un término, que tiene más sentido y propiedad si por ejemplo vas a escribir un libro que si vas a contestar algún mensaje... pero lo mínimo es entenderlo y no andar dando vueltas queriendo inventarse cosas que llevan ahí décadas... Pero si quieres vivir en tu burbuja, sería mejor que no salieras de ella nunca.
Creo, como dije, que plantee una duda bastante concreta, por lo que no veo necesidad de leerme un libro para hallar la respuesta. Si has leído alguno y la sabes, por favor dímela. Aunque quizá debería especificar o corregir algunas cosas que confundí. En mis programas habría:
Candidatos: Variables que no son parte del estado sino que se insertan o aplican a él.
Partes del estado: Variables o constantes que determinan al estado.
Contadores: Variables que sirven a la fuerza bruta, por ejemplo para ver cuántas veces se intentó cargar un archivo.
Recordatorios o abreviaciones: Más o menos lo mismo.
...
De momento se me ocurren esas.
Si digo que un código tiene 0 variables y un candidato cualquiera que sepa algo haría un WFT. En vez de decir variables debo decir por ejemplo "subestados". Y... mira, quiero ofrecer un trabajo (pagarlo), hacer la tabla, por lo que debo explicar qué es cada cosa. Y lo más básico de todo son las constantes o variables ¿no? Tal vez empezando por ahí no tendría problema. Gracias.

Ah: ¿A qué te refieres con "si quieres vivir en tu burbuja, sería mejor que no salieras de ella nunca."? ¿preguntar algo en este foro es salir de ella, y me estás diciendo que sería mejor que no preguntara cosas en este foro? Perdón si te estoy malinterpretando pero es la única interpretación con sentido que se me ocurre. Sino ¿por qué sería mejor que nunca salga? ¿sería muy doloroso despertar? En fin...

Otra cosa:
¿Conoces a alguien que haya hecho algo similar a lo que intento? Lo de agregar distintas cosas a un programa más o menos como yo, haciendo todas las combinaciones posibles. Lo normal es simplemente agregar cosas dejando muchos intermedios de lado. Yo lo hago así porque así practico más y porque en ciertos casos me resulta difícil agregar muchas cosas a la vez.
1842  Programación / Programación General / Re: El reto de sheldon cooper en: 24 Julio 2019, 04:34 am
Demasiado complicado me parece para lo que se logra haciéndolo, mejor hacer un videojuego por ejemplo.

"la posición en la lista de números primos de N debe ser el inverso a la de la posición del inverso de N, (73 ocupa el lugar 21 y 37 el 12 que es el inverso de 21)"

Me perdí bastante ahí, quizá sería mejor:
"la posición de N en la lista de números primos debe ser inversa a la posición del inverso de N (73 ocupa el lugar 21, y 37 el 12 que es el inverso de 21)"
Puedes intentar hacer un programa para comprobar eso si quieres xD
1843  Programación / Programación General / "Variable" está mal usado en programación. ¿Solución? en: 24 Julio 2019, 04:20 am
Estaba describiendo algo en que pretendía llamar variable sólo a lo que fuese "cosa de la situación de la duda", por ejemplo si la duda es:
¿Qué 3 movimientos debo realizar para hacer jaque mate antes que mi rival?
...entonces las variables o cosas de la situación de esa duda serían las posiciones de las fichas y de quién es el turno.

El problema, me pareció, es que iba a resultar confuso porque en mis códigos hay otras cosas que en programación llaman variables pero que yo no llamaría así.

Para arreglar eso inventé la palabra "Sitpart" que abreviaría "parte de la situación".

Ahora bien, ya que estamos quisquillosos, el término "variable" en programación es ya de por sí confuso, porque si bien un programa puede variar el dato si se dan las instrucciones necesarias, hay programas con datos que no varían, es decir, "variables que no varían".

¿Pero qué sentido tienen esos programas, ponerle un nombre a algo que no variará, por qué no decir simplemente el dato?
En lo que estoy haciendo creo que puede tener sentido, ciertos datos pueden existir o no, y en tal caso variar las consecuencias del programa, aunque esos datos de por sí no varíen. Supongo que se puede hacer de otra forma, pero de momento no veo por qué.
Otro caso en que podrían tener sentido es cuando cierto dato se usará muchas veces pero no se sabe exactamente cómo debe ser, por lo que el programador probaría uno, luego otro, y así sucesivamente hasta hallarlo, momento en que sería una pérdida de tiempo sustituir por el dato todas las referencias a él. Como lo hubiera sido modificar varias veces el mismo número pudiendo simplemente modificar el dato.

Por eso intenté crear un nuevo "glosario" de términos de programación:

Citar
Valor bautizado o ValB:
Es lo que en programación se acostumbra llamar variable, pero ahí ocurre que es posible hacer códigos que tengan "variables que no varían", lo cual es una contradicción que con las nombres que estoy asignando no ocurre, y es por eso en parte que los estoy asignando, para evitar contradicciones y confusiones. Es claro que en un código ponerle un nombre a por ejemplo un número no hace que dicho número sea "variable".

Pero veo 2 problemas con la palabra "valor".

1-
Hay cosas de los programas, que no son variables, como las funciones, pero yo no pretendí referirme a ellas ni a otras cosas distintas a lo que en programación son "variables". ¿Sería una función un "valor bautizado"? ¿qué cosas serían un "valor bautizado"?

2-
Dudo mucho que un texto o cualquier dato pueda ser un "valor". La palabra "dato" se me ocurrió mientras hacía este tema así que podría ser una corrección (y todo dato está por definición bautizado creo), aunque parece complicar más el problema 1.

¿Qué nombre sería adecuado para "dato que no es una función ni array, etc"? Correcciones a mis descripciones también...

Agradezco.
1844  Programación / Programación General / Re: Implementa un programa que muestre todos los múltiplos de n entre n y m · n, en: 15 Junio 2019, 03:22 am
No entiendo lo que pides.

Creo que...
1- Se ingresa un número N.
2- se ingresa un número M.
3- Se muestran todos los números divisibles por N, desde N a N*M.

Pues...
Contador = 1
Lista = N
Si Contador < M
__Contador++
__Agregar Contador*N en la lista. Yo haría Lista=Lista+", "+(Contador*N), pero depende de lo fuertemente tipado de tu lenguaje o no sé bien qué.
sino
__fin
Ir a Si

Usa while si quieres.
También se podría evitar el "sino", de algún modo, pero no sé bien. Por ejemplo:
Contador = 0
Lista = ""
Contador++
Si Contador <= M
__Agregar Contador*N en la lista. Lista=Lista+(Contador*N)+", "
__Ir a Contador++
fin del si
Fin

El problema de ese es que la lista te quedaría con un ", " innecesario al final.


Bueno... voy a chequear por las dudas que esté diciendo disparates, pero si vamos al caso no tengo claro a qué llamas "múltiplos", yo hablé de divisibles.
N ejemplo = 2
M ejemplo = 10
Contador = 1
Lista = 2
1 < 10 por lo tanto...
__1 pasa a 2
__Lista = 2, 4
2 < 10 por lo tanto...
__2 pasa a 3
__Lista = 2, 4, 6

Bueno... no creo que esté tan mal. Cualquier cosa me dices.
1845  Programación / Programación General / Re: Idea de juego en: 13 Junio 2019, 03:51 am
Me dejé llevar, jeje. Pero es que él dijo "estoy pidiendo ideas de juegos nada mas, el resto lo hago yo", como si él pudiera hacer cualquier cosa que se le diga. Lo más probable es que sea un estudiante sí, pero quizá es alguien que estudió tanto programación y jugó tan pocos videojuegos, que sabe hacer cualquiera pero no sabe cual hacer xD

Para mí, lo más fácil es algo así:
http://www.fastswf.com/y9VEQiU
Más fácil que un 3 en línea, y que un ahorcado. Puedo decir que, un 3 en línea nunca intenté mucho hacerlo, pero el hecho es que nunca llegué a hacerlo, por las complicaciones que tuve. Basicamente, hay que poner 9 botones (cosas que cuando las señalas cambia el ícono del mouse), y deben transformarse en simples imagenes cuando las cliqueas o el rival las elige. Supongo que sé cómo hacerlo, pero bue, nunca lo hice, por algo será... Igual ahora estoy con esto, más interesante:
http://www.fastswf.com/oQcOv5U
Usa flechas, A y S. No terminado, obviamente... Es un estilo Final Fantasy de los viejos.
1846  Informática / Software / Excel o algo similar. Hacer códigos en distintas hojas. en: 13 Junio 2019, 03:46 am
Quiero hacer algo como lo que describo a continuación:
1- Crear documento llamado "000_Nada".
2- En la hoja 1 de dicho documento, pegar un código C, y agregarle una variable.
3- A la hoja 1 llamarle "Vars".
4- A la hoja 2 llamarle "VVary", pegarle C, y hacer que la cantidad de variables varíe.
Y así sucesivamente, con unas 25 hojas aprox, y creando un nuevo archivo con nuevas hojas, cuyo nombre (del archivo) exprese qué se agregó al código base C, ya que cada archivo tomará un código generado en un archivo anterior.

Probablemente no entiendan por qué quiero hacer eso, y no lo explicaré, pues no es el tema. La cuestión es que en lo posible sólo quiero usar el teclado, no el mouse. En Excel puedo cambiar las hojas usando Control+Av Pag, por ejemplo, no necesito el mouse para eso Pero el problema de Excel es que al pegar un código queda como Dios quiere, es decir... no sé, creo que si una línea tiene tabulación se pega en la columna 2, y si sólo tiene espacios no. Los códigos que copiaré no sé si tienen tabulaciones o espacios, pero cuando intenté hacer lo que digo, tuve el problema que comenté, de las tabulaciones. Otra opción sería pegar todo en una misma celda, pero se hace difícil editar, ya saben, presionar abajo pone el puntero en la celda de abajo, y además para editar una celda (sin que seb borre lo que tiene) hay que hacerle doble clic...
Probé "Insertar objeto, Documento de Word", pero parece requerir mouse para editarlo. No querer usar el mouse en lo posible, no es de mañoso o algo, sino porque ya de por sí lo que quiero hacer me resulta tedioso y por lo tanto quiero hacerlo lo más cómodo posible, lo cual en las condiciones que tengo implica usar poco el mouse. Es decir, por ejemplo en el IDE que uso puedo agregar ciertas funciones haciendo clics, eso me gusta, pero en lo que quiero hacer, en Excel u otro sitio, no se me ocurre que hacer clics pueda ahorrarme tiempo.
Y por qué Excel o algo similar. Porque me parece más ordenado. Un distinto agregado en cada distinta hoja. ¿Cómo lo podría hacer, sino? Por ejemplo:
Código___Agregado A___Agregado B
0________0A__________0B
0A_______0AA_________0AB
Esto tiene varios problemas:
1- Como dije, son unos 30 posibles agregados, o sea 30 columnas, no entran en pantalla, prefiero usar distintas hojas.
2- Los códigos puede que tengan líneas largas, o sea que, o las columnas llegarían a ser muy anchas lo cual implica perder más tiempo desplazándome por ellas, o que no todo el texto estaría visible, pero quiero que lo esté.
3- Poner códigos debajo del otros me resulta confuso al verlos, o tendría que poner una fila pintada por ejemplo, como separador, pero igual... Y habría columnas bastante vacías porque los códigos de otras serían más largos. Obviamente "0", "0A", etc, son resumenes, pues en realidad ocuparían varias líneas.

Otra posibilidad sería usando Word:
1- Creo archivo cuyo nombre diga el código base.
2- Pego el código base, y le agrego algo.
3- Lo pego de nuevo, y le agrego otra cosa.
Así sucesivamente. Lo de Excel, si se pudiera hacer sin mouse, me parece mejor, más prolijo, ordenado, 1 agregado en cada distinta hoja... pudiendo cambiar de hoja simplemente con Control+Av Pag... En Word un código puede ocupar más de una hoja...

Uso las versiones de 2003, pero dudo que ese sea el problema.

Tengo Windows XP SP3, 504 de RAM.

Bueno ¿qué me recomiendan, en cuanto al tema?

Gracias.
1847  Programación / Programación General / Re: Idea de juego en: 10 Junio 2019, 06:23 am
Yo quisiera un videojuego de batallas de personajes de otros videojuegos. Una especie de Smash Bros pero con los personajes más o menos tal cual son en su juego original. Idénticos.
Y que tenga buena historia. Yo diría que es a lo que más me dediqué, y no he podido hacerla. El problema es que parto del juego 8 Eyes, cuya historia, para colmo, no es como dice en el manual yanquie, sino que en la versión original, japonesa, es distinta, y más acorde a lo que se ve en el juego, incluso el orden de los jefes, pero aún así sigue siendo un tanto incoherente aparentemente, injustificable o incomprensible en algunos aspectos...
También podría ser de olimpiadas, es decir, no sólo luchas. Hay un juego de Kunio muy bueno en ese sentido. Los 2 primeros escenarios son carreras por una ciudad digamos, en los que puedes golpear al rival. El 3er escenarios es trepar por un palo y reventar un globo, pero también el rival es golpeable. En el 4to y último, lucha pura. La idea sería mezclar más cosas, como fútbol o voley ball.

Lo que no sé si está muy de moda, son juegos de cooperación. Es decir, lo común en juegos, según mi experiencia o los que por algún motivo he jugado más (RPGs), es que debas matar o desmayar mostruos o animales que por algún motivo te atacan. Así, los juegos basicamente muestran o enseñan formas de matar o dañar a rivales y evitar morir o evitar ser dañado. No enseñan a hacer chistes por ejemplo, comentarios interesantes, poder aportar algo a una persona... sólo hacer daño y evitar ser dañado. En parte es por eso que tengo tan pocos amigos xD

Otro que me gustaría es un estilo Mario Tennis pero en que la pelota pueda ir más a las puntas o botar cerca de la red aunque vaya rápido. Es decir, esos juegos, a diferencia de por ejemplo el Super Family Tenis de SNES, que está muy bueno, tienen la particularidad de que los tiros están como precalculados para que vayan con la mayor fuerza posible y ángulo acorde a las propiedades del personaje. Significa que es muy difícil hacer un out o fault. Puedes poner algo de random para que sí pueda suceder, pero me gusta eso de que los jugadores jueguen bien en vez de que yo, el jugador, tenga que apretar el botón en cierto momento o lo que sea, porque si lo hago mal mi jugador lanza la bola fuera. En el MT no es así, pero el gran problema de ese juego es que los tiros fuertes siempre van al fondo, y eso es irreal, prácticamente no es posible en el juego hacer un tiro con mucho ángulo, es aburridísimo jugar de fondo.
Me fascina el efecto liftado y en parte el cortado. En el Mario Tenis de GBA, lamentablemente esos efectos no se ven mucho. Solo el sidespin, que es otra cosa. Pero en el de GB tampoco ocurre TANTO. En el SFT de SNES sí, aunque no hay side... y además sólo en ciertos jugadores es tan notable. Bueno, la idea sería combinar lo mejor de cada juego... Yo quería hacer un juego de tenis donde estuvieran todos los personajes posibles, incluyendo por supuesto los de Prince of Tenis.

Se me ocurren otras cosas, como de cartas. Pero todos me resultan difíciles. Ese de cartas, ya ni recuerdo bien qué tenía en mente, pero algo que quería era que el jugador pudiese crear cartas, es decir, no simplemente usar unas existentes como en Yugioh. Además quería que los costes o poder de las cartas fuese dinámico, basado en la cantidad de victorias o derrotas que hubo al usar la carta.
1848  Programación / Programación General / Re: Programación fragmentada en: 1 Mayo 2019, 20:22 pm
Tiro fruta:
Si pudieras hacer un programa o lo que sea, que envíe sólo un trozo del password candidato y sólo chequee si ese trozo es igual al trozo correspondiente al password real, sí...
O sea... habría que ver qué acciones hace la máquina cuando le dices un password entero, entonces harías algo similar pero sólo que chequee una parte.

Pero probablemente es imposible. Se supone que la otra computadora (si es que hablamos de un password así, en otra) tiene un código que recibe datos pero no instrucciones ¿o sí?
Si fuese así quizá podrías decirle "dime el password" y ya está.
O... "dime qué entradas has recibido últimamente".
1849  Programación / Programación General / Re: ¿Hacer fuerza bruta para ganar en juego similar a Mastermind? en: 30 Abril 2019, 18:13 pm
Aún no vi que el siguiente código halle alguna solución, por lo que quizá no funciona.
Código:
Escena 1
   actions for fotograma 1
      MejorMetodo = "¿?";
      MMIntentosRequeridos = 100;
      MaxIntentosporSecreto = 3;
      // Nodos.
      // El nombre describe la situación.
      // El contenido es sustituido por V(X).
      N = 1;
      N00 = 1;
      N01 = 1;
      N02 = 1;
      N10 = 1;
      N0000 = 1;
      N0001 = 1;
      N0002 = 1;
      N0010 = 1;
      N0100 = 1;
      N0101 = 1;
      N0102 = 1;
      N0110 = 1;
      N0200 = 1;
      N0201 = 1;
      N0202 = 1;
      N0210 = 1;
      N1000 = 1;
      N1001 = 1;
      N1002 = 1;
      N1010 = 1;
      // Valores. También usados por NúmeroSecreto.
      V1 = 12;
      V2 = 13;
      V3 = 21;
      V4 = 23;
      V5 = 31;
      V6 = 32;
      // Referencias. Usado para variar fácilmente el contenido de los nodos.
      R0 = "N";
      R1 = "N00";
      R2 = "N01";
      R3 = "N02";
      R4 = "N10";
      R5 = "N0000";
      R6 = "N0001";
      R7 = "N0002";
      R8 = "N0010";
      R9 = "N0100";
      R10 = "N0101";
      R11 = "N0102";
      R12 = "N0110";
      R13 = "N0200";
      R14 = "N0201";
      R15 = "N0202";
      R16 = "N0210";
      R17 = "N1000";
      R18 = "N1001";
      R19 = "N1002";
      R20 = "N1010";
   actions for fotograma 2
      NumeroSecreto = 1;
      Intentos = 0;
      MetodoProbandose = N+""+N00+N01+N02+N10+N0000+N0001+N0002+N0010+N0100+N0101+N0102+N0110+N0200+N0201+N0202+N0210+N1000+N1001+N1002+N1010;
   actions for fotograma 3
      Chequear = "N";
      ChequearTraducido = eval("V"+eval(Chequear));
      IntentosEnesteSecreto = 0;
      NumeroSecretoTraducido = eval("V"+NumeroSecreto);
   actions for fotograma 4
      IntentosEnesteSecreto = IntentosEnesteSecreto+1;
      if (NumeroSecretoTraducido == ChequearTraducido) {
         // Secreto adivinado.
         Intentos = Intentos+IntentosEnesteSecreto;
         if (NumeroSecreto<6) {
            // Probar el método con otro secreto.
            NumeroSecreto = NumeroSecreto+1;
            gotoAndPlay (3);
         } else {
            // El método adivinó todo secreto dentro del plazo.
            if (Intentos<MMIntentosRequeridos) {
               // El método es el mejor por ahora, guardarlo.
               MMIntentosRequeridos = Intentos;
               MejorMetodo = MetodoProbandose;
               trace ("El mejor método por ahora es "+MejorMetodo);
            }
            // Modificar método.
            gotoAndPlay (6);
         }
      } else if (NumeroSecretoTraducido.charAt(0) == ChequearTraducido.charAt(0)) {
         Chequear = Chequear+"10";
      } else if (NumeroSecretoTraducido.charAt(0) == ChequearTraducido.charAt(1)) {
         if (NumeroSecretoTraducido.charAt(1) == ChequearTraducido.charAt(0)) {
            Chequear = Chequear+"02";
         } else {
            Chequear = Chequear+"01";
         }
      } else if (NumeroSecretoTraducido.charAt(1) == ChequearTraducido.charAt(0)) {
         Chequear = Chequear+"01";
      } else {
         Chequear = Chequear+"00";
      }
   actions for fotograma 5
      if (IntentosEnesteSecreto<MaxIntentosporSecreto) {
         // Probar siguientes nodos.
         ChequearTraducido = eval("V"+eval(Chequear));
         gotoAndPlay (4);
      }
      // sino modificar método.
   actions for fotograma 6
      // Modificar método.
      Puntero = 0;
   actions for fotograma 7
      if (eval(eval("R"+Puntero))<6) {
         set (eval("R"+Puntero), eval(eval("R"+Puntero))+1);
         gotoAndPlay (2);
      } else {
         if (Puntero<20) {
            set (eval("R"+Puntero), 1);
            Puntero = Puntero+1;
         } else {
            // Ya se probaron todos los métodos. Mostrar el mejor.
            trace (MejorMetodo);
            stop ();
         }
      }
      // Problema en casos más difíciles: Está abierto a dar números con subnúmeros repetidos. No debería.
   actions for fotograma 8
      gotoAndPlay (7);
Vale decir, no obstante, que cuando hice las pruebas, en el frame 4 donde por ejemplo dice +"00" antes era +00 y por lo que acabo de ver, en el modo Explorador de películas se mostraba como +0, por lo que quizá el intérprete, compilador o lo que sea, lo interpretaba así también. Extraño. Pero le puse las comillas por las dudas.
Ayer dejé la compu prendida pero se apagó, y no sé cuánto tarda el código pero es mucho. Creo que debe probar 6^20 métodos variando a su vez los números secretos, o sea (6^20)*6 aunque descartando un método cuando no haya un número, lo cual ocurre en la mayoría de esos nuevos casos.

Definitivamente sería bueno agilizar ese código. ¿Ideas?

En cuanto a cómo funciona, escribí esto:
Citar
El árbol es más o menos así:
Código:
   /-N00 -> N0000, N0001, etc
  /-N01
N
  \-N02
   \-N10
No está completo porque me aburre mucho completarlo, pero eso que ven son los nombres de las variables que marcan qué número se usará al inicio (N), al recibir la pista 0-0 (N00), al recibir la pista 00 y luego de nuevo 00 (N0000), etc.
Por ejemplo N puede ser 12. Inicialmente digamos que todas son 11 (recuerden que el juego sólo admite poner subnúmeros distintos, pero por ahora para no complicarme lo dejo así)..

¿Por qué esos nombres?
Porque así me resulta fácil referirme a la variable que necesito. Si me estoy refiriendo a la variable N y obtengo la pista 00, agrego 00 a lo que ya tenía (en este caso N) y sé que la siguiente variable a usar será N00.

El programa tomará uno de los números secretos posibles y usará el árbol para intentar adivinarlo.
Si lo adivina en 3 tiradas o menos, cambia el número secreto.
Si adivina todos los números así, entonces ese método se guarda si es mejor que los anteriores guardados.

Sea que el método resultó malo o bueno, ahora hay que variarlo, probar otro. Esto es un problema, porque debido al nombre que puse a las variables, no puedo decir "varía la V1, si está al máximo entonces la V2, etc",. hablamos por ejemplo de 0000, luego 0001, luego 0002, luego 0010, no es fácil o rápido indicar cual variar luego de cual.
La solución que hallé, es crear R1, R2, etc, que son referencias a las variables de nombres raros. Así:
R0 = "N"
R1 = "N00"
R2 = "N01"
etc
Entonces si eval(eval(R1)) no está al máximo eso aumenta, sino aumenta evalevalR2, etc.
Pero otra cosa más es necesaria para simplificar. Como los posibles códigos secretos dan saltos de por ejemplo 13 a 21, los he puesto en una lista y las variables N00, etc, no contienen 12 por ejemplo, sino referencias a una posición de la lista, donde sí está el 12, etc.
La variación del número secreto también hace eso.

Esto es el árbol inicial, es decir, el contenido de las variables, no sus nombres.
Código:
   /-1 -> 1, 1, etc
  /-1
1
  \-1
   \-1
Esto es la lista de la que toman valores cuando se necesita ver qué números indican esos nodos:
V1 = 12
V2 = 13
etc (los nombré al inicio del tema).

Bueno, espero que se entienda, pero sino, si conocen otro método y me lo dicen de modo que yo lo pueda entender buenísimo.
1850  Programación / Programación General / Re: ¿Hacer fuerza bruta para ganar en juego similar a Mastermind? en: 29 Abril 2019, 07:27 am
WS:
Acabo de darme cuenta que la respuesta es no. Porque como dije en el 1er post, y lo olvidé, muchos me han dicho que yo no sé programar o programación y entonces ya ni lo discuto.

De momento tengo esto:
Código:
Escena 1
   actions for fotograma 1
      MejorMetodo = "¿?";
      MMIntentosRequeridos = 10;
      MaxIntentosporSecreto = 3;
      // Nodos.
      // El nombre describe la situación.
      // El contenido es sustituido por V(X).
      N = 1;
      N00 = 1;
      N01 = 1;
      N02 = 1;
      N10 = 1;
      N0000 = 1;
      N0001 = 1;
      N0002 = 1;
      N0010 = 1;
      N0100 = 1;
      N0101 = 1;
      N0102 = 1;
      N0110 = 1;
      N0200 = 1;
      N0201 = 1;
      N0202 = 1;
      N0210 = 1;
      N1000 = 1;
      N1001 = 1;
      N1002 = 1;
      N1010 = 1;
      // Valores. También usados por NúmeroSecreto.
      V1 = 12;
      V2 = 13;
      V3 = 21;
      V4 = 23;
      V5 = 31;
      V6 = 32;
   actions for fotograma 2
      NumeroSecreto = 1;
      Intentos = 0;
      MetodoProbandose = N+""+N00+N01+N02+N10+N0000+N0001+N0002+N0010+N0100+N0101+N0102+N0110+N0200+N0201+N0202+N0210+N1000+N1001+N1002+N1010;
   actions for fotograma 3
      Chequear = "N";
      ChequearTraducido = eval("V"+eval(Chequear));
      IntentosEnesteSecreto = 0;
      NumeroSecretoTraducido = eval("V"+NumeroSecreto);
      trace ("El número secreto es "+NumeroSecretoTraducido);
   actions for fotograma 4
      IntentosEnesteSecreto = IntentosEnesteSecreto+1;
      trace (MetodoProbandose+" probó "+ChequearTraducido);
      if (NumeroSecretoTraducido == ChequearTraducido) {
         // Secreto adivinado.
         trace (MetodoProbandose+" adivinó "+NumeroSecretoTraducido);
         Intentos = Intentos+IntentosEnesteSecreto;
         if (NumeroSecreto<6) {
            // Probar el método con otro secreto.
            NumeroSecreto = NumeroSecreto+1;
            gotoAndPlay (3);
         } else {
            // El método adivinó todo secreto dentro del plazo.
            if (Intentos<MMIntentosRequeridos) {
               // El método es el mejor por ahora, guardarlo.
               MMIntentosRequeridos = Intentos;
               MejorMetodo = MetodoProbandose;
               trace ("El mejor método por ahora es "+MejorMetodo);
            }
            // Modificar método.
            gotoAndPlay (6);
         }
      } else if (NumeroSecretoTraducido.charAt(0) == ChequearTraducido.charAt(0)) {
         Chequear = Chequear+10;
      } else if (NumeroSecretoTraducido.charAt(0) == ChequearTraducido.charAt(1)) {
         if (NumeroSecretoTraducido.charAt(1) == ChequearTraducido.charAt(0)) {
            Chequear = Chequear+0;
         } else {
            Chequear = Chequear+0;
         }
      } else if (NumeroSecretoTraducido.charAt(1) == ChequearTraducido.charAt(0)) {
         Chequear = Chequear+0;
      } else {
         Chequear = Chequear+0;
      }
   actions for fotograma 5
      if (IntentosEnesteSecreto<MaxIntentosporSecreto) {
         // Probar siguientes nodos.
         ChequearTraducido = eval("V"+eval(Chequear));
         gotoAndPlay (4);
      }
      // sino modificar método.
   actions for fotograma 6
      // Modificar método.
      if (N10<6) {
         N10 = N10+1;
      } else {
         N10 = 1;
         if (N02<6) {
            N02 = N02+1;
         } else {
            N02 = 1;
            if (N01<6) {
               N01 = N01+1;
            } else {
               N01 = 1;
               if (N00<6) {
                  N00 = N00+1;
               } else {
>>>           // Hay que seguir poniendo ifs aquí, por ej para N0000.
                  // Ya se probaron todos los métodos. Mostrar el mejor.
                  trace (MejorMetodo);
                  stop ();
               }
            }
         }
      }
   actions for fotograma 7
      gotoAndPlay (2);
Independientemente de lo que falta, no sé si funciona bien. Hallé una solución para las referencias, pero me hice un poco de lío porque hice un código para resolver el problema 2/2 y de repente estaba haciendo el 2/3, sin haber chequeado que el 2/2 lo resolviera bien.
Los ifs creo que pueden mejorarse con algo de eval, pero de momento no lo intenté, otro día será.

En cuanto a las referencias, no sé si se entiende.
Estos son los nombres de los nodos:
Código:
   /--> N00 --> Dependiendo de cual sea la pista: (N0000, N0001, N0002, N0010)
   /--> N01 -->
N
   \--> N02 -->
    \--> N10 -->
Se entiende que no los escribí todos en eso, pero que los nombres están basados en las pistas. Se pueden hacer más cortos, pero para mí sería más complicado.
Estos son los contenidos iniciales:
Código:
   /--> 1 --> (1, 1, 1, 1)
   /--> 1 --> (1, 1, 1, 1)
1
   \--> 1 --> (1, 1, 1, 1)
    \--> 1 --> (1, 1, 1, 1)
Sí, todos 1. Sí, obviamente eso no es la solución, es tonto probar eso, pero así es la fuerza bruta, sólo pensar cómo hacer que la compu resuelva el problema, no pensar más de lo necesario.
Y esos contenidos se interpretan o traducen a valores marcados por variables V.

¿Y por qué rayos eso?
En este momento no sé explicarlo, me perdí (pronto me voy a dormir). Pero háganlo de otra forma si saben, me serviría.

Por otro lado, tengo esta versión anterior, una parte:
Código:
function AumentarSecreto () {
if (NumeroSecreto.charAt(1) < 3) {
NumeroSecreto = Number(NumeroSecreto.charAt(0)+""+(NumeroSecreto.charAt(1)+1));
} else {
NumeroSecreto = Number(NumeroSecreto.charAt(0)+"1");
if (NumeroSecreto.charAt(0) < 3) {
NumeroSecreto = Number((NumeroSecreto.charAt(0)+1)+NumeroSecreto.charAt(1));
} else {
//Imposible aumentar, avisar.
}
// Chequear que no haya repets.
}
function AumentarvalordeNodos () {
if (X < 13) {
X = X+1;
} else if (X == 13) {
X = ;
A pesar de todo, lo que hice me parece más simple que eso. Para variar el número secreto, como no podía hacer+1 porque por ejemplo de 13 pega un salto a 21, tenía que modificar el último caracter, y si llega al límite entonces también el 1ero. Además, de esa forma podía haber números repetidos, cosa que en el juego no sucede.
Lo que hice en la nueva versión fue hacer una lista de los valores y que la variable a aumentar tuviese una referencia a una parte de dicha lista, así que al aumentar el valor de esa referencia pasa al siguiente valor, sin que sea posible que haya números repetidos.

En cuanto a aumentar el valor de los nodos, es igual pero con un montón de ifs porque es uno para cada nodo, pero es algo que tendré que optimizar.
Ahora bien, lo que estaba haciendo en la versión vieja es intentar evitar manejar cambios por caracteres, entonces iba a hacer varios ifs como que si es 11 o 12 se le suma 1, sino si es 13 salta a 21, etc.
La X era un intento de reducir los ifs, porque imagínense, por cada nodo había que poner como 10 ifs.

En fin, creo que lo peor ha pasado. Gracias por el apoyo.
Páginas: 1 ... 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 [185] 186 187 188 189 190 191 192 193 194
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines