97 lines
3.2 KiB
Plaintext
97 lines
3.2 KiB
Plaintext
COMMENT ABC PROBLEM;
|
|
BEGIN
|
|
|
|
CLASS BLOCK(CH1, CH2); CHARACTER CH1, CH2;
|
|
BEGIN
|
|
BOOLEAN USED;
|
|
END;
|
|
|
|
CLASS GAME(WORD, POSSIBLE); TEXT WORD; BOOLEAN POSSIBLE;;
|
|
|
|
BOOLEAN PROCEDURE CANMAKEWORD(WORD); TEXT WORD;
|
|
BEGIN
|
|
INTEGER I, NUMBLOCKS;
|
|
BOOLEAN ALLPOSSIBLE, FOUND;
|
|
NUMBLOCKS := UPPERBOUND(BLOCKS, 1);
|
|
FOR I := 1 STEP 1 UNTIL NUMBLOCKS DO
|
|
BLOCKS(I).USED := FALSE;
|
|
ALLPOSSIBLE := TRUE;
|
|
|
|
WORD.SETPOS(1);
|
|
WHILE ALLPOSSIBLE AND WORD.MORE DO
|
|
BEGIN
|
|
CHARACTER WORDCHAR;
|
|
WORDCHAR := WORD.GETCHAR;
|
|
FOUND := FALSE;
|
|
FOR I := 1 STEP 1 UNTIL NUMBLOCKS DO
|
|
BEGIN
|
|
INSPECT BLOCKS(I) DO
|
|
BEGIN
|
|
IF (WORDCHAR = CH1 OR WORDCHAR = CH2) AND NOT USED THEN
|
|
BEGIN
|
|
USED := FOUND := TRUE;
|
|
GOTO L;
|
|
END;
|
|
END;
|
|
END;
|
|
L:
|
|
IF NOT FOUND THEN
|
|
ALLPOSSIBLE := FALSE;
|
|
END;
|
|
CANMAKEWORD := ALLPOSSIBLE;
|
|
END CANMAKEWORD;
|
|
|
|
REF(BLOCK) ARRAY BLOCKS(1:20);
|
|
REF(GAME) ARRAY GAMES(1:7);
|
|
TEXT WORD;
|
|
BEGIN
|
|
INTEGER I;
|
|
I := I+1; BLOCKS(I) :- NEW BLOCK('B', 'O');
|
|
I := I+1; BLOCKS(I) :- NEW BLOCK('X', 'K');
|
|
I := I+1; BLOCKS(I) :- NEW BLOCK('D', 'Q');
|
|
I := I+1; BLOCKS(I) :- NEW BLOCK('C', 'P');
|
|
I := I+1; BLOCKS(I) :- NEW BLOCK('N', 'A');
|
|
I := I+1; BLOCKS(I) :- NEW BLOCK('G', 'T');
|
|
I := I+1; BLOCKS(I) :- NEW BLOCK('R', 'E');
|
|
I := I+1; BLOCKS(I) :- NEW BLOCK('T', 'G');
|
|
I := I+1; BLOCKS(I) :- NEW BLOCK('Q', 'D');
|
|
I := I+1; BLOCKS(I) :- NEW BLOCK('F', 'S');
|
|
I := I+1; BLOCKS(I) :- NEW BLOCK('J', 'W');
|
|
I := I+1; BLOCKS(I) :- NEW BLOCK('H', 'U');
|
|
I := I+1; BLOCKS(I) :- NEW BLOCK('V', 'I');
|
|
I := I+1; BLOCKS(I) :- NEW BLOCK('A', 'N');
|
|
I := I+1; BLOCKS(I) :- NEW BLOCK('O', 'B');
|
|
I := I+1; BLOCKS(I) :- NEW BLOCK('E', 'R');
|
|
I := I+1; BLOCKS(I) :- NEW BLOCK('F', 'S');
|
|
I := I+1; BLOCKS(I) :- NEW BLOCK('L', 'Y');
|
|
I := I+1; BLOCKS(I) :- NEW BLOCK('P', 'C');
|
|
I := I+1; BLOCKS(I) :- NEW BLOCK('Z', 'M');
|
|
END;
|
|
BEGIN
|
|
INTEGER N, I; BOOLEAN ANSWER;
|
|
N := N+1; GAMES(N) :- NEW GAME("A", TRUE);
|
|
N := N+1; GAMES(N) :- NEW GAME("BARK", TRUE);
|
|
N := N+1; GAMES(N) :- NEW GAME("BOOK", FALSE);
|
|
N := N+1; GAMES(N) :- NEW GAME("TREAT", TRUE);
|
|
N := N+1; GAMES(N) :- NEW GAME("COMMON", FALSE);
|
|
N := N+1; GAMES(N) :- NEW GAME("SQUAD", TRUE);
|
|
N := N+1; GAMES(N) :- NEW GAME("CONFUSE", TRUE);
|
|
FOR I := 1 STEP 1 UNTIL N DO
|
|
BEGIN
|
|
INSPECT GAMES(I) DO
|
|
BEGIN
|
|
OUTTEXT(WORD);
|
|
OUTTEXT(" => ");
|
|
ANSWER := CANMAKEWORD(WORD);
|
|
OUTCHAR(IF ANSWER THEN 'T' ELSE 'F');
|
|
IF ANSWER EQV POSSIBLE
|
|
THEN OUTTEXT(" OK")
|
|
ELSE OUTTEXT(" ------------- WRONG!");
|
|
OUTIMAGE;
|
|
END;
|
|
END;
|
|
END;
|
|
|
|
|
|
END.
|