41 lines
900 B
Text
41 lines
900 B
Text
MODULE LookAndSay;
|
|
FROM InOut IMPORT WriteString, WriteLn;
|
|
FROM Strings IMPORT Assign, Length;
|
|
|
|
CONST
|
|
MaxSize = 128;
|
|
Steps = 14;
|
|
|
|
VAR
|
|
buf1, buf2: ARRAY [0..MaxSize-1] OF CHAR;
|
|
step: CARDINAL;
|
|
|
|
PROCEDURE LookSay(in: ARRAY OF CHAR; VAR out: ARRAY OF CHAR);
|
|
VAR count, inIdx, outIdx: CARDINAL;
|
|
curChar: CHAR;
|
|
BEGIN
|
|
inIdx := 0;
|
|
outIdx := 0;
|
|
WHILE in[inIdx] # CHR(0) DO
|
|
curChar := in[inIdx];
|
|
count := 0;
|
|
REPEAT
|
|
INC(inIdx);
|
|
INC(count);
|
|
UNTIL in[inIdx] # curChar;
|
|
out[outIdx] := CHR(ORD('0') + count);
|
|
out[outIdx+1] := curChar;
|
|
outIdx := outIdx + 2;
|
|
END;
|
|
out[outIdx] := CHR(0);
|
|
END LookSay;
|
|
|
|
BEGIN
|
|
Assign("1", buf1);
|
|
FOR step := 1 TO Steps DO
|
|
WriteString(buf1);
|
|
WriteLn();
|
|
LookSay(buf1, buf2);
|
|
Assign(buf2, buf1);
|
|
END;
|
|
END LookAndSay.
|