Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
|
|
@ -0,0 +1,36 @@
|
|||
include c:\cxpl\codes;
|
||||
|
||||
proc PERMS(N);
|
||||
int N; \number of elements
|
||||
int I, K, S, T, P;
|
||||
[P:= Reserve((N+1)*4);
|
||||
for I:= 0 to N do P(I):= -I; \initialize facing left (also set P(0)=0)
|
||||
S:= 1;
|
||||
repeat Text(0, "Perm: [ ");
|
||||
for I:= 1 to N do
|
||||
[IntOut(0, abs(P(I))); ChOut(0, ^ )];
|
||||
Text(0, "] Sign: "); IntOut(0, S); CrLf(0);
|
||||
|
||||
K:= 0; \find largest mobile element
|
||||
for I:= 2 to N do \for left-facing elements
|
||||
if P(I) < 0 and
|
||||
abs(P(I)) > abs(P(I-1)) and \ greater than neighbor
|
||||
abs(P(I)) > abs(P(K)) then K:= I; \ get largest element
|
||||
for I:= 1 to N-1 do \for right-facing elements
|
||||
if P(I) > 0 and
|
||||
abs(P(I)) > abs(P(I+1)) and \ greater than neighbor
|
||||
abs(P(I)) > abs(P(K)) then K:= I; \ get largest element
|
||||
if K # 0 then \mobile element found
|
||||
[for I:= 1 to N do \reverse elements > K
|
||||
if abs(P(I)) > abs(P(K)) then P(I):= P(I)*-1;
|
||||
I:= K + (if P(K)<0 then -1 else 1);
|
||||
T:= P(K); P(K):= P(I); P(I):= T; \swap K with element looked at
|
||||
S:= -S; \alternate signs
|
||||
];
|
||||
until K = 0; \no mobile element remains
|
||||
];
|
||||
|
||||
[PERMS(3);
|
||||
CrLf(0);
|
||||
PERMS(4);
|
||||
]
|
||||
Loading…
Add table
Add a link
Reference in a new issue