[Archivo] Matemáticas puras, física, química, etc.: problemas de entrenamiento cerebral no relacionados con el comercio de ninguna manera - página 509

 
Mischek:

No lo harán. Los gusanos también tendrán ojos saltones. Y eso es un elemento disuasorio.

Oh, tío. Estás fuera de peligro. Un verdadero profesional de la autopromoción.

 

Los jugadores de hockey no querían dejarlo pasar. Con la tonta esperanza de nuestros bostezos, escribí un guión exagerado. También dice "no existe".

¿Quizá he bostezado en el guión? Aquellos que lo deseen pueden comprobarlo.

// Se ha corregido el script. Era un fallo no crítico. El resultado sigue siendo el mismo.

Archivos adjuntos:
hockey_1.mq5  2 kb
 
MetaDriver:

Los jugadores de hockey no querían dejarlo pasar. Con la tonta esperanza de nuestros bostezos, escribí un guión exagerado. También dice "no existe".

¿Quizá he bostezado en el guión? Aquellos que lo deseen pueden comprobarlo.

// Se ha corregido el script. Era un fallo no crítico. El resultado sigue siendo el mismo.

Yo hice lo mismo después. La respuesta es la misma. :)))
 
MaxZ:
Yo hice lo mismo después. La respuesta es la misma. :)))
Muéstrame el código fuente, si no te importa. Me interesa su algoritmo. Puedes enviármelo en persona.
 

Algoritmo de frente. Escribir sin pensar (3-5 minutos). Se tarda mucho en contar. :D

for (int A6 = 1; A6 <= 6; A6++)
for (int A5 = 1; A5 <= 6; A5++)
for (int A4 = 1; A4 <= 6; A4++)
for (int A3 = 1; A3 <= 6; A3++)
for (int A2 = 1; A2 <= 6; A2++)
for (int A1 = 1; A1 <= 6; A1++)
for (int B6 = 1; B6 <= 6; B6++)
for (int B5 = 1; B5 <= 6; B5++)
for (int B4 = 1; B4 <= 6; B4++)
for (int B3 = 1; B3 <= 6; B3++)
for (int B2 = 1; B2 <= 6; B2++)
for (int B1 = 1; B1 <= 6; B1++)
   if (A6 != A5 && A6 != A4 && A6 != A3 && A6 != A2 && A6 != A1
                && A5 != A4 && A5 != A3 && A5 != A2 && A5 != A1
                            && A4 != A3 && A4 != A2 && A4 != A1
                                        && A3 != A2 && A3 != A1
                                                    && A2 != A1
    && B6 != B5 && B6 != B4 && B6 != B3 && B6 != B2 && B6 != B1
                && B5 != B4 && B5 != B3 && B5 != B2 && B5 != B1
                            && B4 != B3 && B4 != B2 && B4 != B1
                                        && B3 != B2 && B3 != B1
                                                    && B2 != B1
    && A6 != B6 && A5 != B5 && A4 != B4
    && A3 != B3 && A2 != B2 && A1 != B1)
   {
      int A = A6*100000+A5*10000+A4*1000+A3*100+A2*10+A1;
      int B = B6*100000+B5*10000+B4*1000+B3*100+B2*10+B1;
      if (MathMod(A, B) == 0)
         Print(A6,A5,A4,A3,A2,A1,"/",B6,B5,B4,B3,B2,B1,"=",A/B);
   }

P.D.: entonces me di cuenta, que sería posible hacer iteraciones en las matrices B mucho menos...

 
Lo tengo, ¡gracias!
 
MaxZ:

Algoritmo de frente. Escribir sin pensar (3-5 minutos). Se tarda mucho en contar. :D

P.D.: más tarde me di cuenta de que las iteraciones sobre las matrices B podrían ser mucho menos...

Tengo curiosidad por saber cómo y hasta qué punto se podría optimizar esta enumeración.

Aquí tengo ~875 ms en una máquina lenta. (tienes 17516 ms).

¿Cómo lo hago para girar otras diez veces más rápido?

Veo dos opciones: (1) cortar los excesos innecesarios, (2) acelerar la validación.

¿Cuáles son sus ideas?

// Invito a los que quieran. Servirá para el siguiente problema.

 
MetaDriver:

// Invito a los voluntarios. Será bueno para la siguiente tarea.

Sobre el problema, ¡yo pensaba lo mismo cuando escribía el código! :))) Quería sugerirlo. Pero desapareció, ya que tuve que crear un nuevo tema. Cómo acelerar el código, lo sé (aunque, no muy agradable resultará). Pero no sólo quiero acelerarlo, sino también hacerlo bonito.


MetaDriver:

Vapchet interesante, cómo y en qué medida este rebasamiento puede ser optimizado.

Mi máquina también es terrible... No puedo probar un Asesor Experto complejo, mientras que uno sencillo puede ser optimizado durante mucho tiempo sin ninguna complicación. :D


MetaDriver:

Aquí lo tengo cuenta ~875 ms en una máquina lenta. (Tiene 17516 ms).

¿Cómo lo hago para girar otras diez veces más rápido?

Veo dos opciones: (1) cortar los excesos innecesarios, (2) acelerar la validación.

¿Cuáles son sus ideas?

Creo que si eliminas el exceso de trabajo, el tiempo de ejecución se acercará a tu resultado (he mirado detenidamente la diferencia de cifras y he pensado que es poco probable). Sobre la idea, sigue pensando.

 

¡Y acelera Mi código se puede descomponer si, consistente en una compleja condición de comprobación de 36 entradas, en 36 ifs con una simple condición! :)))

Creo que el código se acelerará considerablemente, aunque para saberlo con seguridad hay que entender las instrucciones de la máquina, que son el resultado de la compilación.

En general, el tema del rendimiento siempre me ha preocupado tanto como todo lo demás.

 
MaxZ: Y en general, el tema del rendimiento siempre me ha preocupado tanto como todo lo demás.
No me gusta usar los operadores continue y break, pero quizás te puedan ayudar, sobre todo si usas 36x si en mql, puede que no funcione.