Odległość Manhattan na regularnej siatce jest liczba prostopadłych kroki trzeba podjąć, aby osiągnąć jedną komórkę z innego. Kroki ortogonalne to te, które przechodzą przez krawędzie komórek siatki (w przeciwieństwie do rogów, co dałoby nam odległość Czebyszewa ).
Możemy zdefiniować podobną odległość na innych siatkach, na przykład siatce trójkątnej. Możemy adresować poszczególne komórki w siatce za pomocą następującego schematu indeksowania, w którym każda komórka zawiera x,y
parę:
____________________________________...
/\ /\ /\ /\ /\
/ \ 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\ /
\/______\/______\/______\/______\/___...
/\ /\ /\ /\ /\
. . . . . . . . . .
. . . . . . . . . .
Teraz odległość Manhattanu na tej siatce jest znowu minimalną liczbą kroków wzdłuż krawędzi, aby przejść z jednej komórki do drugiej. Więc można przejść od 3,1
do 2,1
, 4,1
albo 3,2
, ale nie do jakiegokolwiek innego trójkąta, ponieważ te byłyby przekraczaniu punktów niż krawędzie.
Na przykład odległość od 2,1
do 5,2
wynosi 4
. Najkrótsza ścieżka zazwyczaj nie jest unikalna, ale jednym ze sposobów na pokonanie dystansu w 4 krokach jest:
2,1 --> 3,1 --> 3,2 --> 4,2 --> 5,2
Wyzwanie
Biorąc pod uwagę dwie pary współrzędnych i z powyższego schematu adresowania, zwróć odległość między nimi na Manhattanie.x1,y1
x2,y2
Możesz założyć, że wszystkie cztery wejścia są liczbami całkowitymi nieujemnymi, każde mniejsze niż 128. Możesz je uporządkować w dowolnej kolejności i dowolnie pogrupować (cztery oddzielne argumenty, lista czterech liczb całkowitych, dwie pary liczb całkowitych, macierz 2x2, ... .).
Możesz napisać program lub funkcję i użyć dowolnej ze standardowych metod odbierania danych wejściowych i dostarczania danych wyjściowych.
Możesz używać dowolnego języka programowania , ale pamiętaj, że te luki są domyślnie zabronione.
To jest golf golfowy , więc wygrywa najkrótsza ważna odpowiedź - mierzona w bajtach .
Przypadki testowe
Każdy przypadek testowy jest podany jako .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)
(wywołując metodę rozdzieloną c
z czterema argumentami i 0
jako piąty argument) do mojej odpowiedzi.