hola danielmj,
Una opción es representar la combinación con un entero de 32 bits si los elementos a combinar son menos de 32 o de 64 bits si son mas de 32 elementos y menos de 64 elementos, (para mas elementos tendrías que crear array de enteros), de tal forma que cada posición de un bit representa ese numero de elemento.
por ejemplo: si tienes una combinación de 3 elementos de una lista del 1 al 8
combinación 1: elementos 1, 5, 6
combinación 2: elementos 2, 5, 6
Código:
bit|7|6|5|4|3|2|1|0| -> DEC
C1=|0|0|1|1|0|0|0|1| -> 49
C2=|0|0|1|1|0|0|1|0| -> 50
IMPORTANTE: como el indice de los bits se inicia en 0 y los elementos en 1 hay que ajustar el indice restando una unidad
Al ejecutar el siguiente código ya puedes saber si hay coincidencias o no
Código Delphi
[-]var
c1, c2: Integer;
begin
...
if (c1 = c2) then begin
end
else if (c1 and c2) <> 0 then begin
end
else begin
end;
...
end;
Para obtener el entero de la combinación a partir de una lista con los elementos selecionados puede hacer los siguiente
Código Delphi
[-]function ValorCombinacion(list:TStrings):Int64;
var
elemento:Byte;
i: Integer;
begin
result := 0;
with list do
for i := 0 to Count - 1 do begin
elemento := StrToInt(strings[i])-1;
result := result or (Int64(1) shl elemento);
end;
end;
Espero que esto te pueda ayudar
Un saludo