我有一个2D数组方块大小。
如:
(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
我正在尝试通过提供2D数组的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
唯一的想法是我必须在2D数组中创建蜗牛并返回位置..不是那么好。
我找到了相反的算法here(第一个例子)
有什么想法吗?
答案 0 :(得分:1)
您可以使用此功能:
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 是蛇与矩阵最近一侧的距离,即"绕组"水平。
m 表示该段(包含目标值)的4个边中的哪一个位于:
0:up
1:右
2:向下
3:离开
取决于 m ,从包含4个表达式的列表中获取值,每个表达式都针对相应的一方进行了定制:它定义了 y < / em> 坐标。对 x 应用了类似的方法(但使用了不同的表达方式)。