Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
83
Task/ABC-problem/Oberon-2/abc-problem.oberon
Normal file
83
Task/ABC-problem/Oberon-2/abc-problem.oberon
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
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.
|
||||
Loading…
Add table
Add a link
Reference in a new issue