Autor Tema: ¿Cual es la serie adecuada para la fuerza bruta y cómo generarla?

0 Usuarios y 1 Visitante están viendo este tema.

12 Septiembre, 2023, 12:16 pm
Leído 553 veces

Tachikomaia

  • $$\Large \color{#5b61b3}\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 1,297
  • País: uy
  • Karma: +0/-0
  • Sexo: Masculino
Supongamos que fuese esta:
1
2
0.1
3
0.2
0.01
4
0.3
0.02
0.001
etc.
Es como si en cada repetición empezara a producir una nueva serie (además de las que ya está produciendo), a la que se le suma menos que a las anteriores.
Creo que es algo como:
Código: [Seleccionar]
Series = 0
N = 0
NBase = 0
Repetir:
  Series++
  NBase++
  Serie = 0
  Repetir:
    Serie++
    N = (NBase - Serie + 1) / ((10^Serie)/10)
    mostrar N
  mientras Serie < Series
mientras se quiera
¿Está bien, la pueden simplificar?

Pero claro, esa no es la serie ideal, ninguna lo es, pero en mi opinión es mejor que produzca siempre números muy distintos a los anteriores. Algo así:
1
9
53
7
28
406
etc. La idea es similar, antes la serie empezaba teniendo 0 decimales, luego 0 decimales de nuevo, 1, 0, 1, 2... Llega un punto en que cuando hay X números de 0 decimales, hay X-1 de 1, X-2 de 2, etc.
Ahora, llega un punto en que habrá 9 números de 1 subnúmero, 8 de 2, 7 de 3, etc.
¿Cómo se decide el orden en este caso?
9: Es el más distante de 1 teniendo 1 subnúmero.
53: Habiendo usado ya 1 y 9 ¿cual está en el medio? El 5. Luego tenemos  usados 1-5-9, hay 2 a distancia 4. ¿Cual está en medio de los 2 1eros? El 3. 53 entonces.
7: Tenemos 1-3-5-9. Los que tienen mayor distancia son el 5 y 9. Entre medio está el 7.
28: Tenemos 1-3-5-7-9. Todos están a la misma distancia, elegimos 2 porque es el 1ero no usado (el 0 no sirve porque un número entero no puede empezar con 0). Luego el más alejado disponible es el 8.
406: Son los 3 únicos números que quedan. El 0 está más lejos del 4 que el 6, por eso ponemos ese 1ero.

En vez de 28 pudo elegirse 80, pero hay otro detalle: Ya hubo un número de 2 subnúmeros cuyo 1er subnúmero era mayor que el 2ndo. Aquí es al revés.

Pero lo aplicado con los números de 1 subnúmero podría aplicarse con los de 2 y demás, por ejemplo si usamos 53 queremos un número lo más alejado posible de ese. ¿10? Pero ese es cercano aa 9. Pero considerando eso, en vez de 53 pudo haberse elegido uno más lejano, no 99 porque ya hay 9, pero quizá 87 sí.

Tampoco es que los números con subnúmeros iguales deban dejarse para el final y quiero combinar esto con números decimales y negativos. ¡Claro que es complicado, sino ni preguntaba! ¿Ideas?

12 Septiembre, 2023, 04:49 pm
Respuesta #1

Luis Fuentes

  • el_manco
  • Administrador
  • Mensajes: 58,907
  • País: es
  • Karma: +0/-0
Hola

Supongamos que fuese esta:
1
2
0.1
3
0.2
0.01
4
0.3
0.02
0.001
etc.
Es como si en cada repetición empezara a producir una nueva serie (además de las que ya está produciendo), a la que se le suma menos que a las anteriores.
Creo que es algo como:
Código: [Seleccionar]
Series = 0
N = 0
NBase = 0
Repetir:
  Series++
  NBase++
  Serie = 0
  Repetir:
    Serie++
    N = (NBase - Serie + 1) / ((10^Serie)/10)
    mostrar N
  mientras Serie < Series
mientras se quiera
¿Está bien, la pueden simplificar?

Si, ese programa genera esa serie creo. Pero supongo que eso ya lo has comprobado.

Por lo demás no tiene sentido hablar de "serie ideal". ¿Ideal para qué?.

No acabo de entender lo que buscas; hay infinitas sucesiones posibles. Cuando dices que: "es mejor que produzca siempre números muy distintos a los anteriores". ¿mejor para que y/o con qué criterio?¿distintos en cuanto a que su diferencia es lo más grande posible?¿con qué otras restricciones?.

Por ahora la cuestión no es ayudarte a resolver tu problema, sino que plantees el problema de manera concreta y precisa.

Saludos.

13 Septiembre, 2023, 02:20 pm
Respuesta #2

Tachikomaia

  • $$\Large \color{#5b61b3}\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 1,297
  • País: uy
  • Karma: +0/-0
  • Sexo: Masculino
Pero supongo que eso ya lo has comprobado.
No aún, eso lo copié de una libreta y ahora modifiqué algunas cosas, a veces programo en una libreta mientras camino, más adelante lo paso a código y lo pruebo.

Citar
Por lo demás no tiene sentido hablar de "serie ideal". ¿Ideal para qué?.
Ideal para que cualquiera sea la condición que se quiere que cumpla un número, la serie lo produzca rápido. No existe una serie así, pero hay algunas que no producen ciertos números y los que producen son muy parecidos entre sí, por lo tanto las considero peores o menos ideales que otras que producen más variedad de números y más distintos entre sí más rápido. Aquí lo expliqué mejor, fue más "desde 0", antes de hacer este tema:
https://foro.elhacker.net/programacion_general/iquestque_serie_de_candidatos_cumplen_en_general_condiciones_mas_rapido_y_como_programarla-t518680.0.html

Citar
¿mejor para que y/o con qué criterio?
Mejores en cuanto a que producen o implican más números y con mayores diferencias entre sí. Así como hay infinitas series hay infinitas condiciones que se pueden chequear así que no puedo hacer una medición pero el criterio sería que al producir más números hay más condiciones que pueden cumplir, y al producir números muy distintos rápidamente, asumo que en general pueden cumplir más condiciones rápidamente. No es algo que pueda demostrar pero, en los videojuegos se suele requerir números altos o bajos, si no sirve alto entonces conviene probar bajo, si no sirve 100 entonces conviene probar 1, no tiene mucho sentido en general probar 100, 99, 98... tiene más sentido probar 100, 1, 50...

Citar
¿distintos en cuanto a que su diferencia es lo más grande posible?¿con qué otras restricciones?.
Sí. Más de las que sé, como dije las condiciones posibles son infinitas. Yo he pensado en algunas nada más, para dar un ejemplo, no puedo considerarlas todas.

Citar
que plantees el problema de manera concreta y precisa.
Hice lo que pude sin dar detalles que no son tan importantes a tener en cuenta... creo.

Estoy haciendo esta tabla (tiene muchas imperfecciones, no intentes entenderla xP ):

La idea es describir métodos con los cuales se pueda obtener un número a partir de otro. Por ejemplo obteniendo la longitud de un número podemos obtener otro, por ejemplo la longitud de 567 es 3.
Bueno, en la 1er fila donde dice "Algún N para que el resultado sea...", y debajo dice
0   1   2   3
la idea es que en cada columna se ponga un ejemplo de N que, al aplicársele el método, resulte el número que dice la columna, 0, 1, 2 o 3.

¿Para qué quiero poner ejemplos?
Para entender mejor qué hacen los métodos.

¿Qué tiene que ver eso con este tema?
Que con fuerza bruta podría encontrar esos ejemplos de un modo más ordenado en vez de números random que se me ocurran, así podría ver mejor cuan fácil es obtener esos números con los métodos... Y me ahorraría de pensar yo qué números sirven porque no me sale bien eso, además ahorraría tiempo y esto de la fuerza bruta y la serie "ideal" me sirve para otras cosas también.

¿Por qué quiero hacer esa tabla?
Quiero entender cuales son las posibles competencias, no son necesariamente obtener un número alto (score) o bajo, puede ser uno que se obtenga a partir de otro, por lo tanto una de las cosas que requiero hacer o saber son los métodos conque un número se puede obtener a partir de otro.
Por ejemplo "obtén lo más rápido posible una cantidad de dinero mayor que 10000 y tal que su orden sea >50%". Es sólo un ejemplo...
Es un tema bastante complejo para mí, no sé si es concreto... Yo estaba haciendo videos de juegos y quise empezar a anotar datos o mis "records" de ellos, y me di cuenta que también podía anotar datos sobre los datos (es lo que dije de obtener números a partir de otros), y que con eso los "runs" o competencias que pueden hacerse son muchas más. No sé por qué le dicen "run", pero es jugar un juego intentando lograr un record en algún sentido, muchas veces cumpliendo ciertas condiciones.

No sé si hay más que explicar, no se me ocurre.