'BEGIN' 'COMMENT' FIND A SOLUTION FOR THE `N QUEEN' PROBLEM. (GOT THE ALGORITHM FROM A MODULA PROGRAM FROM MARTIN NEITZEL). ; 'INTEGER' N, MAXN; MAXN := 9; 'COMMENT' MAXIMUM SIZE; N := 2; 'COMMENT' CURRENT SIZE; TRY NEXT N: 'BEGIN' 'INTEGER' 'ARRAY' COLUMN [1 : N]; 'BOOLEAN' 'ARRAY' EMPCOL [1 : N]; 'BOOLEAN' 'ARRAY' EMPUP [-N+1 : N-1]; 'BOOLEAN' 'ARRAY' EMPDO [2 : 2*N]; 'INTEGER' I; 'PROCEDURE' PRINT; 'COMMENT' PRINT THE CURRENT SOLUTION IN A CHESSBOARD ALIKE PICTURE ; 'BEGIN' 'INTEGER' I, J; 'PROCEDURE' OUTFRAME; 'BEGIN' 'INTEGER' I; 'FOR' I := 1 'STEP' 1 'UNTIL' N 'DO' OUTSTRING (1, `+---'); OUTSTRING (1, `+\N') 'END'; OUTSTRING (1, `SEE:\N') ; 'FOR' J := 1 'STEP' 1 'UNTIL' N 'DO' 'BEGIN' OUTFRAME; OUTSTRING (1, `|'); 'FOR' I := 1 'STEP' 1 'UNTIL' N 'DO' 'BEGIN' 'IF' N + 1 - J = COLUMN [I] 'THEN' OUTSTRING (1, ` Q |') 'ELSE' OUTSTRING (1, ` |') 'END'; OUTSTRING (1, `\N') 'END'; OUTFRAME 'END'; 'PROCEDURE' SET (X); 'VALUE' X; 'INTEGER' X; 'BEGIN' 'INTEGER' Y; 'FOR' Y := 1 'STEP' 1 'UNTIL' N 'DO' 'BEGIN' 'IF' EMPCOL [ Y ] 'AND' EMPUP [ X-Y ] 'AND' EMPDO [ X+Y ] 'THEN' 'BEGIN' COLUMN [ Y ] := X ; EMPCOL [ Y ] := 'FALSE' ; EMPUP [ X-Y ] := 'FALSE' ; EMPDO [ X+Y ] := 'FALSE' ; 'IF' X = N 'THEN' 'GOTO' GOTONE 'ELSE' SET ( X + 1 ) ; EMPDO [ X+Y ] := 'TRUE' ; EMPUP [ X-Y ] := 'TRUE' ; EMPCOL [ Y ] := 'TRUE' ; COLUMN [ Y ] := 0 'END' 'END' 'END'; 'COMMENT' MAIN PROGRAM START ; OUTSTRING (1, `LOOKING ONTO A '); OUTINTEGER (1, N); OUTSTRING (1, ` X '); OUTINTEGER (1, N); OUTSTRING (1, ` CHESSBOARD...\N'); 'FOR' I := 1 'STEP' 1 'UNTIL' N 'DO' 'BEGIN' COLUMN [ I ] := 0 ; EMPCOL [ I ] := 'TRUE' 'END'; 'FOR' I := -N+1 'STEP' 1 'UNTIL' N-1 'DO' EMPUP [ I ] := 'TRUE' ; 'FOR' I := 2 'STEP' 1 'UNTIL' 2*N 'DO' EMPDO [ I ] := 'TRUE' ; SET ( 1 ) ; OUTSTRING (1, `NO SOLUTION.\N'); 'GOTO' CONTN; GOTONE: PRINT; CONTN: 'IF' N < MAXN 'THEN' 'BEGIN' N := N + 1; 'GOTO' TRY NEXT N 'END'; OUTSTRING (1, `DONE.\N') 'END' 'END'