Campeonato de optimización de algoritmos. - página 69

 
Andrey Dik:

¿Lo ves en negrita? Un valor mayor es mejor. El que encuentre el número más alto es el ganador.

¿Qué quieres decir con que "el problema debe ser abierto"?

Muy bien.

1. El texto tendrá un total de 500 caracteres. Sólo letras. No hay espacios entre las palabras ni signos de puntuación.

(2) El texto será recopilado por el árbitro y puesto en el FF como números.

3. No nos distraigamos con cuestiones secundarias.

 
Реter Konow:

Bien.

1. El texto tendrá un total de 500 caracteres. Sólo letras. Sin espacios entre las palabras y sin puntuación.

(2) El texto será recopilado por el árbitro y puesto en el FF en forma de números.

3. No nos distraigamos con cuestiones secundarias.

Si hay un árbitro (¿y de dónde vamos a sacar uno?) también podré participar. Si no, no podré participar y recopilaré las tareas, competiréis sin mí.

Si alguien de MQ está viendo este hilo, ¡que se ponga en contacto! Necesitamos un juez humano para el concurso.

Si alguien responde, le daré a esa persona el código de la tarea para insertar el texto en ella.

Después de resolver este problema será aún más interesante, lo prometo.

 

Andrey Dik:

Si alguien responde, le daré a esa persona el código de tarea para insertar el texto en él.


Conocer el código de la tarea (y más aún la posibilidad de componerlo a discreción) es una ventaja.

Todos o ninguno de los participantes deben conocer el código de la tarea.

Supongamos que todos conocen el código de la tarea. ¿Y qué? Lo principal es resolver el problema.

 
Реter Konow:

Conocer el código del problema (sobre todo la posibilidad de componerlo a tu gusto) es una ventaja.

Todos o ninguno de los participantes deben conocer el código del problema.

Supongamos que todo el mundo conoce el código del problema. ¿Y qué? Lo principal es resolver el problema.

¿Por qué eres tan desconfiado? Te enseñaré el código, por supuesto. Sólo el juez lo recopilará.

Todos verán el código, verán cómo y qué se cuenta en el FF, pero el juez insertará su texto y habrá que encontrar la solución correcta. Conocer el código no te ayudará en nada.

 
De todos modos, estoy empezando a hacer algunos preparativos serios.
 
Andrey Dik:

Habrá otros más interesantes después de que se resuelva éste, lo prometo.

Frankenstein vive
 
Реter Konow:
De todos modos, estoy empezando a hacer algunos preparativos serios.

Ya era hora.

ZS. Por alguna razón los representantes de MQ no vienen aquí. ¿a quién le vamos a entregar el FF para la compilación?

 
#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 contiene la cadena que se busca.

Intenta leer la cadena usando tu algoritmo de optimización.

Administradores: por favor, sustituyan el contenido de la variable Código por un texto arbitrario (texto ruso normal con puntuación y sin caracteres especiales) con el número de caracteres 300 ... 800 para que la cadena contenga los caracteres de la cadena Key, compilar y poner en esta rama. Intentaremos leer la cadena.

Ahora mismo hay 49 caracteres en la variable Código. En consecuencia, el máximo valor posible que puede dar FF es 49,0 (una coincidencia de todos los caracteres de la cadena). Mi algoritmo muestra ahora un resultado de 47,0 para 100'000 ejecuciones de FF y unos 25,0 para 1000 ejecuciones.

 
Eso es bueno. Todo claro y directo. Haciendo el algoritmo.
 
¿Cuál fue el problema, sacar esto para el campeonato?!?!