Campeonato de Otimização de Algoritmos. - página 69

 
Andrey Dik:

Você vê isso em negrito? Um valor maior é melhor. Quem encontrar o número mais alto é o vencedor.

O que você quer dizer com "o problema deve ser aberto"?

Muito bem.

1. Haverá um total de 500 caracteres no texto. Somente cartas. Sem espaços entre as palavras e sem pontos de pontuação.

(2) O texto será compilado pelo árbitro e colocado no FF como números.

3. Não nos deixemos distrair por questões secundárias.

 
Реter Konow:

Bom.

1. Haverá um total de 500 caracteres no texto. Somente cartas. Sem espaços entre as palavras e sem pontuação.

(2) O árbitro escreverá o texto e o colocará no FF sob a forma de números.

3. Não nos deixemos distrair por questões secundárias.

Se houver um árbitro (e onde vamos conseguir um?) eu também poderei participar. Caso contrário, não poderei participar e compilarei as tarefas, vocês competirão sem mim.

Se alguém da MQ estiver observando esta linha, entre em contato! Necessidade de um juiz humano para a competição.

Se alguém responder, eu darei a essa pessoa o código de tarefa para inserir texto nele.

Depois de resolver este problema será ainda mais interessante, eu prometo.

 

Andrey Dik:

Se alguém responder, eu darei a essa pessoa o código de tarefa para a inserção de texto nele.


Conhecer o código da tarefa (e ainda mais a possibilidade de compor a seu próprio critério) é uma vantagem.

Todos ou nenhum dos participantes deve saber o código de tarefa.

Vamos supor que todos conhecem o código da tarefa. E daí? O principal é resolver o problema.

 
Реter Konow:

Conhecer o código do problema (especialmente a possibilidade de compondo-o a seu próprio critério) é uma vantagem.

Todos ou nenhum dos participantes deve saber o código do problema.

Vamos supor que todos conhecem o código do problema. E daí? O principal é resolver o problema.

Por que você é tão desconfiado?!!! Eu lhe mostrarei o código, é claro! Somente o juiz a compilará.

Todos verão o código, você verá como e o que é contado no FF, mas o juiz inserirá seu texto e a solução correta terá que ser encontrada. Conhecer o código não o ajudará de forma alguma.

 
De qualquer forma, estou começando a fazer alguns preparativos sérios.
 
Andrey Dik:

Haverá outros ainda mais interessantes depois que este for resolvido, prometo.

Frankenstein vive
 
Реter Konow:
De qualquer forma, estou começando a fazer alguns preparativos sérios.

Já não era sem tempo.

ZS. Por alguma razão os representantes da MQ não vêm aqui. quem vamos entregar o FF para a compilação?

 
#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 = "редко научная статья сочетает в себе эти два типа";

A variável Código contém a cadeia que você está procurando.

Tente ler a seqüência usando seu algoritmo de otimização.

Administradores: favor substituir o conteúdo da variável Código por texto arbitrário (texto russo regular com pontuação e sem caracteres especiais) com o número de caracteres 300 ... 800 para que a corda contenha caracteres da chave da corda, compilar e colocar neste ramo. Tentaremos ler o fio.

49 caracteres na variável Código no momento. Assim, o valor máximo possível de FF pode render 49,0 (uma correspondência de todos os caracteres da cadeia). Meu algoritmo agora mostra um resultado de 47,0 para 100.000 corridas de FF e cerca de 25,0 para 1000 corridas.

 
Isso é bom. Tudo claro e direto. Fazendo o algoritmo.
 
Qual foi o problema, colocar isto para fora para o campeonato?!?!
Razão: