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.