login

Year-end appeal: Please make a donation to the OEIS Foundation to support ongoing development and maintenance of the OEIS. We are now in our 61st year, we have over 378,000 sequences, and we’ve reached 11,000 citations (which often say “discovered thanks to the OEIS”).

A324682
Starting at n, a(n) is the sign of the closest nonzero point to zero visited for which the next move is a step away from zero, according to the following rules. On the k-th step (k=1,2,3,...) move a distance of k in the direction of zero. If the number landed on has been landed on before, move a distance of k away. In the case of a tie, or if the set of points is empty, we set a(n)=0.
0
0, 0, -1, 0, -1, 1, 0, -1, -1, 1, 0, -1, -1, 1, -1, 0, 1, 0, -1, 1, 1, 0, -1, -1, 1, 0, -1, 1, 0, -1, -1, -1, -1, 1, 1, -1, 0, -1, -1, -1, -1, -1, -1, 1, 1, 0, -1, -1, 1, -1, 1, 1, -1, -1, 1, 0, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 0, -1, 1, 0, -1, -1, -1
OFFSET
0,1
EXAMPLE
For n=9, the points visited are 9, 8, 6, 3, -1, 4, -2, 5, -3, -12, -22, -11, 1, 14, 0. The three times moves are made away from zero happen at -3, -12 and 1. The closest of these is to zero is 1 and thus a(9) = sgn(1) = 1.
PROG
(Python)
#Sequences A324660-A324692 generated by manipulating this trip function
#spots - positions in order with possible repetition
#flee - positions from which we move away from zero with possible repetition
#stuck - positions from which we move to a spot already visited with possible repetition
def trip(n):
stucklist = list()
spotsvisited = [n]
leavingspots = list()
turn = 0
forbidden = {n}
while n != 0:
turn += 1
sign = n // abs(n)
st = sign * turn
if n - st not in forbidden:
n = n - st
else:
leavingspots.append(n)
if n + st in forbidden:
stucklist.append(n)
n = n + st
spotsvisited.append(n)
forbidden.add(n)
return {'stuck':stucklist, 'spots':spotsvisited,
'turns':turn, 'flee':leavingspots}
def sgn(x):
if x:
return x//abs(x)
return 0
def maxorzero(x):
if x:
return max(x)
return 0
def minorzero(x):
if x:
return min(x)
return 0
#Actual sequence
def a(n):
d = trip(n)
neg=maxorzero([i for i in d['flee'] if i < 0])
pos=minorzero([i for i in d['flee'] if i > 0])
if neg and not pos:
return -1
return -sgn(neg+pos)
CROSSREFS
KEYWORD
sign
AUTHOR
David Nacin, Mar 10 2019
STATUS
approved