61 lines
997 B
Plaintext
61 lines
997 B
Plaintext
MODULE Permute;
|
|
|
|
FROM Terminal
|
|
IMPORT Read, Write, WriteLn;
|
|
|
|
FROM Terminal2
|
|
IMPORT WriteString;
|
|
|
|
CONST MAXIDX = 6;
|
|
MINIDX = 1;
|
|
|
|
TYPE TInpCh = ['a'..'z'];
|
|
TChr = SET OF TInpCh;
|
|
|
|
VAR n,
|
|
nl: INTEGER;
|
|
ch: CHAR;
|
|
a: ARRAY[MINIDX..MAXIDX] OF CHAR;
|
|
kt: TChr = TChr{'a'..'f'};
|
|
|
|
PROCEDURE output;
|
|
VAR i: INTEGER;
|
|
BEGIN
|
|
FOR i := MINIDX TO n DO Write(a[i]) END;
|
|
WriteString(" | ");
|
|
END output;
|
|
|
|
PROCEDURE exchange(VAR x, y : CHAR);
|
|
VAR z: CHAR;
|
|
BEGIN z := x; x := y; y := z
|
|
END exchange;
|
|
|
|
PROCEDURE permute(k: INTEGER);
|
|
VAR i: INTEGER;
|
|
BEGIN
|
|
IF k = 1 THEN
|
|
output;
|
|
INC(nl);
|
|
IF (nl MOD 8 = 1) THEN WriteLn END;
|
|
ELSE
|
|
permute(k-1);
|
|
FOR i := MINIDX TO k-1 DO
|
|
exchange(a[i], a[k]);
|
|
permute(k-1);
|
|
exchange(a[i], a[k]);
|
|
END
|
|
END
|
|
END permute;
|
|
|
|
BEGIN
|
|
n := 0; nl := 1; WriteString("Input {a,b,c,d,e,f} >");
|
|
REPEAT
|
|
Read(ch);
|
|
IF ch IN kt THEN INC(n); a[n] := ch; Write(ch) END
|
|
UNTIL (ch <= " ") OR (n > MAXIDX);
|
|
|
|
WriteLn;
|
|
IF n > 0 THEN permute(n) END;
|
|
(*Wait*)
|
|
END Permute.
|