|
|
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
(list;
graph;
refs;
listen;
history;
text;
internal format)
|
|
|
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.
|
|
LINKS
|
|
|
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
|
|
CROSSREFS
|
|
|
KEYWORD
|
nonn,fini
|
|
AUTHOR
|
|
|
STATUS
|
approved
|
|
|
|