login
The OEIS is supported by the many generous donors to the OEIS Foundation.

 

Logo
Hints
(Greetings from The On-Line Encyclopedia of Integer Sequences!)
A352731 On a diagonally numbered square grid, with labels starting at 1, this is the number of the last cell that a (1,n) leaper reaches before getting trapped when moving to the lowest available unvisited square, or -1 if it never gets trapped. 2

%I #15 Mar 29 2023 09:20:24

%S -1,1378,-1,595,66,36,153,758,1185,78,1732,171,2510,2094,1407,253,630,

%T 210,780,2385,1326,300,1225,990,2800,406,3267,4333,4124,528,4309,741,

%U 5951,666,2701,903,30418,820,3321,1081,4186,990,8299,2775,4560,1176,4753,39951,5778

%N On a diagonally numbered square grid, with labels starting at 1, this is the number of the last cell that a (1,n) leaper reaches before getting trapped when moving to the lowest available unvisited square, or -1 if it never gets trapped.

%C A (1,2) leaper is a chess knight. (1,1) and (1,3) leapers both never get trapped. This is understandable for the (1,1) leaper but not so much for the (1,3) which does get trapped on the spirally numbered board (see A323471). Once the (1,3) leaper reaches 39 it then performs the same set of 4 moves repeatedly, meaning that it never gets trapped.

%o (Python)

%o # reformatted by _R. J. Mathar_, 2023-03-29

%o class A352731():

%o def __init__(self,n) :

%o self.n = n

%o self.KM=[(n, 1), (1, n), (-1, n), (-n, 1), (-n, -1), (-1, -n), (1, -n), (n, -1)]

%o @staticmethod

%o def _idx(loc):

%o i, j = loc

%o return (i+j-1)*(i+j-2)//2 + j

%o def _next_move(self,loc, visited):

%o i, j = loc

%o moves = [(i+io, j+jo) for io, jo in self.KM if i+io>0 and j+jo>0]

%o available = [m for m in moves if m not in visited]

%o return min(available, default=None, key=lambda x: A352731._idx(x))

%o def _aseq(self):

%o locs = [[], []]

%o loc, s, turn, alst = [(1, 1), (1, 1)], {(1, 1)}, 0, [1]

%o m = self._next_move(loc[turn], s)

%o while m != None:

%o loc[turn], s, turn, alst = m, s|{m}, 0 , alst + [A352731._idx(m)]

%o locs[turn] += [loc[turn]]

%o m = self._next_move(loc[turn], s)

%o if len(s)%100000 == 0:

%o print(self.n,'{steps} moves in'.format(steps = len(s)))

%o return alst

%o def at(self,n) :

%o if n == 1 or n == 3:

%o return -1

%o else:

%o return self._aseq()[-1]

%o for n in range(1,40):

%o a352731 = A352731(n)

%o print(a352731.at(n))

%Y Cf. A323469, A323471, A352730.

%K sign

%O 1,2

%A _Andrew Smith_, Mar 30 2022

Lookup | Welcome | Wiki | Register | Music | Plot 2 | Demos | Index | Browse | More | WebCam
Contribute new seq. or comment | Format | Style Sheet | Transforms | Superseeker | Recents
The OEIS Community | Maintained by The OEIS Foundation Inc.

License Agreements, Terms of Use, Privacy Policy. .

Last modified April 18 06:24 EDT 2024. Contains 371769 sequences. (Running on oeis4.)