Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
91
Task/Perfect-shuffle/Modula-2/perfect-shuffle.mod2
Normal file
91
Task/Perfect-shuffle/Modula-2/perfect-shuffle.mod2
Normal file
|
|
@ -0,0 +1,91 @@
|
|||
MODULE PerfectShuffle;
|
||||
FROM FormatString IMPORT FormatString;
|
||||
FROM Storage IMPORT ALLOCATE,DEALLOCATE;
|
||||
FROM SYSTEM IMPORT ADDRESS,TSIZE;
|
||||
FROM Terminal IMPORT WriteString,WriteLn,ReadChar;
|
||||
|
||||
PROCEDURE WriteCard(c : CARDINAL);
|
||||
VAR buf : ARRAY[0..15] OF CHAR;
|
||||
BEGIN
|
||||
FormatString("%c", buf, c);
|
||||
WriteString(buf)
|
||||
END WriteCard;
|
||||
|
||||
PROCEDURE Init(VAR arr : ARRAY OF INTEGER);
|
||||
VAR i : CARDINAL;
|
||||
BEGIN
|
||||
FOR i:=0 TO HIGH(arr) DO
|
||||
arr[i] := i + 1
|
||||
END
|
||||
END Init;
|
||||
|
||||
PROCEDURE PerfectShuffle(VAR arr : ARRAY OF INTEGER);
|
||||
PROCEDURE Inner(ti : CARDINAL);
|
||||
VAR
|
||||
tv : INTEGER;
|
||||
tp,tn,n : CARDINAL;
|
||||
BEGIN
|
||||
n := HIGH(arr);
|
||||
tn := ti;
|
||||
tv := arr[ti];
|
||||
REPEAT
|
||||
tp := tn;
|
||||
IF tp MOD 2 = 0 THEN
|
||||
tn := tp / 2
|
||||
ELSE
|
||||
tn := (n+1)/2+tp/2
|
||||
END;
|
||||
arr[tp] := arr[tn];
|
||||
UNTIL tn = ti;
|
||||
arr[tp] := tv
|
||||
END Inner;
|
||||
VAR
|
||||
done : BOOLEAN;
|
||||
i,c : CARDINAL;
|
||||
BEGIN
|
||||
c := 0;
|
||||
Init(arr);
|
||||
|
||||
REPEAT
|
||||
i := 1;
|
||||
WHILE i <= (HIGH(arr)/2) DO
|
||||
Inner(i);
|
||||
INC(i,2)
|
||||
END;
|
||||
INC(c);
|
||||
|
||||
done := TRUE;
|
||||
FOR i:=0 TO HIGH(arr) DO
|
||||
IF arr[i] # INT(i+1) THEN
|
||||
done := FALSE;
|
||||
BREAK
|
||||
END
|
||||
END
|
||||
UNTIL done;
|
||||
|
||||
WriteCard(HIGH(arr)+1);
|
||||
WriteString(": ");
|
||||
WriteCard(c);
|
||||
WriteLn
|
||||
END PerfectShuffle;
|
||||
|
||||
(* Main *)
|
||||
VAR
|
||||
v8 : ARRAY[1..8] OF INTEGER;
|
||||
v24 : ARRAY[1..24] OF INTEGER;
|
||||
v52 : ARRAY[1..52] OF INTEGER;
|
||||
v100 : ARRAY[1..100] OF INTEGER;
|
||||
v1020 : ARRAY[1..1020] OF INTEGER;
|
||||
v1024 : ARRAY[1..1024] OF INTEGER;
|
||||
v10000 : ARRAY[1..10000] OF INTEGER;
|
||||
BEGIN
|
||||
PerfectShuffle(v8);
|
||||
PerfectShuffle(v24);
|
||||
PerfectShuffle(v52);
|
||||
PerfectShuffle(v100);
|
||||
PerfectShuffle(v1020);
|
||||
PerfectShuffle(v1024);
|
||||
PerfectShuffle(v10000);
|
||||
|
||||
ReadChar
|
||||
END PerfectShuffle.
|
||||
Loading…
Add table
Add a link
Reference in a new issue