Original entry on oeis.org
961, 962, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1377, 1443, 1444, 1445, 1446, 1447, 1509, 1510, 1511, 1512, 1513, 1514, 1515
Offset: 1
A341195
Squares visited by knight moves on a diagonally back and forth numbered board in two quadrants and moving to the lowest available unvisited square at every step.
Original entry on oeis.org
1, 11, 7, 2, 6, 12, 9, 3, 5, 14, 8, 4, 18, 33, 21, 29, 24, 26, 47, 10, 23, 13, 19, 16, 38, 34, 17, 15, 20, 30, 42, 56, 45, 28, 22, 31, 41, 58, 44, 32, 40, 35, 37, 62, 66, 36, 39, 60, 68, 63, 65, 98, 102, 64, 67, 61, 70, 93, 43, 55, 46, 27, 49, 52, 25, 51, 78
Offset: 1
-
(* Version 12.0 or higher needed *)
ClearAll[ShowRoute,MakeMove,FindSequence]
knightjump=Select[Tuples[Range[-2,2],2],Norm[#]==Sqrt[5]&];
ShowRoute[output_Association]:=Module[{colors},colors=(ColorData["Rainbow"]/@Subdivide[Length[output["Coordinates"]]-1.0]);
Graphics[{Line[output["Coordinates"],VertexColors->colors],Disk[Last@output["Coordinates"],0.2],Style[Disk[Last[output["Coordinates"]]+#,0.2]&/@knightjump,Purple]}]]
MakeMove[spiral_Association,visited_List]:=Module[{poss,hj},poss=Table[Last[Last[visited]]+hj,{hj,knightjump}];
poss=DeleteMissing[{spiral[#],#}&/@poss,1,\[Infinity]];
poss=Select[poss,FreeQ[visited[[All,2]],Last[#]]&];
If[Length[poss]>0,First[TakeSmallestBy[poss,First,1]],Missing[]]]
FindSequence[start_:{0,0},grid_]:=Module[{positions,j,next},positions={{grid[start],start}};
PrintTemporary[Dynamic[j]];
Do[next=MakeMove[grid,positions];
If[next=!=Missing[],AppendTo[positions,next],Break[];],{j,\[Infinity]}];
<|"Coordinates"->positions[[All,2]],"Indices"->positions[[All,1]]|>]
grid=ResourceFunction["LatticePointsArrangement"]["DiagonalZigZagEastQ34",20000];
grid=Association[MapIndexed[#1->#2[[1]]&,grid]];
ShowRoute[fs=FindSequence[{0,0},grid]]
fs
fs["Indices"]
ListPlot[fs["Indices"]]
A357046
Squares visited by a knight moving on a board covered with horizontal dominoes [m|m], m = 0, 1, 2, ... in a diamond-shaped spiral, when the knight always jumps to the unvisited square with the least number on the corresponding domino.
Original entry on oeis.org
0, 11, 14, 1, 4, 13, 10, 3, 18, 7, 2, 5, 22, 9, 28, 31, 60, 15, 32, 29, 52, 25, 8, 27, 12, 53, 26, 23, 6, 17, 34, 59, 30, 87, 126, 51, 24, 45, 20, 39, 16, 33, 58, 55, 86, 125, 50, 47, 76, 21, 40, 67, 36, 61, 94, 57, 54, 85, 176, 129, 56, 93, 138, 187, 92, 137, 96, 35, 38, 19
Offset: 0
The knight hops from the left 0 (= the origin) on the right 1, then on the left 2, then on the right 0, then on the left 3, then on the right 2, etc.
The list of these labels would be 0, 1, 2, 0, 3, 2, 8, 3, 4, 5, 1, 4, 6, 7, 9, 11, 12, 14, 11, 10, 24, 22, 7, 8, 10, 9, 23, 6, 5, 15, 13, 12, 27, 26, 48, 23, ...
As explained in comments, the terms a(n) correspond to the (unique) "square spiral numbers" of these locations (cf. A274641 or A174344 (upside down) or A316328).
- Eric Angelini, Spirals for Scott, Blog entry, Oct. 19, 2022.
- Eric Angelini, Spirals for Scott, Blog entry, Oct. 19, 2022 [Local copy, with permission].
- M. F. Hasler, Plot of the knight's tour A357046, Oct 20 2022.
-
/* function domino([x,y]) gives the label m on the domino at (x,y); it uses the map DOM to store this label with key x + i*y. */
DOM=Map(); {domino(x)=while(!mapisdefined(DOM, x[1]+I*x[2], &x), my(M=#DOM\2, side=sqrtint(M*4-!!M), pos=sqrtint(M)*I^(side-1)+side\/2%2*I, dir=(1+I)*I^side); for(m=M, M+side\2, mapput(DOM, pos, m); mapput(DOM, pos+1, m); pos+=dir)); x}
{coords(n, m=sqrtint(n), k=m\/2)=if(m<=n-=4*k^2, [n-3*k, -k], n>=0, [-k, k-n], n>=-m, [-k-n, k], [k, 3*k+n])}
{local(U=[]/* used squares */, K=vector(8, i, [(-1)^(i\2)<<(i>4), (-1)^i<<(i<5)])/* knight moves */, pos(x, y)=if(y>=abs(x), 4*y^2-y-x, -x>=abs(y), 4*x^2-x-y, -y>=abs(x), (4*y-3)*y+x, (4*x-3)*x+y), t(x, p=pos(x[1], x[2]))=if(p<=U[1]||setsearch(U, p), oo, [domino(x), p]), nxt(p, x=coords(p))=vecsort(apply(K->t(x+K), K))[1][2]); my(A=List(0)/*list of positions*/); for(n=1, oo, U=setunion(U, [A[n]]); while(#U>1&&U[2]==U[1]+1, U=U[^1]); iferr(listput(A, nxt(A[n])), E, break)); print("Index of last term: ", #A-1); A357046(n)=A[n+1];} \\ same code as A326924 except for norml2 => domino
/* to get the sequence of labels m (cf.example): */
[domino(coords(A357046(n))) | n <- [0..99]]
A327602
A chess knight starts at 1 on an extended multiplication table and moves to the next perfect power such that 1) the number of jumps is minimized and 2) the sum of the intermediate numbers is minimized. In case of a tie, choose the lexicographically earliest path.
Original entry on oeis.org
1, 6, 15, 4, 12, 8, 12, 4, 9, 10, 16, 18, 25, 28, 27, 14, 32, 18, 16, 36, 21, 30, 49, 54, 64, 70, 81, 88, 100, 108, 121, 108, 91, 90, 85, 76, 63, 92, 125, 78, 56, 90, 128, 102, 144, 102, 64, 90, 112, 130, 144, 154, 160, 162, 160, 154, 169, 180, 196
Offset: 1
Between 4 and 8, the shortest route is through 12 (2*6); it takes only two steps:
.
1 2 3 4 5 6 7 8
+------+------+------+------+------+------+------+------+
| | | | | | | | |
1 | 1 | 2 | 3 | *4* | 5 | 6 | 7 | .*8* |
| | | | |. | | . | |
+------+------+------+------+---.--+------+-.----+------+
| | | | | . .| | |
2 | 2 | 4 | 6 | 8 | 10 | *12* | 14 | 16 |
| | | | | | | | |
+------+------+------+------+------+------+------+------+
| | | | | | | | |
3 | 3 | 6 | 9 | 12 | 15 | 18 | 21 | 24 |
| | | | | | | | |
+------+------+------+------+------+------+------+------+
| | | | | | | | |
4 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | 32 |
| | | | | | | | |
+------+------+------+------+------+------+------+------+
.
Between 32 and 36, there are several routes that take only three jumps. We choose 32,18,16,36 because the sum of intermediate numbers is the least.
Comments