[Matematica pura, fisica, chimica, ecc.: problemi di allenamento del cervello non legati in alcun modo al commercio - pagina 509

 
Mischek:

Non lo faranno. I vermi avranno anche occhi sporgenti. E questo è un deterrente.

Oh, cavolo. Sei fuori pericolo. Un vero professionista dell'autopromozione.

 

I giocatori di hockey non volevano mollare la presa. Nella stupida speranza del nostro sbadiglio, ho scritto uno script overkill. Dice anche "non esiste".

Forse ho sbadigliato nella sceneggiatura? Chi lo desidera può controllare.

// Corretto lo script. Era un difetto non critico. Il risultato rimane lo stesso.

File:
hockey_1.mq5  2 kb
 
MetaDriver:

I giocatori di hockey non volevano mollare la presa. Nella stupida speranza del nostro sbadiglio, ho scritto uno script overkill. Dice anche "non esiste".

Forse ho sbadigliato nella sceneggiatura? Chi lo desidera può controllare.

// Corretto lo script. Era un difetto non critico. Il risultato rimane lo stesso.

Ho fatto la stessa cosa dopo. La risposta è la stessa! :)))
 
MaxZ:
Ho fatto la stessa cosa dopo. La risposta è la stessa! :)))
Mostrami il codice sorgente, se non ti dispiace. Sono interessato al suo algoritmo. Puoi mandarmelo di persona.
 

Algoritmo a testa alta. Scrivere senza pensare (3-5 minuti). Ci vuole molto tempo per contare! :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.: poi mi sono reso conto che sarebbe possibile fare iterazioni su B-array molto meno...

 
Capito, grazie!
 
MaxZ:

Algoritmo a testa alta. Scrivere senza pensare (3-5 minuti). Ci vuole molto tempo per contare! :D

P.S.: più tardi mi sono reso conto che le iterazioni su B-array potrebbero essere molto meno...

Sono curioso di sapere come e fino a che punto questa enumerazione potrebbe essere ottimizzata.

Qui ho ~875 ms su una macchina lenta. (avete 17516 ms).

Come faccio a farlo girare ancora dieci volte più velocemente?

Vedo due opzioni: (1) tagliare l'overshoot inutile, (2) accelerare la convalida.

Quali sono le vostre idee?

// Sto invitando coloro che lo desiderano. Andrà bene per il prossimo problema.

 
MetaDriver:

//invito i volontari. Sarà buono per il prossimo compito.

Riguardo al compito, stavo pensando la stessa cosa mentre scrivevo il codice! :))) Volevo suggerirlo. Ma è scomparso, perché ho dovuto creare un nuovo argomento. Come velocizzare il codice, lo so (anche se, non molto bello risulterà). Ma non voglio solo accelerarlo, ma anche renderlo bello!


MetaDriver:

Vapchet interessante, come e in che misura questo overshoot può essere ottimizzato.

Anche la mia macchina è terribile... Non posso testare un Expert Advisor complesso, mentre uno semplice può essere ottimizzato per molto tempo senza complicazioni! :D


MetaDriver:

Qui l'ho fatto contare ~875 ms su una macchina lenta. (Avete 17516 ms).

Come faccio a farlo girare ancora dieci volte più velocemente?

Vedo due opzioni: (1) tagliare l'overshoot inutile, (2) accelerare la convalida.

Quali sono le vostre idee?

Penso che se tagliate il sovraccarico extra, il tempo di esecuzione si avvicinerà al vostro risultato (ho guardato attentamente la differenza di cifre e ho pensato "improbabile")! Riguardo all'idea, continua a pensare.

 

E accelerare Il mio codice può essere suddiviso se, costituito da una complessa condizione di controllo a 36 voci, in 36 if con una semplice condizione! :)))

Penso che il codice si velocizzerà notevolmente, anche se per saperlo con certezza bisogna capire le istruzioni della macchina, che sono il risultato della compilazione.

In generale, il tema della performance mi ha sempre preoccupato tanto quanto tutto il resto.

 
MaxZ: E in generale, il tema della performance mi ha sempre preoccupato tanto quanto tutto il resto.
Non mi piace usare gli operatori continue e break, ma forse possono aiutarti, specialmente se usi 36-fold embedding di if in mql, potrebbe non "funzionare".