RosettaCodeData/Task/Permutations/Action-/permutations.action

61 lines
786 B
Plaintext

PROC PrintArray(BYTE ARRAY a BYTE len)
BYTE i
FOR i=0 TO len-1
DO
PrintB(a(i))
OD
Print(" ")
RETURN
BYTE FUNC NextPermutation(BYTE ARRAY a BYTE len)
BYTE i,j,k,tmp
i=len-1
WHILE i>0 AND a(i-1)>a(i)
DO
i==-1
OD
j=i
k=len-1
WHILE j<k
DO
tmp=a(j) a(j)=a(k) a(k)=tmp
j==+1 k==-1
OD
IF i=0 THEN
RETURN (0)
FI
j=i
WHILE a(j)<a(i-1)
DO
j==+1
OD
tmp=a(i-1) a(i-1)=a(j) a(j)=tmp
RETURN (1)
PROC Main()
DEFINE len="5"
BYTE ARRAY a(len)
BYTE RMARGIN=$53,oldRMARGIN
BYTE i
oldRMARGIN=RMARGIN
RMARGIN=37 ;change right margin on the screen
FOR i=0 TO len-1
DO
a(i)=i
OD
DO
PrintArray(a,len)
UNTIL NextPermutation(a,len)=0
OD
RMARGIN=oldRMARGIN ;restore right margin on the screen
RETURN