begin
integer COLOR1,COLOR2,COLOR3,COLOR4,
ROW,COL,OLDROW,OLDCOL,MAXCOL;
integer array HYP[1:4],BOARD[1:10,1:4],WHITES,BLACKS[1:10];
boolean array OLDMAT,NEWMAT[1:4];
procedure PATERN(ROW);
value ROW; integer ROW;
begin
integer COL;
for COL ≔ ,2,3,4 do
if BOARD[ROW,COL]=1 then out string(1,“RED ”)
else if BOARD[ROW,COL]=2 then out string(1,“BLUE ”)
else if BOARD[ROW,COL]=3 then out string(1,“GREEN ”)
else if BOARD[ROW,COL]=4 then out string(1,“YELLOW ”)
else if BOARD[ROW,COL]=5 then out string(1,“BLACK ”)
else if BOARD[ROW,COL]=6 then out string(1,“WHITE ”)
else out string(1,“SPACE ”);
end PRINT PATTERN;
procedure PRINTROW;
begin out string(1,“\nMy guess ”); out integer(1,ROW);
out string(1,“ is: ”);
PATERN(ROW);
end PRINT THE CURRENT ROW;
START: out string(1,“\n\nMastermind Codebreaker\nVersion 1 or 2 ?”);
in integer(0,MAXCOL);
if ¬(MAXCOL=1 ∨ MAXCOL=2) then goto START;
MAXCOL ≔ AXCOL+5;
ROW ≔ ;
for COLOR1 ≔ step 1 until MAXCOL do
for COLOR2 ≔ step 1 until MAXCOL,1 do
for COLOR3 ≔ step 1 until MAXCOL,1,2 do
for COLOR4 ≔ step 1 until MAXCOL,1,2,3 do
begin
integer BLACK,WHITE;
HYP[1] ≔ OLOR1; HYP[2] ≔ OLOR2;
HYP[3] ≔ OLOR3; HYP[4] ≔ OLOR4;
comment SET UP THE HYPOTHESIS ROW.
A ROW IS CONSISTENT WITH ALL PREVIOUS ROWS IF IT
GIVES RISE TO THE SAME NUMBER OF BLACK AND WHITE INFORMATION
PEGS AS THOSE ROWS;
for OLDROW ≔ step 1 until ROW-1 do
begin
BLACK ≔ ;
for COL ≔ ,2,3,4 do
begin
boolean TEMP;
TEMP ≔ OLDMAT[COL] ≔ NEWMAT[COL] ≔ HYP[COL]=BOARD[OLDROW,COL];
if TEMP then BLACK ≔ LACK+1;
end;
if BLACK≠BLACKS[OLDROW] then goto NOT VIABLE;
WHITE ≔ ;
for COL ≔ ,2,3 do
for OLDCOL ≔ OL+1 step 1 until 4 do
begin
if HYP[COL]=BOARD[OLDROW,OLDCOL] then
begin
if ¬(NEWMAT[COL] ∨ OLDMAT[OLDCOL]) then
begin
NEWMAT[COL] ≔ LDMAT[OLDCOL] ≔ ̲rue;
WHITE ≔ HITE+1;
end
end;
if HYP[OLDCOL]=BOARD[OLDROW,COL] then
begin
if ¬(NEWMAT[OLDCOL] ∨ OLDMAT[COL]) then
begin
NEWMAT[OLDCOL] ≔ LDMAT[COL] ≔ ̲rue;
WHITE ≔ HITE+1;
end
end
end;
if WHITE≠WHITES[OLDROW] then goto NOT VIABLE;
end LOOK AT EACH PREVIOUS ROW;
comment AT THIS POINT THE HYPOTHESIS ROW IS VIABLE;
for COL ≔ step 1 until 4 do BOARD[ROW,COL] ≔ YP[COL];
PRINTROW;
JUNK: out string(1,“\nHow many black pegs ? ”);
in integer(0,BLACKS[ROW]);
if BLACKS[ROW]=4 then
begin
out string(1,“Thanks for the game”);
goto START;
end PROBLEM SOLVED
else if BLACKS[ROW]=3 then WHITES[ROW] ≔
else
begin
if BLACKS[ROW]<0 ∨ BLACKS[ROW]>4 then
begin
out string(1,“TWIT !!”); goto JUNK;
end;
out string(1,“How many white pegs ? ”);
in integer(0,WHITES[ROW]);
if WHITES[ROW]<0 ∨
WHITES[ROW]+BLACKS[ROW]>4 then
begin out string(1,“TWIT !!”); goto JUNK;
end
end;
ROW ≔ OW+1;
if ROW=10 then
begin
out string(1,“\nWELL DONE, YOU WIN !!”);
goto START;
end;
NOT VIABLE:
end LOOK AT EACH POSSIBLE ROW;
out string(1,“\nTwit !!! you made a mistake”);
goto START;
end OF MASTERMIND CODEBREAKER;