Witam.
Napisałem algorytm, który szuka powtarzających się kombinacji liczb. Działa świetnie do 3 liczb, przy 4 nie może wyrobić :P Czy mógłby ktoś rzucić okiem i zobaczyć, czy nie da się tego jakoś inaczej napisać?
Czy istnieje możliwość puszczenia tego programu na kilku rdzeniach? Istnieje jakaś biblioteka pozwalająca na pisanie takich programów w delphi?
pliki = 4815
procedure czworki;
var
index, a, b, c, d, x, y : integer;
L, z : longint;
max : array[1..6] of integer;
czworki : array of array of integer;
nowe : boolean;
begin
L := 0;
SetLength(czworki, 1, 5);
czworki[0, 4] := 0;
for index := 0 to plik do
begin
for a := 1 to 49 do
for b:= a + 1 to 49 do
for c := b + 1 to 49 do
for d := c + 1 to 49 do
begin
y := 0;
for x := 0 to 5 do if ((wylosowane[index, x] = a) or (wylosowane[index, x] = b) or (wylosowane[index, x] = c) or (wylosowane[index, x] = d)) then inc(y);
if y = 4 then
begin
nowe := true;
for z := 0 to L do
begin
if ((czworki[z, 0] = a) and (czworki[z, 1] = b) and (czworki[z, 2] = c) and (czworki[z, 3] = d)) then
begin
inc(czworki[z, 4]);
nowe := false;
end;
end;
if nowe = true then
begin
inc(L);
SetLength(czworki, L + 1, 5);
czworki[L - 1, 0] := a;
czworki[L - 1, 1] := b;
czworki[L - 1, 2] := c;
czworki[L - 1, 3] := c;
inc(czworki[L - 1, 4]);
end;
end;
end;
end;
dec(L);
for a := 0 to L do
begin
max[1] := czworki[a, 4];
for b := a to L - 1 do
if czworki[b, 4] > max[1] then
begin
max[1] := czworki[b, 4]; max[2] := czworki[b, 3]; max[3] := czworki[b, 2]; max[4] := czworki[b, 1]; max[5] := czworki[b, 0];
max[6] := b;
end;
czworki[max[6], 0] := czworki[a, 0]; czworki[max[6], 1] := czworki[a, 1]; czworki[max[6], 2] := czworki[a, 2]; czworki[max[6], 3] := czworki[a, 3]; czworki[max[6], 4] := czworki[a, 4];
czworki[a, 4] := max[1]; czworki[a, 3] := max[2]; czworki[a, 2] := max[3]; czworki[a, 1] := max[4]; czworki[a, 0] := max[5];
end;
end;