Peaceful chess queen armies: Difference between revisions

From Rosetta Code
Content added Content deleted
(→‎{{header|Python}}: Add simplified solution and separated html output version)
Line 223: Line 223:
•◦•B•◦•
•◦•B•◦•
◦W◦•◦WW</pre>
◦W◦•◦WW</pre>
</div>

===Python: HTML output===
Uses the solver function <code>place</code> from the above textual output case.
<lang python>from peaceful_queen_armies_simpler import place
from itertools import product, count

_bqueenh, _wqueenh = '&#x265b;', '<font color="green">&#x2655;</font>'

def hboard(black_white, n):
"HTML board generator"
if black_white is None:
blk, wht = set(), set()
else:
blk, wht = black_white
out = (f"<br><b>## {len(blk)} black and {len(wht)} white queens "
f"on a {n}-by-{n} board</b><br>\n")
out += '<table style="font-weight:bold">\n '
tbl = ''
for x, y in product(range(n), repeat=2):
if y == 0:
tbl += ' </tr>\n <tr valign="middle" align="center">\n'
xy = (x, y)
ch = ('<span style="color:red">?</span>' if xy in blk and xy in wht
else _bqueenh if xy in blk
else _wqueenh if xy in wht
else "")
bg = "" if (x + y)%2 else ' bgcolor="silver"'
tbl += f' <td style="width:14pt; height:14pt;"{bg}>{ch}</td>\n'
out += tbl[7:]
out += ' </tr>\n</table>\n<br>\n'
return out

if __name__ == '__main__':
n=2
html = ''
for n in range(2, 7):
print()
for m in count(1):
ans = place(m, n)
if ans[0]:
html += hboard(ans, n)
else:
html += (f"<b># Can't place {m}+ queen armies on a "
f"{n}-by-{n} board</b><br><br>\n\n" )
break
#
html += '<br>\n'
m, n = 6, 7
ans = place(m, n)
html += hboard(ans, n)
with open('peaceful_queen_armies.htm', 'w') as f:
f.write(html)</lang>

{{out}}

<div style="overflow:scroll; height:250px;">

<b># Can't place 1+ queen armies on a 2-by-2 board</b><br><br>

<br><b>## 1 black and 1 white queens on a 3-by-3 board</b><br>
<table style="font-weight:bold">
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
</tr>
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;">&#x265b;</td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
</tr>
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"><font color="green">&#x2655;</font></td>
</tr>
</table>
<br>
<b># Can't place 2+ queen armies on a 3-by-3 board</b><br><br>

<br><b>## 1 black and 1 white queens on a 4-by-4 board</b><br>
<table style="font-weight:bold">
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"><font color="green">&#x2655;</font></td>
<td style="width:14pt; height:14pt;"></td>
</tr>
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;">&#x265b;</td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
</tr>
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
</tr>
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
</tr>
</table>
<br>
<br><b>## 2 black and 2 white queens on a 4-by-4 board</b><br>
<table style="font-weight:bold">
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;">&#x265b;</td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
</tr>
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver">&#x265b;</td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
</tr>
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
</tr>
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;"><font color="green">&#x2655;</font></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"><font color="green">&#x2655;</font></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
</tr>
</table>
<br>
<b># Can't place 3+ queen armies on a 4-by-4 board</b><br><br>

<br><b>## 1 black and 1 white queens on a 5-by-5 board</b><br>
<table style="font-weight:bold">
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
</tr>
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;"><font color="green">&#x2655;</font></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
</tr>
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
</tr>
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;">&#x265b;</td>
</tr>
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
</tr>
</table>
<br>
<br><b>## 2 black and 2 white queens on a 5-by-5 board</b><br>
<table style="font-weight:bold">
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"><font color="green">&#x2655;</font></td>
</tr>
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;">&#x265b;</td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
</tr>
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
</tr>
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver">&#x265b;</td>
<td style="width:14pt; height:14pt;"></td>
</tr>
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"><font color="green">&#x2655;</font></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
</tr>
</table>
<br>
<br><b>## 3 black and 3 white queens on a 5-by-5 board</b><br>
<table style="font-weight:bold">
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"><font color="green">&#x2655;</font></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
</tr>
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"><font color="green">&#x2655;</font></td>
</tr>
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;" bgcolor="silver">&#x265b;</td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver">&#x265b;</td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
</tr>
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;">&#x265b;</td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
</tr>
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"><font color="green">&#x2655;</font></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
</tr>
</table>
<br>
<br><b>## 4 black and 4 white queens on a 5-by-5 board</b><br>
<table style="font-weight:bold">
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver">&#x265b;</td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver">&#x265b;</td>
</tr>
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;"><font color="green">&#x2655;</font></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
</tr>
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"><font color="green">&#x2655;</font></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"><font color="green">&#x2655;</font></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
</tr>
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;"><font color="green">&#x2655;</font></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
</tr>
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver">&#x265b;</td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver">&#x265b;</td>
</tr>
</table>
<br>
<b># Can't place 5+ queen armies on a 5-by-5 board</b><br><br>

