Data update
This commit is contained in:
parent
5150844a7d
commit
4bb20c9b71
7735 changed files with 38060 additions and 199180 deletions
|
|
@ -1,9 +0,0 @@
|
|||
generic
|
||||
N: positive;
|
||||
package Generic_Perm is
|
||||
subtype Element is Positive range 1 .. N;
|
||||
type Permutation is array(Element) of Element;
|
||||
|
||||
procedure Set_To_First(P: out Permutation; Is_Last: out Boolean);
|
||||
procedure Go_To_Next(P: in out Permutation; Is_Last: out Boolean);
|
||||
end Generic_Perm;
|
||||
|
|
@ -1,71 +0,0 @@
|
|||
package body Generic_Perm is
|
||||
|
||||
|
||||
procedure Set_To_First(P: out Permutation; Is_Last: out Boolean) is
|
||||
begin
|
||||
for I in P'Range loop
|
||||
P (I) := I;
|
||||
end loop;
|
||||
Is_Last := P'Length = 1;
|
||||
-- if P has a single element, the fist permutation is the last one
|
||||
end Set_To_First;
|
||||
|
||||
procedure Go_To_Next(P: in out Permutation; Is_Last: out Boolean) is
|
||||
|
||||
procedure Swap (A, B : in out Integer) is
|
||||
C : Integer := A;
|
||||
begin
|
||||
A := B;
|
||||
B := C;
|
||||
end Swap;
|
||||
|
||||
I, J, K : Element;
|
||||
begin
|
||||
-- find longest tail decreasing sequence
|
||||
-- after the loop, this sequence is I+1 .. n,
|
||||
-- and the ith element will be exchanged later
|
||||
-- with some element of the tail
|
||||
Is_Last := True;
|
||||
I := N - 1;
|
||||
loop
|
||||
if P (I) < P (I+1)
|
||||
then
|
||||
Is_Last := False;
|
||||
exit;
|
||||
end if;
|
||||
|
||||
-- next instruction will raise an exception if I = 1, so
|
||||
-- exit now (this is the last permutation)
|
||||
exit when I = 1;
|
||||
I := I - 1;
|
||||
end loop;
|
||||
|
||||
-- if all the elements of the permutation are in
|
||||
-- decreasing order, this is the last one
|
||||
if Is_Last then
|
||||
return;
|
||||
end if;
|
||||
|
||||
-- sort the tail, i.e. reverse it, since it is in decreasing order
|
||||
J := I + 1;
|
||||
K := N;
|
||||
while J < K loop
|
||||
Swap (P (J), P (K));
|
||||
J := J + 1;
|
||||
K := K - 1;
|
||||
end loop;
|
||||
|
||||
-- find lowest element in the tail greater than the ith element
|
||||
J := N;
|
||||
while P (J) > P (I) loop
|
||||
J := J - 1;
|
||||
end loop;
|
||||
J := J + 1;
|
||||
|
||||
-- exchange them
|
||||
-- this will give the next permutation in lexicographic order,
|
||||
-- since every element from ith to the last is minimum
|
||||
Swap (P (I), P (J));
|
||||
end Go_To_Next;
|
||||
|
||||
end Generic_Perm;
|
||||
|
|
@ -1,30 +0,0 @@
|
|||
with Ada.Text_IO, Ada.Command_Line, Generic_Perm;
|
||||
|
||||
procedure Print_Perms is
|
||||
package CML renames Ada.Command_Line;
|
||||
package TIO renames Ada.Text_IO;
|
||||
begin
|
||||
declare
|
||||
package Perms is new Generic_Perm(Positive'Value(CML.Argument(1)));
|
||||
P : Perms.Permutation;
|
||||
Done : Boolean := False;
|
||||
|
||||
procedure Print(P: Perms.Permutation) is
|
||||
begin
|
||||
for I in P'Range loop
|
||||
TIO.Put (Perms.Element'Image (P (I)));
|
||||
end loop;
|
||||
TIO.New_Line;
|
||||
end Print;
|
||||
begin
|
||||
Perms.Set_To_First(P, Done);
|
||||
loop
|
||||
Print(P);
|
||||
exit when Done;
|
||||
Perms.Go_To_Next(P, Done);
|
||||
end loop;
|
||||
end;
|
||||
exception
|
||||
when Constraint_Error
|
||||
=> TIO.Put_Line ("*** Error: enter one numerical argument n with n >= 1");
|
||||
end Print_Perms;
|
||||
|
|
@ -1,48 +0,0 @@
|
|||
function reverse(sequence s, integer first, integer last)
|
||||
object x
|
||||
while first < last do
|
||||
x = s[first]
|
||||
s[first] = s[last]
|
||||
s[last] = x
|
||||
first += 1
|
||||
last -= 1
|
||||
end while
|
||||
return s
|
||||
end function
|
||||
|
||||
function nextPermutation(sequence s)
|
||||
integer pos, last
|
||||
object x
|
||||
if length(s) < 1 then
|
||||
return 0
|
||||
end if
|
||||
|
||||
pos = length(s)-1
|
||||
while compare(s[pos], s[pos+1]) >= 0 do
|
||||
pos -= 1
|
||||
if pos < 1 then
|
||||
return -1
|
||||
end if
|
||||
end while
|
||||
|
||||
last = length(s)
|
||||
while compare(s[last], s[pos]) <= 0 do
|
||||
last -= 1
|
||||
end while
|
||||
x = s[pos]
|
||||
s[pos] = s[last]
|
||||
s[last] = x
|
||||
|
||||
return reverse(s, pos+1, length(s))
|
||||
end function
|
||||
|
||||
object s
|
||||
s = "abcd"
|
||||
puts(1, s & '\t')
|
||||
while 1 do
|
||||
s = nextPermutation(s)
|
||||
if atom(s) then
|
||||
exit
|
||||
end if
|
||||
puts(1, s & '\t')
|
||||
end while
|
||||
|
|
@ -1,26 +0,0 @@
|
|||
function permutation ($array) {
|
||||
function generate($n, $array, $A) {
|
||||
if($n -eq 1) {
|
||||
$array[$A] -join ' '
|
||||
}
|
||||
else{
|
||||
for( $i = 0; $i -lt ($n - 1); $i += 1) {
|
||||
generate ($n - 1) $array $A
|
||||
if($n % 2 -eq 0){
|
||||
$i1, $i2 = $i, ($n-1)
|
||||
$A[$i1], $A[$i2] = $A[$i2], $A[$i1]
|
||||
}
|
||||
else{
|
||||
$i1, $i2 = 0, ($n-1)
|
||||
$A[$i1], $A[$i2] = $A[$i2], $A[$i1]
|
||||
}
|
||||
}
|
||||
generate ($n - 1) $array $A
|
||||
}
|
||||
}
|
||||
$n = $array.Count
|
||||
if($n -gt 0) {
|
||||
(generate $n $array (0..($n-1)))
|
||||
} else {$array}
|
||||
}
|
||||
permutation @('A','B','C')
|
||||
|
|
@ -1,6 +0,0 @@
|
|||
# Takes strict range 0..<n and generates n! permutations
|
||||
# (from https://github.com/Omnikar/uiua-math/blob/main/lib.ua).
|
||||
Perms ← ☇1⍉∧(≡↻⇡⟜↯+1⟜⊂):¤¤°⊂
|
||||
|
||||
Permute ← ≡⊏⊙¤⊸(Perms⇡⧻) # Generalised helper function.
|
||||
⟜⧻Permute {"this" "is" "fine"} # Yoda simulator
|
||||
|
|
@ -1,24 +0,0 @@
|
|||
'permutation ,recursive
|
||||
a=array("Hello",1,True,3.141592)
|
||||
cnt=0
|
||||
perm a,0
|
||||
wscript.echo vbcrlf &"Count " & cnt
|
||||
|
||||
sub print(a)
|
||||
s=""
|
||||
for i=0 to ubound(a):
|
||||
s=s &" " & a(i):
|
||||
next:
|
||||
wscript.echo s :
|
||||
cnt=cnt+1 :
|
||||
end sub
|
||||
sub swap(a,b) t=a: a=b :b=t: end sub
|
||||
|
||||
sub perm(byval a,i)
|
||||
if i=ubound(a) then print a: exit sub
|
||||
for j= i to ubound(a)
|
||||
swap a(i),a(j)
|
||||
perm a,i+1
|
||||
swap a(i),a(j)
|
||||
next
|
||||
end sub
|
||||
Loading…
Add table
Add a link
Reference in a new issue