Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program FPProgT15;
- {$mode objfpc}{$H+}
- uses
- {$IFDEF UNIX}{$IFDEF UseCThreads}
- cthreads,
- {$ENDIF}{$ENDIF}
- Classes,
- SysUtils;
- type
- QueenArray = Array[1..8] of Integer;
- var
- MainQueens: QueenArray;
- i: integer;
- {$R *.res}
- function isLegit(Queens: QueenArray): Boolean;
- var
- i, j: integer;
- final: boolean;
- begin
- final := true;
- for i := 1 to 8 do
- begin
- if final = true then
- begin
- for j := i - 1 downto 1 do
- begin
- if Queens[i] = Queens[j] then final := false
- else if Queens[j] = Queens[i] - (i-j) then final := false
- else if Queens[j] = Queens[i] + (i-j) then final := false;
- end;
- end;
- if final = true then isLegit := true
- else isLegit := false;
- end;
- end;
- procedure quit;
- begin
- writeln;
- writeln;
- writeln('Press <Enter> To Quit');
- readln;
- end;
- procedure DrawBoard(Queens: QueenArray);
- var
- i, j: integer;
- isWhite: Boolean;
- OutStr: String;
- begin
- for i := 8 downto 1 do
- begin
- OutStr := '';
- for j := 1 to 8 do
- begin
- if ((i + j) mod 2) = 0 then isWhite := false
- else isWhite := true;
- if Queens[j] = i then
- begin
- if isWhite = true then OutStr := OutStr + ' W Q'
- else OutStr := OutStr + ' B Q';
- end
- else
- begin
- if isWhite = true then OutStr := OutStr + ' WNQ'
- else OutStr := OutStr + ' BNQ'
- end;
- end;
- Writeln(OutStr);
- end;
- Writeln;
- end;
- procedure AdvanceQueen(Index: Integer);
- var
- i: integer;
- begin
- if MainQueens[Index] < 8 then MainQueens[Index] := MainQueens[Index] + 1 //if there is room to progress then progress
- else
- begin
- index := index + 1;
- for i := Index - 1 downto 1 do
- begin
- MainQueens[i] := 1
- end;
- if Index < 9 then AdvanceQueen(Index);
- end;
- end;
- begin
- for i := 1 to 8 do MainQueens[i] := 1; //initialise all the queens
- for i := 1 to 16777216 do
- begin
- AdvanceQueen(1);
- if isLegit(MainQueens) = true then
- begin
- DrawBoard(MainQueens);
- readln;
- end;
- end;
- quit;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement