[Archives] Mathématiques pures, physique, chimie, etc. : problèmes d'entraînement cérébral sans rapport avec le commerce. - page 509

 
Mischek:

Ils ne le feront pas. Les vers auront également des yeux exorbités. Et c'est dissuasif.

Oh, mec. Vous êtes tiré d'affaire. Un vrai professionnel de l'autopromotion.

 

Les joueurs de hockey ne voulaient pas lâcher prise. Dans le stupide espoir de nous faire bailler, j'ai écrit un script de surenchère. Il dit aussi "n'existe pas".

Peut-être que j'ai bâillé dans le script ? Ceux qui le souhaitent peuvent le vérifier.

// Correction du script. C'était un défaut non critique. Le résultat reste le même.

Dossiers :
hockey_1.mq5  2 kb
 
MetaDriver:

Les joueurs de hockey ne voulaient pas lâcher prise. Dans le stupide espoir de nous faire bailler, j'ai écrit un script de surenchère. Il dit aussi "n'existe pas".

Peut-être que j'ai bâillé dans le script ? Ceux qui le souhaitent peuvent le vérifier.

// Correction du script. C'était un défaut non critique. Le résultat reste le même.

J'ai fait la même chose après. La réponse est la même ! :)))
 
MaxZ:
J'ai fait la même chose après. La réponse est la même ! :)))
Montrez-moi le code source, si vous le voulez bien. Je suis intéressé par votre algorithme. Vous pouvez me l'envoyer en personne.
 

Algorithme en tête. Écrire sans réfléchir (3-5 minutes). Il faut beaucoup de temps pour compter ! :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.S. : j'ai ensuite réalisé qu'il serait possible de réduire considérablement le nombre d'itérations sur les matrices B...

 
Je l'ai, merci !
 
MaxZ:

Algorithme en tête. Écrire sans réfléchir (3-5 minutes). Il faut beaucoup de temps pour compter ! :D

P.S. : plus tard, j'ai réalisé que les itérations sur les tableaux B pourraient être beaucoup moins nombreuses...

Je suis curieux de savoir comment et dans quelle mesure cette énumération pourrait être optimisée.

Ici, j'ai ~875 ms sur une machine lente. (vous avez 17516 ms).

Comment je peux le tordre encore dix fois plus vite ?

Je vois deux options : (1) couper les dépassements inutiles, (2) accélérer la validation.

Quelles sont vos idées ?

// J'invite ceux qui le souhaitent. Cela fera l'affaire pour le prochain problème.

 
MetaDriver:

//J'invite les volontaires. Ce sera bon pour la prochaine tâche.

À propos de la tâche, je pensais la même chose en écrivant le code ! :))) Je voulais le suggérer. Mais elle a disparu, car j'ai dû créer un nouveau sujet. Comment accélérer le code, je le sais (bien que le résultat ne soit pas très beau). Mais je ne veux pas seulement l'accélérer, mais aussi le rendre beau !


MetaDriver:

Vapchet intéressant, comment et dans quelle mesure ce dépassement peut être optimisé.

Ma machine est terrible aussi... Je ne peux pas tester un conseiller expert complexe, alors qu'un conseiller simple peut être optimisé pendant longtemps sans aucune complication ! :D


MetaDriver:

Ici je l'ai fait compter ~875 ms sur une machine lente. (Vous avez 17516 ms).

Comment je peux le tordre encore dix fois plus vite ?

Je vois deux options : (1) couper les dépassements inutiles, (2) accélérer la validation.

Quelles sont vos idées ?

Je pense que si vous supprimez les surcharges supplémentaires, le temps d'exécution se rapprochera de votre résultat (j'ai bien regardé la différence de chiffres et j'ai pensé "peu probable") ! A propos de l'idée, continuez à réfléchir.

 

Et accélérer Mon code peut être décomposé si, consistant en une condition de contrôle complexe de 36 entrées, en 36 ifs avec une condition simple ! :)))

Je pense que le code s'accélérera considérablement, même si pour en être sûr, il faut comprendre les instructions machine, qui sont le résultat de la compilation.

D'une manière générale, le thème de la performance m'a toujours préoccupé autant qu'autre chose.

 
MaxZ: Et en général, le thème de la performance m'a toujours préoccupé autant que le reste.
Je n'aime pas utiliser les opérateurs continue et break, mais ils peuvent peut-être vous aider, surtout si vous utilisez l'intégration 36-fois de if dans mql, cela peut ne pas "fonctionner".