Манхэттен расстояние на регулярной сетке число ортогональных шагов нужно предпринять , чтобы достичь одну клетку от другой. Ортогональные шаги - это те, которые проходят через края ячеек сетки (в отличие от углов, которые дали бы нам расстояние Чебышева ).
Мы можем определить аналогичное расстояние на других сетках, например на треугольной сетке. Мы можем обратиться к отдельным ячейкам в сетке с помощью следующей схемы индексации, где каждая ячейка содержит 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
качестве пятого аргумента) к моему ответу.