Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
61
Task/Rep-string/Modula-2/rep-string.mod2
Normal file
61
Task/Rep-string/Modula-2/rep-string.mod2
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
MODULE RepStrings;
|
||||
FROM InOut IMPORT Write, WriteString, WriteLn, WriteCard;
|
||||
FROM Strings IMPORT Copy, Length;
|
||||
|
||||
(* Find the length of the longest rep-string given a string.
|
||||
If there is no rep-string, the result is 0. *)
|
||||
PROCEDURE repLength(s: ARRAY OF CHAR): CARDINAL;
|
||||
VAR strlen, replen, i, j: CARDINAL;
|
||||
ok: BOOLEAN;
|
||||
BEGIN
|
||||
strlen := Length(s);
|
||||
FOR replen := strlen DIV 2 TO 1 BY -1 DO
|
||||
ok := TRUE;
|
||||
i := 0;
|
||||
WHILE ok AND (i < replen) DO
|
||||
j := i + replen;
|
||||
WHILE (i+j < strlen) AND (s[i] = s[j]) DO
|
||||
j := j + replen;
|
||||
END;
|
||||
ok := ok AND (i+j >= strlen);
|
||||
INC(i);
|
||||
END;
|
||||
IF ok THEN RETURN replen; END;
|
||||
END;
|
||||
RETURN 0;
|
||||
END repLength;
|
||||
|
||||
(* Store the longest rep-string in the given buffer. *)
|
||||
PROCEDURE repString(in: ARRAY OF CHAR; VAR out: ARRAY OF CHAR);
|
||||
VAR len: CARDINAL;
|
||||
BEGIN
|
||||
len := repLength(in);
|
||||
Copy(in, 0, len, out);
|
||||
out[len] := CHR(0);
|
||||
END repString;
|
||||
|
||||
(* Display the longest rep-string given a string *)
|
||||
PROCEDURE rep(s: ARRAY OF CHAR);
|
||||
VAR buf: ARRAY [0..63] OF CHAR;
|
||||
BEGIN
|
||||
WriteString(s);
|
||||
WriteString(": ");
|
||||
repString(s, buf);
|
||||
WriteString(buf);
|
||||
WriteLn();
|
||||
END rep;
|
||||
|
||||
(* Test cases *)
|
||||
BEGIN
|
||||
rep("1001110011");
|
||||
rep("1110111011");
|
||||
rep("0010010010");
|
||||
rep("1010101010");
|
||||
rep("1111111111");
|
||||
rep("0100101101");
|
||||
rep("0100100");
|
||||
rep("101");
|
||||
rep("11");
|
||||
rep("00");
|
||||
rep("1");
|
||||
END RepStrings.
|
||||
Loading…
Add table
Add a link
Reference in a new issue