How to generate all possible permutations and combinations of an array of chars in Pascal

1 Answer

0 votes
program PermutationsAndCombinations

const
  MaxSize = 10;

type
  CharArray = array[1..MaxSize] of char;

var
  arr   : CharArray;
  n     : integer;

procedure PrintArray(a: CharArray; len: integer);
var
  i: integer;
begin
  for i := 1 to len do
    write(a[i], ' ');
  writeln;
end;

procedure Swap(var x, y: char);
var
  tmp: char;
begin
  tmp := x;
  x := y;
  y := tmp;
end;

procedure GeneratePermutations(a: CharArray; l, r: integer);
var
  i: integer;
begin
  if l = r then
    PrintArray(a, r)
  else
    for i := l to r do
    begin
      Swap(a[l], a[i]);
      GeneratePermutations(a, l + 1, r);
      Swap(a[l], a[i]);  { backtrack }
    end;
end;

procedure GenerateCombinations(a: CharArray; size: integer);
var
  mask, i: integer;
  subset: CharArray;
  len: integer;
begin
  for mask := 1 to (1 shl size) - 1 do
  begin
    len := 0;
    for i := 0 to size-1 do
      if (mask and (1 shl i)) <> 0 then
      begin
        inc(len);
        subset[len] := a[i+1];
      end;
    PrintArray(subset, len);
  end;
end;

begin
  { initialize array with 'a','b','c' }
  n := 3;
  arr[1] := 'a';
  arr[2] := 'b';
  arr[3] := 'c';

  writeln('All permutations:');
  GeneratePermutations(arr, 1, n);

  writeln;
  writeln('All combinations:');
  GenerateCombinations(arr, n);
end.




(*
run:

All permutations:
a b c 
a c b 
b a c 
b c a 
c b a 
c a b 

All combinations:
a 
b 
a b 
c 
a c 
b c 
a b c 

*)

 



answered 1 day ago by avibootz
edited 17 hours ago by avibootz

Related questions

...