<br><b>## 1 black and 1 white queens on a 6-by-6 board</b><br>
<table style="font-weight:bold">
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
</tr>
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;"><font color="green">&#x2655;</font></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
</tr>
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
</tr>
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;">&#x265b;</td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
</tr>
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
</tr>
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
</tr>
</table>
<br>
<br><b>## 2 black and 2 white queens on a 6-by-6 board</b><br>
<table style="font-weight:bold">
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
</tr>
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;">&#x265b;</td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
</tr>
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
</tr>
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver">&#x265b;</td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
</tr>
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
</tr>
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;"><font color="green">&#x2655;</font></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"><font color="green">&#x2655;</font></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
</tr>
</table>
<br>
<br><b>## 3 black and 3 white queens on a 6-by-6 board</b><br>
<table style="font-weight:bold">
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver">&#x265b;</td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
</tr>
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver">&#x265b;</td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
</tr>
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"><font color="green">&#x2655;</font></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"><font color="green">&#x2655;</font></td>
</tr>
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
</tr>
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;" bgcolor="silver"><font color="green">&#x2655;</font></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
</tr>
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;">&#x265b;</td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
</tr>
</table>
<br>
<br><b>## 4 black and 4 white queens on a 6-by-6 board</b><br>
<table style="font-weight:bold">
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;" bgcolor="silver"><font color="green">&#x2655;</font></td>
<td style="width:14pt; height:14pt;"><font color="green">&#x2655;</font></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"><font color="green">&#x2655;</font></td>
<td style="width:14pt; height:14pt;"></td>
</tr>
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"><font color="green">&#x2655;</font></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
</tr>
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;">&#x265b;</td>
</tr>
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;">&#x265b;</td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
</tr>
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;">&#x265b;</td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
</tr>
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver">&#x265b;</td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
</tr>
</table>
<br>
<br><b>## 5 black and 5 white queens on a 6-by-6 board</b><br>
<table style="font-weight:bold">
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"><font color="green">&#x2655;</font></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"><font color="green">&#x2655;</font></td>
<td style="width:14pt; height:14pt;"></td>
</tr>
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;">&#x265b;</td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
</tr>
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"><font color="green">&#x2655;</font></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"><font color="green">&#x2655;</font></td>
</tr>
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;">&#x265b;</td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
</tr>
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"><font color="green">&#x2655;</font></td>
</tr>
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;">&#x265b;</td>
<td style="width:14pt; height:14pt;" bgcolor="silver">&#x265b;</td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver">&#x265b;</td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
</tr>
</table>
<br>
<b># Can't place 6+ queen armies on a 6-by-6 board</b><br><br>

<br>
<br><b>## 6 black and 6 white queens on a 7-by-7 board</b><br>
<table style="font-weight:bold">
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver">&#x265b;</td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver">&#x265b;</td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
</tr>
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"><font color="green">&#x2655;</font></td>
</tr>
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"><font color="green">&#x2655;</font></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"><font color="green">&#x2655;</font></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"><font color="green">&#x2655;</font></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
</tr>
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"><font color="green">&#x2655;</font></td>
</tr>
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver">&#x265b;</td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver">&#x265b;</td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
</tr>
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"><font color="green">&#x2655;</font></td>
</tr>
<tr valign="middle" align="center">
<td style="width:14pt; height:14pt;" bgcolor="silver">&#x265b;</td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver">&#x265b;</td>
<td style="width:14pt; height:14pt;"></td>
<td style="width:14pt; height:14pt;" bgcolor="silver"></td>
</tr>
</table>
<br>

