A274640 Counterclockwise square spiral constructed by greedy algorithm, so that each row, column, and diagonal contains distinct numbers.
1, 2, 3, 4, 2, 3, 4, 5, 6, 1, 4, 6, 2, 1, 6, 5, 3, 1, 5, 2, 6, 1, 2, 4, 5, 3, 7, 8, 5, 4, 9, 7, 8, 3, 10, 11, 4, 7, 8, 6, 3, 9, 5, 7, 8, 9, 10, 11, 12, 6, 8, 9, 11, 10, 12, 13, 7, 6, 10, 9, 12, 13, 14, 15, 8, 2, 9, 12, 7, 10, 11, 13, 14, 10, 9, 6, 13, 5, 3, 15, 16, 7, 1, 10, 13, 12, 14, 11, 15, 3, 8, 5, 1, 12, 11, 14, 7, 4, 2, 16, 9, 17, 1, 8, 11
Offset: 0
Examples
The spiral begins: . 9--16---2---4---7--14--11--12---1---5---8 | | 17 8--15--14--13--12---9--10---6---7 3 | | | | 1 2 4--11--10---3---8---7---9 13 15 | | | | | | 8 9 7 3---5---6---1---2 4 12 11 | | | | | | | | 11 12 8 1 2---4---3 6 5 10 14 | | | | | | | | | | 15 7 6 5 3 1---2 4 8 11 12 | | | | | | | | | 14 10 3 2 4---5---6---1 7 9 13 | | | | | | | 7 11 9 6---1---2---4---5---3 8 10 | | | | | 4 13 5---7---8---9--10--11--12---6 1 | | | 12 14--10---9---6--13---5---3--15--16---7 | 10--15---1--12--16---8--14--13--11--18--17 . The 8 spokes (A274924-A274931) begin: E: 1, 2, 4, 8, 11, 12, 16, 9, 19, 24, 22, ... NE: 1, 3, 2, 9, 7, 8, 12, 15, 13, 17, 20, ... N: 1, 4, 6, 3, 12, 14, 15, 18, 20, 26, 25, ... NW: 1, 2, 3, 4, 8, 9, 7, 11, 14, 10, 22, ... W: 1, 3, 5, 6, 7, 15, 10, 17, 13, 25, 14, ... SW: 1, 4, 6, 5, 14, 10, 11, 23, 16, 18, 21, ... S: 1, 5, 2, 9, 13, 8, 7, 11, 10, 17, 19, ... SE: 1, 6, 5, 12, 16, 17, 21, 24, 27, 13, 15, ...
Links
- Alois P. Heinz, Table of n, a(n) for n = 0..20000
- F. Michel Dekking, Jeffrey Shallit, and N. J. A. Sloane, Queens in exile: non-attacking queens on infinite chess boards, Electronic J. Combin., 27:1 (2020), #P1.52.
- Alois P. Heinz, Distribution of a(n) for n <= 4010000
- Kerry Mitchell, Color-coded version of spiral, (1): the colors represent the values, from black (small) to white (large) (jpg file, low resolution)
- Kerry Mitchell, Color-coded version of spiral, (1a): the colors represent the values, from black (small) to white (large) (tiff file, much higher resolution)
- Kerry Mitchell, Color-coded version of spiral, (2): values <= 100 are black and those > 100 are white.
- Zak Seidov, Distribution of a(n) for first 20001 terms
Crossrefs
Programs
-
Maple
# Maple program from Alois P. Heinz, Jul 12 2016: fx:= proc(n) option remember; `if`(n=1, 0, (k-> fx(n-1)+sin(k*Pi/2))(floor(sqrt(4*(n-2)+1)) mod 4)) end: fy:= proc(n) option remember; `if`(n=1, 0, (k-> fy(n-1)-cos(k*Pi/2))(floor(sqrt(4*(n-2)+1)) mod 4)) end: b:= proc() 0 end: a:= proc(n) local x,y,s,i,t,m; x, y:= fx(n+1), fy(n+1); if b(x, y) > 0 then b(x, y) else s:={}; for i do t:=b(x+i,y+i); if t>0 then s:=s union {t} else break fi od; for i do t:=b(x-i,y-i); if t>0 then s:=s union {t} else break fi od; for i do t:=b(x+i,y-i); if t>0 then s:=s union {t} else break fi od; for i do t:=b(x-i,y+i); if t>0 then s:=s union {t} else break fi od; for i do t:=b(x+i,y ); if t>0 then s:=s union {t} else break fi od; for i do t:=b(x-i,y ); if t>0 then s:=s union {t} else break fi od; for i do t:=b(x ,y+i); if t>0 then s:=s union {t} else break fi od; for i do t:=b(x ,y-i); if t>0 then s:=s union {t} else break fi od; for m while m in s do od; b(x,y):= m fi end: seq(a(n), n=0..1000);
-
Mathematica
fx[n_] := fx[n] = If[n == 1, 0, Function[k, fx[n-1] + Sin[k*Pi/2]][Mod[Floor[Sqrt[4*(n-2)+1]], 4]]]; fy[n_] := fy[n] = If[n == 1, 0, Function[k, fy[n-1] - Cos[k*Pi/2]][Mod[Floor[Sqrt[4*(n-2)+1]], 4]]]; Clear[b]; b[, ] = 0; a[n_] := Module[{x, y, s, i, t, m}, {x, y} = {fx[n+1], fy[n+1]}; If[b[x, y] > 0, b[x, y], s = {}; For[i=1, True, i++, t=b[x+i, y+i]; If[t>0, s=Union[s,{t}], Break[]]]; For[i=1, True, i++, t=b[x-i, y-i]; If[t>0, s=Union[s,{t}], Break[]]]; For[i=1, True, i++, t=b[x+i, y-i]; If[t>0, s=Union[s,{t}], Break[]]]; For[i=1, True, i++, t=b[x-i, y+i]; If[t>0, s=Union[s,{t}], Break[]]]; For[i=1, True, i++, t=b[x+i, y ]; If[t>0, s=Union[s,{t}], Break[]]]; For[i=1, True, i++, t=b[x-i, y ]; If[t>0, s=Union[s,{t}], Break[]]]; For[i=1, True, i++, t=b[x , y+i]; If[t>0, s=Union[s,{t}], Break[]]]; For[i=1, True, i++, t=b[x , y-i]; If[t>0, s=Union[s,{t}], Break[]]]; m = 1; While[MemberQ[s, m], m++]; b[x, y] = m]]; Table[a[n], {n, 0, 1000}] (* Jean-François Alcover, Nov 14 2016, after Alois P. Heinz *)
-
Python
class Lines: # manage lines in direction d = dx + dy*1j def _init_(self, d): self.lines={}; self.t = d.real/d.imag if d.imag else None def _call_(self, pos): # Return the line through pos in direction d index = pos.imag if self.t is None else pos.real - pos.imag*self.t if index not in self.lines: self.lines[index] = Values() return self.lines[index] class Values(set): # the set of used numbers on a given line def next(self, n): # return least k >= n not on this line return min(m+1 for m in self if m+1 >= n and m+1 not in self ) if n in self else n def A274640(): # generator of the sequence, see below for possible usage lines = [Lines(d) for d in (1, 1+1j, 1j, 1-1j)]; pos = 0 for side in range(9**9): for _ in range(side//2 + 1): n = 1; lines_here = [L(pos) for L in lines] while any(n < (n := L.next(n)) for L in lines_here): pass yield n; any(L.add(n) for L in lines_here); pos += 1j**side [a for a,A274640(),range(99))%5D%20%23%20_M.%20F.%20Hasler"> in zip(A274640(),range(99))] # _M. F. Hasler, Feb 01 2025
Extensions
Corrected and extended by Alois P. Heinz, Jul 12 2016
Comments