Contributor: ANDY MCFARLAND           

{ ANDY MCFARLAND }

Var
  pick : Array [1..52] of Byte;
  i, n,
  temp : Word;

begin
  { start With an ordered deck }
  For i := 1 to 52 do
     pick[i] := i ;

  For i:= 52 downto 2 do
  begin                       { [i+1..52] has been shuffled }
     { pick any card in the unshuffled part of the deck }
     n := random(i) + 1 ;     { N in [1..i] }
     temp := pick[n] ;        { exchange pick[i] pick[n] }
     pick[n] := pick[i] ;
     pick[i] := temp ;
  end ;
end;