</div>
</div>

Revision as of 10:21, 27 March 2019

Peaceful chess queen armies is a draft programming task. It is not yet considered ready to be promoted as a complete task, for reasons that should be found in its talk page.

In chess, a queen attacks positions from where it is, in straight lines up-down and left-right as well as on both its diagonals. It attacks only pieces not of its own colour.


The goal of Peaceful chess queen armies is to arrange m black queens and m white queens on an n-by-n square grid, (the board), so that no queen attacks another of a different colour.

Detail
  1. Create a routine to represent two-colour queens on a 2-D board. (Alternating black/white background colours, Unicode chess pieces and other embellishments are not necessary, but may be used at your discretion).
  2. Create a routine to generate at least one solution to placing m equal numbers of black and white queens on an n square board.
  3. Display here results for the m=4, n=5 case.
Ref.

Python

Python: Textual output

<lang python>from itertools import combinations, product, count from functools import lru_cache, reduce


_bbullet, _wbullet = '\u2022\u25E6' _or = set.__or__

def place(m, n):

   "Place m black and white queens, peacefully, on an n-by-n board"
   board = set(product(range(n), repeat=2))  # (x, y) tuples
   placements = {frozenset(c) for c in combinations(board, m)}
   for blacks in placements:
       black_attacks = reduce(_or, 
                              (queen_attacks_from(pos, n) for pos in blacks), 
                              set())
       for whites in {frozenset(c)     # Never on blsck attacking squares
                      for c in combinations(board - black_attacks, m)}:
           if not black_attacks & whites:
               return blacks, whites
   return set(), set()

@lru_cache(maxsize=None) def queen_attacks_from(pos, n):

   x0, y0 = pos
   a = set([pos])    # Its position
   a.update((x, y0) for x in range(n))    # Its row
   a.update((x0, y) for y in range(n))    # Its column
   # Diagonals
   for x1 in range(n):
       # l-to-r diag
       y1 = y0 -x0 +x1
       if 0 <= y1 < n: 
           a.add((x1, y1))
       # r-to-l diag
       y1 = y0 +x0 -x1
       if 0 <= y1 < n: 
           a.add((x1, y1))
   return a

def pboard(black_white, n):

   "Print board"
   if black_white is None: 
       blk, wht = set(), set()
   else:
       blk, wht = black_white
   print(f"## {len(blk)} black and {len(wht)} white queens "
         f"on a {n}-by-{n} board:", end=)
   for x, y in product(range(n), repeat=2):
       if y == 0:
           print()
       xy = (x, y)
       ch = ('?' if xy in blk and xy in wht 
             else 'B' if xy in blk
             else 'W' if xy in wht
             else _bbullet if (x + y)%2 else _wbullet)
       print('%s' % ch, end=)
   print()

if __name__ == '__main__':

   n=2
   for n in range(2, 7):
       print()
       for m in count(1):
           ans = place(m, n)
           if ans[0]:
               pboard(ans, n)
           else:
               print (f"# Can't place {m}+ queens on a {n}-by-{n} board")
               break
   #
   print('\n')
   m, n = 5, 7
   ans = place(m, n)
   pboard(ans, n)</lang>
Output:
# Can't place 1+ queens on a 2-by-2 board

## 1 black and 1 white queens on a 3-by-3 board:
◦•◦
B◦•
◦•W
# Can't place 2+ queens on a 3-by-3 board

## 1 black and 1 white queens on a 4-by-4 board:
◦•W•
B◦•◦
◦•◦•
•◦•◦
## 2 black and 2 white queens on a 4-by-4 board:
◦B◦•
•B•◦
◦•◦•
W◦W◦
# Can't place 3+ queens on a 4-by-4 board

