program DEALTEST { www.merlyn.demon.co.uk 2001-11-22, >-2003-02-06 } ; const MaxM = 6 ; MaxN = 9 ; type RandomSet = set of 1..MaxN ; function Fac(M : integer) : integer ; var J, X : integer ; begin X := 1 ; for J := 1 to M do X := X*J ; Fac := X end {Fac} ; var Ans1, Ans2 : array [1..1000] of RandomSet ; { Generate M non-repeating random numbers from 1 to N } procedure GenerateRandomSet(M, N : Integer ; var aSet : RandomSet) {DR} ; var J : Integer ; begin if M < 1 then aSet := [] else begin GenerateRandomSet(M - 1, N - 1, aSet) ; J := Random(N) + 1 { J is in [1..N] } ; if J in aSet then Include(aSet, N) else Include(aSet, J) ; end ; end {GenerateRandomSet} ; procedure GRS(M, N : Integer ; var aSet : RandomSet) {RVS} ; var J, K : Integer ; begin aSet := [] ; for K := N-M+1 to N do begin J := Random(K)+1 ; if J in aSet then aSet := aSet + [K] else aSet := aSet + [J] ; end ; end {GRS, after Rufus V Smith in c.l.p.m} ; var P, Q : integer ; aSet : RandomSet ; B : boolean ; Save : longint ; BEGIN ; Save := RandSeed ; for Q := 1 to Fac(MaxM) do begin RandSeed := Random(Q) ; GenerateRandomSet(MaxM, MaxN, aSet) ; Ans1[Q] := aSet end ; RandSeed := Save ; for Q := 1 to Fac(MaxM) do begin RandSeed := Random(Q) ; GRS(MaxM, MaxN, aSet) ; Ans2[Q] := aSet end ; B := true ; for Q := 1 to Fac(MaxM) do if Ans1[Q]<>Ans2[Q] then B := false ; Writeln(B:7) { same sets in same order from 2 methods } ; END.