login
A342948
Squares visited by either knight when a white knight and a black knight are moving on a diagonally numbered board, always to the lowest available unvisited square; white moves first.
2
1, 8, 9, 6, 4, 2, 3, 12, 13, 16, 7, 24, 5, 19, 10, 15, 26, 34, 18, 14, 11, 21, 30, 43, 37, 20, 48, 25, 22, 17, 31, 39, 38, 29, 46, 23, 58, 32, 49, 42, 41, 35, 52, 45, 27, 53, 33, 28, 40, 54, 51, 63, 60, 73, 70, 84, 57, 50, 67, 59, 81, 47, 93, 56, 106, 69, 123
OFFSET
1,2
COMMENTS
Board is numbered as follows:
1 2 4 7 11 16 .
3 5 8 12 17 .
6 9 13 18 .
10 14 19 .
15 20 .
21 .
.
Both knights start on square 1, white moves to the lowest unvisited square (8), black then moves to the lowest unvisited square (9) and so on...
This sequence is finite, on the 583rd move or the white knight's 292nd step, square 406 is visited, after which black wins and the game is over.
PROG
(Python)
KM=[(2, 1), (1, 2), (-1, 2), (-2, 1), (-2, -1), (-1, -2), (1, -2), (2, -1)]
def idx(loc): i, j = loc; return (i+j-1)*(i+j-2)//2 + j
def next_move(loc, visited):
i, j = loc; moves = [(i+io, j+jo) for io, jo in KM if i+io>0 and j+jo>0]
available = [m for m in moves if m not in visited]
return min(available, default=None, key=lambda x: idx(x))
def aseq():
loc, s, turn, alst = [(1, 1), (1, 1)], {(1, 1)}, 0, [1]
m = next_move(loc[turn], s)
while m != None:
loc[turn], s, turn, alst = m, s|{m}, 1 - turn, alst + [idx(m)]
m = next_move(loc[turn], s)
return alst
A342948_lst = aseq() # Michael S. Branicky, Mar 30 2021
CROSSREFS
KEYWORD
nonn,fini
AUTHOR
Andrew Smith, Mar 30 2021
STATUS
approved