login

Year-end appeal: Please make a donation to the OEIS Foundation to support ongoing development and maintenance of the OEIS. We are now in our 61st year, we have over 378,000 sequences, and we’ve reached 11,000 citations (which often say “discovered thanks to the OEIS”).

A377700
Number of ways of placing n nonattacking rooks on a toroidal board of 2n^2 equilateral triangular spaces.
0
2, 4, 6, 48, 30, 1152, 266, 45824, 4050, 2736000, 75702, 233017344, 2060734
OFFSET
1,1
COMMENTS
The board is formed by identifying opposite edges of a 60°/120° rhombus, tiled by equilateral triangles with n triangles along each edge.
A rook move on the equilateral triangle tessellation is a move along a path through successively edge-adjacent faces, that turns alternately left and right at each face (starting with either left or right), so that the overall direction of movement remains approximately parallel to one set of triangle edges.
Also counts the number of 3 X n matrices such that each row is a permutation of {1, ..., n}, the first row is the identity permutation (1 .. n), and each column sums to either 0 or 1 (mod n).
When n = 2k+1, the rooks must be either all on white spaces or all on black spaces (using the obvious parity coloring) and the problem is equivalent to A006717(k) for each case. When n = 2k, there are k rooks on white spaces and k rooks on black spaces.
FORMULA
a(2k+1) = 2 * A006717(k).
EXAMPLE
For n = 4, the a(4) = 48 arrangements are generated from one solution by symmetries of the toroidal grid:
o---o---o---o---o
/ \ /X\ / \ / \ /
o---o---o---o---o
/ \X/ \ / \ / \ /
o---o---o---o---o
/ \ / \ / \ / \X/
o---o---o---o---o
/ \ / \ /X\ / \ /
o---o---o---o---o
PROG
(MiniZinc)
% minizinc -D 'N=6' -s --all-solutions a.mzn
include "globals.mzn";
include "alldifferent.mzn";
int: N;
array[1..N] of var 1..N: perm1;
array[1..N] of var 1..N: perm2;
constraint alldifferent(perm1);
constraint alldifferent(perm2);
constraint forall(i in 1..N)(perm1[i] + perm2[i] + i in {N, N+1, 2*N, 2*N+1, 3*N});
solve satisfy;
output [show(i) ++ " " | i in 1..N];
output [show(perm1[i]) ++ " " | i in 1..N];
output [show(perm2[i]) ++ " " | i in 1..N];
CROSSREFS
KEYWORD
nonn,more
AUTHOR
Hugh Robinson, Nov 04 2024
STATUS
approved