A292670 Least number of symbols required to fill a grid of size n^2 X n^2 row by row in the greedy way such that in no row or column or n X n square any symbol occurs twice.
1, 6, 14, 26, 40, 53, 73, 114, 144, 161, 188, 210, 250, 279, 329, 482, 544, 577, 611, 656, 697, 752, 847, 906, 947, 973, 1049, 1113, 1210, 1284, 1425, 1986, 2112, 2177, 2242, 2326, 2408, 2473, 2632, 2748, 2818, 2886, 3004, 3125, 3334, 3390, 3539, 3661, 3806, 3870
Offset: 1
Keywords
Examples
For n = 2, the 4 X 4 grid is filled as follows: [1 2 3 4] [3 4 1 2] [2 5 6 3] [4 1 2 5], whence a(2) = 6.
Links
- Eric Weisstein's World of Mathematics, Moore Neighborhood.
Crossrefs
Programs
-
PARI
a(m,n=m^2,g=matrix(n,n))={my(ok(g,k,i,j,m)=if(m,ok(g[i,],k)&&ok(g[,j],k)&&ok(concat(Vec(g[max(1,i-m+1)..i,max(1,j-m+1)..min(#g,j+m-1)])),k),!setsearch(Set(g),k))); for(i=1,n,for(j=1,n,for(k=1,n^2,ok(g,k,i,j,m)&&(g[i,j]=k)&&break)));vecmax(g)} \\ without "vecmax" the program returns the full n^2 X n^2 board.
-
Python
def a(n): s, b = n*n, n # side length, block size m, S, N = 0, {1}, range(1, s+1) g = [[0 for j in range(s+b)] for i in range(s+b)] row, col = {i:set() for i in N}, {j:set() for j in N} offsets = [(i, j) for i in range(-b+1, 1) for j in range(-b+1, 1)] offsets += [(i, j) for i in range(-b+1, 0) for j in range(1, b)] for i in N: for j in N: rect = set(g[i+o[0]][j+o[1]] for o in offsets) e = min(S - row[i] - col[j] - rect) g[i][j] = e if e > m: m = e S.add(m+1) row[i].add(e) col[j].add(e) return m print([a(n) for n in range(1, 13)]) # Michael S. Branicky, Apr 13 2023
Extensions
a(9) and beyond from Michael S. Branicky, Apr 13 2023
Comments