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.