算法优化锦标赛。 - 页 69

 
Andrey Dik:

你看到黑体字了吗?价值越大越好。谁找到最高的数字,谁就是赢家。

你说 "问题必须是开放性的 "是什么意思?

好的。

1.文本中共有500个字符。只有字母。字与字之间没有空格,没有 标点符号。

2 文本将由裁判员汇编并以数字的形式插入FF。

3.我们不要被次要问题所干扰。

 
Реter Konow:

很好。

1.文本中共有500个字符。只有字母。字与字之间没有空格,没有标点符号

(2) 裁判员将写好文字,以数字的形式放入FF。

3.我们不要被次要问题所干扰。

如果有裁判员(我们到哪里去找?如果没有,我将不能参加,并将编撰任务,你们将在没有我的情况下进行竞争。

如果有来自MQ的人在看这个主题,请联系我们!需要一名人类评委参加比赛。

如果有人回应,我将给这个人任务代码,让他把文字插入其中。

解决了这个问题后,将更加有趣,我保证。

 

Andrey Dik:

如果有人回应,我将给这个人插入文本的任务代码。


了解任务的代码(更有可能自行编排)是一个优势。

所有或没有参与者都应该知道任务代码。

让我们假设每个人都知道任务的代码。那又怎样?最主要的是要解决问题。

 
Реter Konow:

了解问题的代码(尤其是有可能自行编排)是一个优势。

所有或没有参与者都应该知道问题代码。

我们假设每个人都知道这个问题的代码。那又怎样?最主要的是要解决问题。

你为什么这么不信任呢!!?当然,我会给你看代码的!只有法官才会编纂它。

每个人都会看到代码,你会看到在FF中如何计算和计算什么,但法官会插入他的文字,必须找到正确的解决方案。知道代码不会对你有任何帮助。

 
总之,我开始做一些认真的准备工作了。
 
Andrey Dik:

这个问题解决后,还会有更多有趣的问题,我保证

弗兰肯斯坦活着
 
Реter Konow:
总之,我开始做一些认真的准备工作了。

现在是时候了。

ZS.由于某些原因,MQ代表不来这里。我们要把FF交给谁来编纂?

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

代码变量包含你要找的字符串。

试着用你的优化算法来阅读这个字符串。

管理员:请将代码变量的内容替换为任意文本(带有标点符号的常规俄语文本,不含特殊字符),字符数为300 ...800,这样字符串就会包含来自字符串Key的字符,编译后放在这个分支中。我们将尝试读取该字符串。

现在代码变量里有49个字符。相应地,FF最大的可能值可以输出49.0(字符串中所有字符的匹配)。我的算法现在显示100'000次FF运行的结果为47.0,1000次运行的结果约为25.0。

 
这很好。所有这些都很清楚和直截了当。做算法。
 
有什么问题,把这个放出来是为了夺冠?