Permutations: Difference between revisions

Content added Content deleted
(→‎{{header|Euphoria}}: Euphoria example added)
(+pascal)
Line 1,083: Line 1,083:
=={{header|PARI/GP}}==
=={{header|PARI/GP}}==
<lang>vector(n!,k,numtoperm(n,k))</lang>
<lang>vector(n!,k,numtoperm(n,k))</lang>

=={{header|Pascal}}==
<lang pascal>var p: array[1 .. 20] of integer;
is_last: boolean;
n: integer;

procedure next;
var i, j, k, t: integer;
begin
is_last := true;
i := n - 1;
while i > 0 do
begin
if p[i] < p[i + 1] then
begin
is_last := false;
break;
end;
i := i - 1;
end;

if not is_last then
begin
j := i + 1;
k := n;
while j < k do
begin
t := p[j];
p[j] := p[k];
p[k] := t;
j := j + 1;
k := k - 1;
end;
j := n;
while p[j] > p[i] do j := j - 1;
j := j + 1;

t := p[i];
p[i] := p[j];
p[j] := t;
end;
end;

procedure print;
var i: integer;
begin
for i := 1 to n do write(p[i], ' ');
writeln;
end;

procedure init;
var i: integer;
begin
n := 0;
while (n < 1) or (n > 10) do
begin
write('Enter n (1 <= n <= 10): ');
readln(n);
end;
for i := 1 to n do p[i] := i;
end;

begin
init;
repeat
print;
next;
until is_last;
end.</lang>


=={{header|Perl}}==
=={{header|Perl}}==
Line 1,122: Line 1,192:
4c2a
4c2a
</pre>
</pre>

=={{header|Perl 6}}==
=={{header|Perl 6}}==
This is generic code that works with any ordered type. To force lexicographic ordering, change <tt>after</tt> to <tt>gt</tt>. To force numeric order, replace it with <tt>&gt;</tt>.
This is generic code that works with any ordered type. To force lexicographic ordering, change <tt>after</tt> to <tt>gt</tt>. To force numeric order, replace it with <tt>&gt;</tt>.