dos_compilers/RHA (Minisystems) ALGOL v55/MMIND.ALG

112 lines
3.9 KiB
Plaintext
Raw Normal View History

2024-07-06 18:53:43 +02:00
'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; 'INETEGR' ROW;
'BEGIN''INTEGER' COL;
'FOR' COL:=1,2,3,4 'DO'
'IF' BOARD[ROW,COL]=1 'THEN' TEXT(1,"RED ")
'ELSE''IF' BOARD[ROW,COL]=2 'THEN' TEXT(1,"BLUE ")
'ELSE''IF' BOARD[ROW,COL]=3 'THEN' TEXT(1,"GREEN ")
'ELSE''IF' BOARD[ROW,COL]=4 'THEN' TEXT(1,"YELLOW ")
'ELSE''IF' BOARD[ROW,COL]=5 'THEN' TEXT(1,"BLACK ")
'ELSE''IF' BOARD[ROW,COL]=6 'THEN' TEXT(1,"WHITE ")
'ELSE' TEXT(1,"SPACE ");
'END' PRINT PATTERN;
'PROCEDURE' PRINTROW;
'BEGIN' TEXT(1,"*NMy guess "); WRITE(1,ROW);
TEXT(1," is: ");
PATERN(ROW);
'END' PRINT THE CURRENT ROW;
START: TEXT(1,"*N*NMastermind Codebreaker*NVersion 1 or 2 ?");
MAXCOL:=READ(7);
'IF''NOT' (MAXCOL=1 'OR' MAXCOL=2)'THEN''GOTO' START;
MAXCOL:=MAXCOL+5;
ROW:=1;
'FOR' COLOR1:=1 'STEP' 1 'UNTIL' MAXCOL 'DO'
'FOR' COLOR2:=2 'STEP' 1 'UNTIL' MAXCOL,1 'DO'
'FOR' COLOR3:=3 'STEP' 1 'UNTIL' MAXCOL,1,2 'DO'
'FOR' COLOR4:=4 'STEP' 1 'UNTIL' MAXCOL,1,2,3 'DO'
'BEGIN'
'INTEGER' BLACK,WHITE;
HYP[1]:=COLOR1; HYP[2]:=COLOR2;
HYP[3]:=COLOR3; HYP[4]:=COLOR4;
'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:=1 'STEP' 1 'UNTIL' ROW-1 'DO'
'BEGIN'
BLACK:=0;
'FOR' COL:=1,2,3,4 'DO'
'BEGIN''BOOLEAN' TEMP;
TEMP:=OLDMAT[COL]:=NEWMAT[COL]:= HYP[COL]=BOARD[OLDROW,COL];
'IF' TEMP 'THEN' BLACK:=BLACK+1;
'END';
'IF' BLACK#BLACKS[OLDROW] 'THEN''GOTO' NOT VIABLE;
WHITE:=0;
'FOR' COL:=1,2,3 'DO'
'FOR' OLDCOL:=COL+1 'STEP' 1 'UNTIL' 4 'DO'
'BEGIN'
'IF' HYP[COL]=BOARD[OLDROW,OLDCOL] 'THEN'
'BEGIN''IF''NOT' (NEWMAT[COL] 'OR' OLDMAT[OLDCOL]) 'THEN'
'BEGIN' NEWMAT[COL]:=OLDMAT[OLDCOL]:='TRUE';
WHITE:=WHITE+1;
'END';
'END';
'IF' HYP[OLDCOL]=BOARD[OLDROW,COL] 'THEN'
'BEGIN''IF''NOT' (NEWMAT[OLDCOL] 'OR' OLDMAT[COL]) 'THEN'
'BEGIN' NEWMAT[OLDCOL]:=OLDMAT[COL]:='TRUE';
WHITE:=WHITE+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:=1 'STEP' 1 'UNTIL' 4 'DO' BOARD[ROW,COL]:=HYP[COL];
PRINTROW;
JUNK: TEXT(1,"*NHow many black pegs ? ");
BLACKS[ROW]:=READ(7);
'IF' BLACKS[ROW]=4 'THEN'
'BEGIN' TEXT(1,"Thanks for the game");
'GOTO' START;
'END' PROBLEM SOLVED
'ELSE''IF' BLACKS[ROW]=3 'THEN' WHITES[ROW]:=0
'ELSE'
'BEGIN'
'IF' BLACKS[ROW]<0 'OR' BLACKS[ROW]>4 'THEN'
'BEGIN' TEXT(1,"TWIT !!"); 'GOTO' JUNK;
'END';
TEXT(1,"How many white pegs ? ");
WHITES[ROW]:=READ(7);
'IF' WHITES[ROW]<0 'OR'
WHITES[ROW]+BLACKS[ROW]>4 'THEN'
'BEGIN' TEXT(1,"TWIT !!"); 'GOTO' JUNK;
'END';
'END';
ROW:=ROW+1;
'IF' ROW=10 'THEN'
'BEGIN'
TEXT(1,"*NWELL DONE, YOU WIN !!");
'GOTO' START;
'END';
NOT VIABLE:
'END' LOOK AT EACH POSSIBLE ROW;
TEXT(1,"*NTwit !!! you made a mistake");
'GOTO' START;
'END' OF MASTERMIND CODEBREAKER
'FINISH'