How to generate a random integer from a range [0, N] that is not in a unique integer list with Pascal

1 Answer

0 votes
program RandomExcluding;

const
  MaxExcluded = 32;

type
  TIntArray = array[1..MaxExcluded] of Integer;

function IsExcluded(num: Integer; excluded: TIntArray; size: Integer): Boolean;
var
  i: Integer;
begin
  IsExcluded := False;
  for i := 1 to size do
    if excluded[i] = num then
    begin
      IsExcluded := True;
      Exit;
    end;
end;

function RandomExcluding(N: Integer; excluded: TIntArray; size: Integer): Integer;
var
  num: Integer;
begin
  if size > N + 1 then
  begin
    RandomExcluding := -1;
    Exit;
  end;

  repeat
    num := Random(N + 1);
  until not IsExcluded(num, excluded, size);

  RandomExcluding := num;
end;

var
  excluded: TIntArray;
  excludedSize, N, result: Integer;
begin
  Randomize;
  excludedSize := 3;
  excluded[1] := 2;
  excluded[2] := 5;
  excluded[3] := 7;
  N := 14;

  result := RandomExcluding(N, excluded, excludedSize);
  WriteLn(result);
end.



(*
run:

4

*)

 



answered 22 hours ago by avibootz

Related questions

...