26 lines
822 B
Plaintext
26 lines
822 B
Plaintext
100 INPUT "HOW MANY";N
|
|
110 DIM A(N-1):REM ARRAY TO PERMUTE
|
|
120 DIM K(N-1):REM HOW MANY ITEMS TO PERMUTE (ARRAY AS STACK)
|
|
130 DIM I(N-1):REM CURRENT POSITION IN LOOP (ARRAY AS STACK)
|
|
140 S=0:REM STACK POINTER
|
|
150 FOR I=0 TO N-1
|
|
160 : A(I)=I+1: REM INITIALIZE ARRAY TO 1..N
|
|
170 NEXT I
|
|
180 K(S)=N:S=S+1:GOSUB 200:REM PERMUTE(N)
|
|
190 END
|
|
200 IF K(S-1)>1 THEN 270
|
|
210 REM PRINT OUT THIS PERMUTATION
|
|
220 FOR I=0 TO N-1
|
|
230 : PRINT A(I);
|
|
240 NEXT I
|
|
250 PRINT
|
|
260 RETURN
|
|
270 K(S)=K(S-1)-1:S=S+1:GOSUB 200:S=S-1:REM PERMUTE(K-1)
|
|
280 I(S-1)=0:REM FOR I=0 TO K-2
|
|
290 IF I(S-1)>=K(S-1)-1 THEN 340
|
|
300 J=I(S-1):IF K(S-1) AND 1 THEN J=0:REM ELEMENT TO SWAP BASED ON PARITY OF K
|
|
310 T=A(J):A(J)=A(K(S-1)-1):A(K(S-1)-1)=T:REM SWAP
|
|
320 K(S)=K(S-1)-1:S=S+1:GOSUB 200:S=S-1:REM PERMUTE(K-1)
|
|
330 I(S-1)=I(S-1)+1:GOTO 290:REM NEXT I
|
|
340 RETURN
|