アルゴリズム最適化選手権。 - ページ 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の担当者が来ないんですよね。

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

Code変数には、探している文字列が格納されています。

最適化アルゴリズムを使って文字列を読み取ってみてください。

管理者:Code変数の内容を任意のテキスト(句読点があり、特殊文字を含まない通常のロシア語テキスト)に置き換え、文字数を300文字にして ください ...800を、文字列Keyの文字を含むようにコンパイルし、このブランチに入れます。文字列の読み取りを試みます。

現在、Code変数には49 文字が登録されています。従って、FFが出力できる最大値は49.0(文字列中の全ての文字が一致)である。私のアルゴリズムでは、100'000回のFF実行で47.0、1000回の実行で約25.0という結果が出ています。

 
それはいいことだ。すべてクリアでわかりやすい。アルゴリズムを行うこと。
 
これを選手権に出して、何が問題だったのか!!!!