84 lines
2.0 KiB
Plaintext
84 lines
2.0 KiB
Plaintext
MODULE ABCBlocks;
|
|
IMPORT
|
|
Object,
|
|
Out;
|
|
|
|
VAR
|
|
blocks: ARRAY 20 OF STRING;
|
|
|
|
PROCEDURE CanMakeWord(w: STRING): BOOLEAN;
|
|
VAR
|
|
used: ARRAY 20 OF LONGINT;
|
|
wChars: Object.CharsLatin1;
|
|
i,j: LONGINT;
|
|
|
|
PROCEDURE IsUsed(i: LONGINT): BOOLEAN;
|
|
VAR
|
|
b: LONGINT;
|
|
BEGIN
|
|
b := 0;
|
|
WHILE (b < LEN(used) - 1) & (used[b] # -1) DO
|
|
IF used[b] = i THEN RETURN TRUE END;
|
|
INC(b)
|
|
END;
|
|
RETURN FALSE
|
|
END IsUsed;
|
|
|
|
PROCEDURE GetBlockFor(blocks: ARRAY OF STRING; c: CHAR): LONGINT;
|
|
VAR
|
|
i: LONGINT;
|
|
BEGIN
|
|
i := 0;
|
|
WHILE (i < LEN(blocks)) DO
|
|
IF (blocks[i].IndexOf(c,0) >= 0) & (~IsUsed(i)) THEN RETURN i END;
|
|
INC(i)
|
|
END;
|
|
|
|
RETURN -1;
|
|
END GetBlockFor;
|
|
|
|
BEGIN
|
|
FOR i := 0 TO LEN(used) - 1 DO used[i] := -1 END;
|
|
wChars := w(Object.String8).CharsLatin1();
|
|
|
|
i := 0;
|
|
WHILE (i < LEN(wChars^) - 1) DO
|
|
j := GetBlockFor(blocks,CAP(wChars[i]));
|
|
IF j < 0 THEN RETURN FALSE END;
|
|
used[i] := j;
|
|
INC(i)
|
|
END;
|
|
RETURN TRUE
|
|
END CanMakeWord;
|
|
|
|
BEGIN
|
|
blocks[0] := "BO";
|
|
blocks[1] := "XK";
|
|
blocks[2] := "DQ";
|
|
blocks[3] := "CP";
|
|
blocks[4] := "NA";
|
|
blocks[5] := "GT";
|
|
blocks[6] := "RE";
|
|
blocks[7] := "TG";
|
|
blocks[8] := "QD";
|
|
blocks[9] := "FS";
|
|
blocks[10] := "JW";
|
|
blocks[11] := "HU";
|
|
blocks[12] := "VI";
|
|
blocks[13] := "AN";
|
|
blocks[14] := "OB";
|
|
blocks[15] := "ER";
|
|
blocks[16] := "FS";
|
|
blocks[17] := "LY";
|
|
blocks[18] := "PC";
|
|
blocks[19] := "ZM";
|
|
|
|
Out.String("A: ");Out.Bool(CanMakeWord("A"));Out.Ln;
|
|
Out.String("BARK: ");Out.Bool(CanMakeWord("BARK"));Out.Ln;
|
|
Out.String("BOOK: ");Out.Bool(CanMakeWord("BOOK"));Out.Ln;
|
|
Out.String("TREAT: ");Out.Bool(CanMakeWord("TREAT"));Out.Ln;
|
|
Out.String("COMMON: ");Out.Bool(CanMakeWord("COMMON"));Out.Ln;
|
|
Out.String("SQAD: ");Out.Bool(CanMakeWord("SQUAD"));Out.Ln;
|
|
Out.String("confuse: ");Out.Bool(CanMakeWord("confuse"));Out.Ln;
|
|
END ABCBlocks.
|