规则网格上的曼哈顿距离是一个人需要一个正交的步数才能到达另一个单元。正交步是穿过网格单元边缘的步(相对于拐角,这会给我们切比雪夫距离)。
我们可以在其他网格(例如三角形网格)上定义相似的距离。我们可以使用以下索引方案寻址网格中的各个单元,其中每个单元包含一x,y
对:
____________________________________...
/\ /\ /\ /\ /\
/ \ 1,0/ \ 3,0/ \ 5,0/ \ 7,0/ \
/ 0,0\ / 2,0\ / 4,0\ / 6,0\ / 8,0\
/______\/______\/______\/______\/______\...
\ /\ /\ /\ /\ /
\ 0,1/ \ 2,1/ \ 4,1/ \ 6,1/ \ 8,1/
\ / 1,1\ / 3,1\ / 5,1\ / 7,1\ /
\/______\/______\/______\/______\/___...
/\ /\ /\ /\ /\
/ \ 1,2/ \ 3,2/ \ 5,2/ \ 7,2/ \
/ 0,2\ / 2,2\ / 4,2\ / 6,2\ / 8,2\
/______\/______\/______\/______\/______\...
\ /\ /\ /\ /\ /
\ 0,3/ \ 2,3/ \ 4,3/ \ 6,3/ \ 8,3/
\ / 1,3\ / 3,3\ / 5,3\ / 7,3\ /
\/______\/______\/______\/______\/___...
/\ /\ /\ /\ /\
. . . . . . . . . .
. . . . . . . . . .
现在,此网格上的曼哈顿距离再次是从一个单元格到另一个单元格的最小边跨步数。因此,您可以从3,1
移至2,1
,4,1
或3,2
,但不能移至任何其他三角形,因为那将是交叉点而不是边缘。
例如,从远处2,1
来5,2
的4
。最短的路径通常不是唯一的,但是以4个步骤进行距离的一种方法是:
2,1 --> 3,1 --> 3,2 --> 4,2 --> 5,2
挑战
给定两个坐标对,并根据上述寻址方案,返回它们之间的曼哈顿距离。x1,y1
x2,y2
您可以假定所有四个输入都是非负整数,每个输入均小于128。您可以按任何顺序将它们取任意值并任意分组(四个单独的参数,四个整数的列表,两对整数,一个2x2矩阵,.. )。
您可以编写程序或函数,并使用接收输入和提供输出的任何标准方法。
您可以使用任何编程语言,但是请注意,默认情况下,这些漏洞是禁止的。
这是代码高尔夫球,因此以字节为单位的最短有效答案为准。
测试用例
每个测试用例均以给出。x1,y1 x2,y2 => result
1,2 1,2 => 0
0,1 1,1 => 1
1,0 1,1 => 3
2,1 5,2 => 4
0,0 0,127 => 253
0,0 127,0 => 127
0,0 127,127 => 254
0,127 127,0 => 254
0,127 127,127 => 127
127,0 127,127 => 255
75,7 69,2 => 11
47,58 36,79 => 42
77,9 111,23 => 48
123,100 111,60 => 80
120,23 55,41 => 83
28,20 91,68 => 111
85,107 69,46 => 123
16,25 100,100 => 159
62,85 22,5 => 160
92,26 59,113 => 174
62,22 35,125 => 206
(a,b,x,y)->c(a,b,x,y,0)
(c
使用四个参数并0
作为第五个参数调用分离的方法)。