Championnat d'optimisation des algorithmes. - page 69

 
Andrey Dik:

Vous voyez ça en gras ? Une valeur plus grande est préférable. Celui qui trouve le plus grand nombre est le gagnant.

Que voulez-vous dire par "Le problème doit être ouvert" ?

Très bien.

1. Le texte comportera un total de 500 caractères. Seulement des lettres. Pas d'espaces entre les mots ni de signes de ponctuation.

2 Le texte sera compilé par l'arbitre et inséré dans le FF sous forme de numéros.

3. Ne nous laissons pas distraire par des questions secondaires.

 
Реter Konow:

Bien.

1. Le texte comportera un total de 500 caractères. Seulement des lettres. Pas d'espace entre les mots et pas de ponctuation.

(2) L'arbitre écrira le texte et le mettra dans le FF sous forme de chiffres.

3. Ne nous laissons pas distraire par des questions secondaires.

S'il y a un arbitre (et où allons-nous en trouver un ?), je pourrai aussi y participer. Sinon, je ne pourrai pas participer et je compilerai les tâches, vous concourrez sans moi.

Si quelqu'un de MQ regarde ce fil, contactez-le ! Besoin d'un juge humain pour la compétition.

Si quelqu'un répond, je donnerai à cette personne le code de tâche pour y insérer du texte.

Après avoir résolu ce problème, ce sera encore plus intéressant, je vous le promets.

 

Andrey Dik:

Si quelqu'un répond, je donnerai à cette personne le code de tâche pour y insérer du texte.


La connaissance du code de la tâche (et plus encore la possibilité de le composer à sa guise) est un avantage.

Tous les participants ou aucun d'entre eux doivent connaître le code de la tâche.

Partons du principe que tout le monde connaît le code de la tâche. Et alors ? L'essentiel est de résoudre le problème.

 
Реter Konow:

La connaissance du code du problème (notamment la possibilité de le composer à votre guise) est un avantage.

Tous les participants ou aucun d'entre eux doivent connaître le code du problème.

Supposons que tout le monde connaisse le code du problème. Et alors ? L'essentiel est de résoudre le problème.

Pourquoi es-tu si méfiant ? !!! Je vous montrerai le code bien sûr ! Seul le juge le compilera.

Tout le monde verra le code, vous verrez comment et ce qui est compté dans le FF, mais le juge insérera son texte et il faudra trouver la solution correcte. Connaître le code ne vous aidera en rien.

 
Bref, je commence à faire de sérieux préparatifs.
 
Andrey Dik:

Il y en aura d'autres encore plus intéressantes après que celle-ci soit résolue, je le promets.

Frankenstein vit
 
Реter Konow:
Bref, je commence à faire de sérieux préparatifs.

Il est grand temps.

ZS. Pour une raison quelconque, les représentants de MQ ne viennent pas ici. Qui allons-nous remettre le FF pour la compilation ?

 
#property library
#property strict

int  countRuns    = 0; 

//+------------------------------------------------------------------+
int GetParamCount () export
{ 
  textLen = StringLen(Code);
  return (textLen);
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
void GetParamProperties (double &min, double &max, double &step) export
{ 
  min = 0.0;
  max = 40.0;
  step = 1.0;
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
double FF (double &param []) export
{ 
  countRuns++; 
  
  int sizeArray = ArraySize (param); 
  if(sizeArray != textLen) 
    return (0.0);
  
  int ffVolue = 0; 
  
  for (int i=0; i< textLen; i++)
  {
    if(GetCode(param [i]) == StringSubstr(Code, i, 1))
      ffVolue++;
  }
    
  return (double(ffVolue));
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
int GetCountRunsFF () export
{ 
  return (countRuns);
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
void PrintCodeToFile (double &param []) export
{
  int sizeArray = ArraySize (param); 
  if(sizeArray != textLen) 
  {
    Print ("Неверное количество параметров, печать в файл производится не будет!");
    return;
  }
  
  string code = "";
  
  for(int i=0; i<textLen; i++)
  {
    code+=GetCode (param[i]);
  }
  
  int handle = FileOpen ("decodeFF.csv", FILE_READ|FILE_WRITE|FILE_ANSI|FILE_CSV);
  
  if(handle==INVALID_HANDLE)
  {
    Print ("Ошибка записи в файл востановленного текста ФФ. Ошибка: "+ (string)GetLastError()); 
    return;
  }
  FileWriteString(handle, code);
  FileClose (handle);
}
//+------------------------------------------------------------------+

string GetCode (double param)
{
  int p = (int) MathRound (param);
  if(p <0)
    p = 0;
  if(p > 40)
    p = 40;

  return (Key [p]);
}

string Key [41] = {"а", "б", "в", "г", "д", "е", "ё", "ж", "з", "и", "й", "к", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ф", "х", "ц", "ч", "ш", "щ", "ъ", "ы", "ь", "э", "ю", "я", ";", ":", ".", ",", "-", "?", "!", " "};
int textLen = 0;
string Code = "редко научная статья сочетает в себе эти два типа";

La variable Code contient la chaîne de caractères que vous recherchez.

Essayez de lire la chaîne en utilisant votre algorithme d'optimisation.

Administrateurs : veuillez remplacer le contenu de la variable Code par un texte arbitraire (texte russe normal avec ponctuation et sans caractères spéciaux) avec le nombre de caractères 300 ... 800 pour que la chaîne contienne des caractères de la chaîne Clé, compilez et mettez dans cette branche. Nous allons essayer de lire la chaîne de caractères.

Il y a actuellement 49 caractères dans la variable Code. Par conséquent, la valeur maximale possible de FF est de 49.0 (correspondance de tous les caractères de la chaîne). Mon algorithme montre maintenant un résultat de 47.0 pour 100'000 exécutions de FF et environ 25.0 pour 1000 exécutions.

 
C'est bien. Tout est clair et net. Faire l'algorithme.
 
Quel était le problème, mettre ça pour le championnat ? !?!!
Raison: