login
A274640
Counterclockwise square spiral constructed by greedy algorithm, so that each row, column, and diagonal contains distinct numbers.
52
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,2
COMMENTS
Presumably every row, column, and diagonal is a permutation of the natural numbers, but is there a proof? - N. J. A. Sloane, Jul 10 2016
The n-th cell in the spiral has coordinates x = A174344(n+1), y = A274923(n+1). - N. J. A. Sloane, Jul 11 2016
From Robert G. Wilson v, Dec 25 2016: (Start) [Memo: all these numbers need to decreased by 1, since the offset here is 0. See A324481. - N. J. A. Sloane, Jul 23 2017. Furthermore, the numbers don't seem correct, even after subtracting 1. - N. J. A. Sloane, Jul 04 2019]
Index of first appearance of k = 1,2,3,...: 1, 2, 3, 7, 8, 15, 17, 25, 35, 41, 47, 61, 62, 89, 98, 99, 121, 129, 130, 143, 197, 208, 225, 239, 271, ..., .
1 appears at: 1, 4, 12, 19, 22, 33, 42, 68, 79, 120, 179, 194, 302, 311, 445, 489, 511, 558, 630, 708, 847, 877, 907, ..., .
2 appears at: 2, 5, 9, 16, 48, 52, 70, 73, 88, 95, 110, 146, 280, 291, 309, 327, 488, 605, 656, 681, 735, 778, 1000, ..., .
3 appears at: 3, 6, 10, 23, 29, 36, 56, 76, 97, 105, 153, 168, 184, 252, 338, 437, 457, 670, 818, 906, 953, 967, ..., . (End).
EXAMPLE
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, ...
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 *)
PROG
(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, _ in zip(A274640(), range(99))] # M. F. Hasler, Feb 01 2025
CROSSREFS
Cf. A274641 (the same spiral, but starting with 0 not 1), A174344, A274923.
The 8 spokes are A274924-A274931.
The East-West axis is A275877 (see also A324680), the North-South axis is A276036.
Positions of 1's and 2's give A273059 and A275116.
In the same spirit as the infinite Sudoku array A269526.
Cf. A324481 (position of first n).
Cf. A274821 (the same construction on a hexagonal tiling).
Sequence in context: A173524 A049865 A070771 * A245341 A215088 A330786
KEYWORD
nonn,nice
AUTHOR
Zak Seidov and Kerry Mitchell, Jun 30 2016
EXTENSIONS
Corrected and extended by Alois P. Heinz, Jul 12 2016
STATUS
approved