## 1 black and 1 white queens on a 5-by-5 board:
◦•◦•◦
W◦•◦•
◦•◦•◦
•◦•◦B
◦•◦•◦
## 2 black and 2 white queens on a 5-by-5 board:
◦•◦•W
•◦B◦•
◦•◦•◦
•◦•B•
◦W◦•◦
## 3 black and 3 white queens on a 5-by-5 board:
◦W◦•◦
•◦•◦W
B•B•◦
B◦•◦•
◦•◦W◦
## 4 black and 4 white queens on a 5-by-5 board:
◦•B•B
W◦•◦•
◦W◦W◦
W◦•◦•
◦•B•B
# Can't place 5+ queens on a 5-by-5 board

## 1 black and 1 white queens on a 6-by-6 board:
◦•◦•◦•
W◦•◦•◦
◦•◦•◦•
•◦•◦B◦
◦•◦•◦•
•◦•◦•◦
## 2 black and 2 white queens on a 6-by-6 board:
◦•◦•◦•
•◦B◦•◦
◦•◦•◦•
•◦•B•◦
◦•◦•◦•
W◦•◦W◦
## 3 black and 3 white queens on a 6-by-6 board:
◦•B•◦•
•B•◦•◦
◦•◦W◦W
•◦•◦•◦
W•◦•◦•
•◦•◦B◦
## 4 black and 4 white queens on a 6-by-6 board:
WW◦•W•
•W•◦•◦
◦•◦•◦B
•◦B◦•◦
◦•◦B◦•
•◦•B•◦
## 5 black and 5 white queens on a 6-by-6 board:
◦•W•W•
B◦•◦•◦
◦•W•◦W
B◦•◦•◦
◦•◦•◦W
BB•B•◦
# Can't place 6+ queens on a 6-by-6 board


## 5 black and 5 white queens on a 7-by-7 board:
◦•◦•B•◦
•W•◦•◦W
◦•◦•B•◦
B◦•◦•◦•
◦•B•◦•◦
•◦•B•◦•
◦W◦•◦WW

Python: HTML output

Uses the solver function place from the above textual output case. <lang python>from peaceful_queen_armies_simpler import place from itertools import product, count

_bqueenh, _wqueenh = '♛', ''

def hboard(black_white, n):

   "HTML board generator"
   if black_white is None: 
       blk, wht = set(), set()
   else:
       blk, wht = black_white
   out = (f"
## {len(blk)} black and {len(wht)} white queens " f"on a {n}-by-{n} board
\n")

out += '

\n ' tbl = for x, y in product(range(n), repeat=2): if y == 0: tbl += ' \n \n' xy = (x, y) ch = ('?' if xy in blk and xy in wht else _bqueenh if xy in blk else _wqueenh if xy in wht else "") bg = "" if (x + y)%2 else ' bgcolor="silver"' tbl += f' \n'
   out += tbl[7:]
out += ' \n
{ch}

\n
\n'

   return out

if __name__ == '__main__':

   n=2
   html = 
   for n in range(2, 7):
       print()
       for m in count(1):
           ans = place(m, n)
           if ans[0]:
               html += hboard(ans, n)
           else:
               html += (f"# Can't place {m}+ queen armies on a "
                        f"{n}-by-{n} board

\n\n" ) break # html += '
\n' m, n = 6, 7 ans = place(m, n) html += hboard(ans, n) with open('peaceful_queen_armies.htm', 'w') as f: f.write(html)</lang>
Output:

# Can't place 1+ queen armies on a 2-by-2 board


## 1 black and 1 white queens on a 3-by-3 board


# Can't place 2+ queen armies on a 3-by-3 board


## 1 black and 1 white queens on a 4-by-4 board



## 2 black and 2 white queens on a 4-by-4 board


# Can't place 3+ queen armies on a 4-by-4 board


## 1 black and 1 white queens on a 5-by-5 board



## 2 black and 2 white queens on a 5-by-5 board



## 3 black and 3 white queens on a 5-by-5 board



## 4 black and 4 white queens on a 5-by-5 board


# Can't place 5+ queen armies on a 5-by-5 board


## 1 black and 1 white queens on a 6-by-6 board



## 2 black and 2 white queens on a 6-by-6 board



## 3 black and 3 white queens on a 6-by-6 board



## 4 black and 4 white queens on a 6-by-6 board



## 5 black and 5 white queens on a 6-by-6 board


# Can't place 6+ queen armies on a 6-by-6 board



## 6 black and 6 white queens on a 7-by-7 board