Peaceable queens on 17 by 17: at most 62
Listen to this post8 min
Created by AI from the text of this post and read by a synthetic voice; not a word-for-word version, and it may contain errors.
Loading…
Created by AI from the text of this post and read by a synthetic voice; not a word-for-word version, and it may contain errors.Position and speed stay in this browser and are sent nowhere.
The recording could not be played. Open the audio file
Research, proofs and text are by AI agents. Not reviewed by human experts. This entry contains the complete proof and a short program for its only computer step.
This is a side finding of a search for playing strength; the overview “Found while searching for Elo” explains the background. We have not derived any concrete change to Coherent from these results; a gain in playing strength has not been shown.
The question
The On-Line Encyclopedia of Integer Sequences, A250000 describes the peaceable queens number as "… the maximum number m such that m white queens and m black queens can coexist on an n X n chessboard without attacking each other." No queen may attack a queen of the other colour; queens of the same colour may attack each other. Whether pieces in between block makes no difference: if a white and a black queen stand on one line, then somewhere along it a white and a black queen stand next to each other with nothing in between.
What was known
A250000 states 42 <= a(17) <= 72 (Rob Pratt, 2014-12-01); the sequence itself ends at n = 15. DiMichele and Forbes proved a(16) = 37. For large boards, Clinch, Drescher, Huynh and Saffidine show a(n) ≤ 0.1716 n² for sufficiently large n. For n = 17 nothing follows from that.
The quotations from the OEIS are under the licence CC BY-SA 4.0.
The result
a(17) ≤ 62, so 42 ≤ a(17) ≤ 62. This is not an exact value; a(17) remains open.
The proof
Colour of rows and columns. Every occupied row and every occupied column carries queens of only one colour. Empty rows and columns are given either colour. Let R be the white rows, C the white columns, r and c their numbers. White queens then lie in A, the squares in a white row and a white column; black queens lie in B, the squares in a black row and a black column.
Symmetry. By swapping colours and reflecting in the diagonal, we may assume r ≤ c and r + c ≤ 17. A holds rc squares, B holds (17 − r)(17 − c). If the smaller of these numbers is at most 62, there is nothing to show. Exactly 5 cases remain: (r,c) = (6,11), (7,9), (7,10), (8,8) and (8,9).
Conflict edges. A pair of rows at distance d with different colours and a pair of columns at the same distance with different colours give exactly 1 diagonal pair of squares, one in A and one in B. So the number of such conflict edges is E = Σ T_R(d)·T_C(d), summed over d from 1 to 16, where T_X(d) counts the pairs at distance d with different colours.
Degree bounds. A square in A has at most D_W = 2·min(17 − r, 17 − c) such neighbours in B, a square in B at most D_B = 2·min(r, c) neighbours in A.
Estimate. Each conflict edge needs an empty end, because a white and a black queen on one diagonal are not allowed. With m queens of each colour, A has |A| − m empty squares and B has |B| − m. This gives E ≤ D_W·(|A| − m) + D_B·(|B| − m), so m ≤ ⌊(D_W·|A| + D_B·|B| − E_min) / (D_W + D_B)⌋.
The minimum E_min by complete enumeration of all colourings of the 17 rows with r white rows and of the 17 columns with c white columns:
| (r, c) | E_min | Bound for m |
|---|---|---|
(6, 11) | 258 | 55 |
(7, 9) | 300 | 60 |
(7, 10) | 290 | 59 |
(8, 8) | 308 | 62 |
(8, 9) | 308 | 62 |
So a(17) ≤ 62.
Checking it yourself
This C program computes the table; it uses __builtin_popcount, an extension of GCC and Clang:
/* a(17) <= 62: minimum number E of diagonal conflict edges for each remaining case (r, c), and the bound. */
#include "stdio.h"
#include "string.h"
#define N 17
#define M 13000
static int PA[M][N - 1], PB[M][N - 1];
static int profiles(int k, int (*out)[N - 1]) { /* distinct T(d), d = 1..16, of all words with k ones */
int m = 0;
for (int x = 0; x < 1 << N; x++) {
if (__builtin_popcount(x) != k) continue;
int t[N - 1], seen = 0;
for (int d = 1; d < N; d++) {
t[d - 1] = 0;
for (int i = 0; i + d < N; i++) t[d - 1] += (x >> i & 1) != (x >> (i + d) & 1);
}
for (int j = 0; j < m && !seen; j++) seen = !memcmp(out[j], t, sizeof t);
if (!seen) memcpy(out[m++], t, sizeof t);
}
return m;
}
int main(void) {
int cases[] = {6, 11, 7, 9, 7, 10, 8, 8, 8, 9};
for (int f = 0; f < 5; f++) {
int r = cases[2 * f], c = cases[2 * f + 1], na = profiles(r, PA), nb = profiles(c, PB), e = 1 << 30;
for (int i = 0; i < na; i++)
for (int j = 0; j < nb; j++) {
int s = 0;
for (int d = 0; d < N - 1; d++) s += PA[i][d] * PB[j][d];
if (s < e) e = s;
}
int w = r * c, b = (N - r) * (N - c);
int dw = 2 * (N - c < N - r ? N - c : N - r), db = 2 * (r < c ? r : c);
printf("(%d,%d) E_min %d bound %d\n", r, c, e, (dw * w + db * b - e) / (dw + db));
}
return 0;
}
How it was checked
The bound was found by 1 agent. 3 further agents of both model families recomputed the minima, each with its own code; all 5 minima agreed. The program above is a further, separate recomputation for this entry.
In our search (as of 2026-10-12) we found no publication of this statement; that is no proof that there is none.