在循环顺序中找到最接近数字的路径

Find closest path to number in a cycling order

我正在尝试找到最接近可以按循环顺序排列的数字的路径,例如:

在前 1 或 2 个例子之后,这可能已经很清楚了。

我想在代码中实现类似的东西,我可以用几个 if 等轻松地做到这一点,但我很确定必须有更好更简单的方法来使用数学来确定最近的路径,而不是如果有人可以帮助解决这个问题,那将非常有用,

使用 mod 元算法,您可以定义一个函数来计算前向距离,另一个函数来计算后向距离,第三个函数在两者之间做出决定。这是一个 python 解决方案,应该可以轻松翻译成其他语言(尽管不同的语言处理 mod 运算符处理负数的方式,因此可能需要一些注意):

def forward(i,j,n):
    return (j-i) % n

def backwards(i,j,n):
    return (i-j) % n

def best_direction(i,j,n):
    f = forward(i,j,n)
    b = backwards(i,j,n)
    if f < b:
        return 'forward'
    elif b < f:
        return 'backwards'
    else:
        return 'either'

您的测试用例(运行 在 Python shell 中):

>>> best_direction(1,2,5)
'forward'
>>> best_direction(3,0,5)
'forward'
>>> best_direction(2,1,5)
'backwards'

另一个测试用例,显示平局的可能性:

>>> best_direction(3,0,6)
'either'

显然,如果需要,您可以将两个 1 行函数内联到 best_direction 的定义中,将其简化为单个函数定义。