Permutations: Difference between revisions

no edit summary
No edit summary
Line 2,763:
(%o1) {[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]}
</lang>
 
=={{header|Modula-2}}==
{{works with|ADW Modula-2 (1.6.291)}}
<lang Modula-2>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.</lang>
 
=={{header|NetRexx}}==
164

edits