算法在蜗牛二维数组中查找数字位置
Algorithm find number position in snail 2D array
我有一个二维数组正方形大小。
如:
(3x3) (4x4)
1 2 3 or 1 2 3 4
8 9 4 12 13 14 5
7 6 5 11 16 15 6
10 9 8 7
我正在尝试通过给出二维数组的 value
和 array size
和 Y, X position
来找到解决方案。
示例:
>> find_y_x_in_snail(3, 4)
1, 2
# in a 3x3 array, search value 4
return y=1 x=2
我必须在二维数组中创建蜗牛的唯一想法和 return 位置..不太好。
我找到了相反的算法here(第一个例子)
有什么想法吗?
你可以使用这个功能:
def find_y_x_in_snail(n, v):
r = 0
span = n
while v > span:
v -= span
r += 1
span -= r%2
d, m = divmod(r,4);
c = n-1-d
return [d, d+v, c, c-v][m], [d+v-1, c, c-v, d][m] # y, x
说明
r 是 "snake" 达到目标值所需的角数。
span 是蛇的当前直线段中值的数量,即它以 开头n,并在下一个拐角后减小,然后每隔一秒再下一个拐角。
d是蛇离矩阵最近边的距离,即"winding"层。
m 表示线段的 4 条边中的哪一条——包含目标值——位于:
0:上涨
1: 右
2:向下
3: 左边
根据m从一个包含4个表达式的列表中获取一个值,每个表达式都为相应的边量身定制:它定义了y坐标。 x.
应用了类似的方法(但表达式不同)
我有一个二维数组正方形大小。
如:
(3x3) (4x4)
1 2 3 or 1 2 3 4
8 9 4 12 13 14 5
7 6 5 11 16 15 6
10 9 8 7
我正在尝试通过给出二维数组的 value
和 array size
和 Y, X position
来找到解决方案。
示例:
>> find_y_x_in_snail(3, 4)
1, 2
# in a 3x3 array, search value 4
return y=1 x=2
我必须在二维数组中创建蜗牛的唯一想法和 return 位置..不太好。
我找到了相反的算法here(第一个例子)
有什么想法吗?
你可以使用这个功能:
def find_y_x_in_snail(n, v):
r = 0
span = n
while v > span:
v -= span
r += 1
span -= r%2
d, m = divmod(r,4);
c = n-1-d
return [d, d+v, c, c-v][m], [d+v-1, c, c-v, d][m] # y, x
说明
r 是 "snake" 达到目标值所需的角数。
span 是蛇的当前直线段中值的数量,即它以 开头n,并在下一个拐角后减小,然后每隔一秒再下一个拐角。
d是蛇离矩阵最近边的距离,即"winding"层。
m 表示线段的 4 条边中的哪一条——包含目标值——位于:
0:上涨
1: 右
2:向下
3: 左边
根据m从一个包含4个表达式的列表中获取一个值,每个表达式都为相应的边量身定制:它定义了y坐标。 x.
应用了类似的方法(但表达式不同)