Ver Mensaje Individual
  #34  
Antiguo 17-04-2018
Avatar de danielmj
danielmj danielmj is offline
Miembro
 
Registrado: jun 2011
Posts: 383
Reputación: 13
danielmj Va por buen camino
He cambiado el código a esto:
Código Delphi [-]
procedure TForm1.Button10Click(Sender: TObject);
var
  cad1:Int64;
  i:integer;
begin
  //Recorro la lista1
  with per do
    for i := 0 to Count -1 do
    begin
      // Calculo CAD1 cada vez que cambia el indice de lista3
      ItemIndex := i;
      //convierto el string separado por espacios a una lista
      list.delimitedText:=Items[i];
      cad1:= ValorCombinacion(list);
      buscarComunes(cad1);
    end;

Buscar Comunes
Código Delphi [-]
procedure TForm1.buscarComunes(const Cad1:Int64);
var
  cad2:Int64;
  j:integer;

begin
  // Recorro la lista2
   with lista3 do
   for j := 0 to Items.Count -1 do
   begin
     lista3.Selected:= items[j];
     //convierto el string separado por espacios a una lista
     list.delimitedText:= items.Item[j].SubItems[0]+ ' '+
                          items.Item[j].SubItems[1]+ ' '+
                          items.Item[j].SubItems[2]+ ' '+
                          items.Item[j].SubItems[3]+ ' '+
                          items.Item[j].SubItems[4]+ ' '+
                          items.Item[j].SubItems[5];
     // Calculo CAD2 cada vez que cambia el indice de per
     cad2 := ValorCombinacion(list);
     CompararCombinaciones(cad1, cad2);
   end;
end;

Código Delphi [-]
procedure TForm1.CompararCombinaciones(const Cad1, cad2:Int64);
var
  res:Int64;
  comunes:string;
begin
  label21.Caption:= IntToStr(cad1);
  res:=cad1 and cad2;
  if (cad1 = cad2) then begin
    // las dos combinaciones son iguales
    ShowMessage('Iguales');
    exit;
  end

//*** Esto lo tengo desactivado por que me dice "no hay coincidencias" por cada linea que compara.
{  else //if (res <> 0) then
    showMessage('No hay coincidencias');
    form1.timer1.Enabled:= false;
    form1.Refresh;
    exit}
end;

Parece que recorre la lista3 y lo compara con per pero incluso habiendo una combinación real de 5 aciertos sigue sin encontrarla, además el proceso es eterno, tarda como 1 seg. por cada comparacion y eso que solo son 120 permutaciones, cuando sean 720 y 50.000 combinaciones aleatorias... no sería factible creo.
Un saludo.
__________________
La juventud pasa, la inmadurez se supera, la ignorancia se cura con la educación, y la embriaguez con la sobriedad, pero la estupidez dura para siempre. Aristofanes.
Responder Con Cita