All about flooble | fun stuff | Get a free chatterbox | Free JavaScript | Avatars
 perplexus dot info

 Queen and Bishop Query (Posted on 2022-05-24)
Place exactly 4 black Queens and precisely one black Bishop in a regular 8x8 chessboard in such a manner that it will NOT be possible to place the white King in any vacant square without being in check.

 See The Solution Submitted by K Sengupta Rating: 5.0000 (1 votes)

Comments: ( Back to comment list | You must be logged in to post comments.)
 The full program in one piece, and a variation. Comment 2 of 2 |
(In reply to computer solution by Charlie)

I had presented the program in pieces. The full program is below with the pieces in place.

That program assumes the queens are all in separate quadrants of the board. A variation of a section:

for q1r=1:4, for q1c=1:4
queen(1,1)=q1r; queen(1,2)=q1c;
for q2r=1:4, for q2c=1:4
queen(2,1)=q2r; queen(2,2)=q2c;
for q3r=5:8, for q3c=1:4
queen(3,1)=q3r; queen(3,2)=q3c;
for q4r=1:8, for q4c=5:8
queen(4,1)=q4r; queen(4,2)=q4c;

places two queens in one quadrant while the other two must still be in separate quadrants. It covers all such cases, but doesn't attempt to find all rotations and reflections, but that doesn't matter as such things are filtered out anyway.

This variation doesn't find any solutions, and the fewest locations unchecked by the queens was 3, rather than 2.

clearvars,clc

goodGrids={};
bestCt=999;
bestGrid=zeros(8);

for q1r=1:4, for q1c=1:4
queen(1,1)=q1r; queen(1,2)=q1c;
for q2r=1:4, for q2c=5:8
queen(2,1)=q2r; queen(2,2)=q2c;
for q3r=5:8, for q3c=1:4
queen(3,1)=q3r; queen(3,2)=q3c;
for q4r=5:8, for q4c=5:8
queen(4,1)=q4r; queen(4,2)=q4c;

grid=zeros(8); g0=grid;

for i=1:4
g0(queen(i,1),queen(i,2))=1;
diff=queen(i,2)-queen(i,1); diff2 = 9-queen(i,1)-queen(i,2);
grid=grid+(diag(repmat(1,length(grid)-abs(diff),1),diff));
grid=grid+flip(diag(repmat(1,length(grid)-abs(diff2),1),-diff2));
grid(queen(i,1),:)=grid(queen(i,1),:)+1;
grid(:,queen(i,2))=grid(:,queen(i,2))+1;
end
gct=grid==0;
ct0=sum(gct(:));
if ct0<bestCt
bestCt=ct0;
bestGrid=grid;
goodGrids={grid g0};
elseif ct0==bestCt
good=true; gridA=grid;
for i=1:5
for j=1:length(goodGrids)
if isequal(gridA,goodGrids{j})
good=false;
break
end
end
gridA=rot90(gridA);
end
gridA=flip(gridA);
for i=1:5
for j=1:length(goodGrids)
if isequal(gridA,goodGrids{j})
good=false;
break
end
end
gridA=rot90(gridA);
end
if good
goodGrids=[goodGrids  {grid g0}];
end
end
end
end
end
end
end
end
end
end
bestCt
length(goodGrids)/2
% goodGrids{:}
for i=1:2:length(goodGrids)
grid1=goodGrids{i}; grid2=goodGrids{i+1};
grid3=repmat("-",8);
grid3(find(grid2==1))="Q";
grid3(find(grid1==0))="b"
end

function [r,c]=rowcol(lin)
r=floor(lin/8-1)+1;
c=mod(lin/8-1,8)+1;
end

 Posted by Charlie on 2022-05-25 06:58:54

 Search: Search body:
Forums (0)