Die Manhattan-Entfernung in einem regelmäßigen Raster ist die Anzahl der orthogonalen Schritte, die erforderlich sind, um eine Zelle von einer anderen zu erreichen. Orthogonale Schritte sind diejenigen, die durch die Kanten der Gitterzellen verlaufen (im Gegensatz zu den Ecken, die uns den Chebyshev-Abstand geben würden ).
Wir können einen ähnlichen Abstand für andere Gitter definieren, zum Beispiel für das Dreiecksgitter. Wir können die einzelnen Zellen im Raster mit dem folgenden Indizierungsschema ansprechen, wobei jede Zelle ein x,y
Paar enthält :
____________________________________...
/\ /\ /\ /\ /\
/ \ 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\ /
\/______\/______\/______\/______\/___...
/\ /\ /\ /\ /\
. . . . . . . . . .
. . . . . . . . . .
Nun ist die Manhattan-Distanz in diesem Raster wieder die minimale Anzahl von Schritten über Kanten, um von einer Zelle zur anderen zu gelangen. So können Sie aus bewegen 3,1
zu 2,1
, 4,1
oder 3,2
, aber nicht auf anderes Dreieck, da diese Punkte überqueren würde , statt Kanten.
Zum Beispiel ist die Entfernung von 2,1
zu 5,2
ist 4
. Der kürzeste Weg ist im Allgemeinen nicht eindeutig, aber eine Möglichkeit, die Entfernung in 4 Schritten zu ermitteln, ist:
2,1 --> 3,1 --> 3,2 --> 4,2 --> 5,2
Die Herausforderung
Geben Sie bei zwei Koordinatenpaaren und nach dem obigen Adressierungsschema den Manhattan-Abstand zwischen ihnen zurück.x1,y1
x2,y2
Sie können davon ausgehen, dass alle vier Eingaben nicht negative Ganzzahlen mit jeweils weniger als 128 sind. Sie können diese in beliebiger Reihenfolge und willkürlich gruppieren (vier separate Argumente, eine Liste mit vier Ganzzahlen, zwei Paare von Ganzzahlen, eine 2x2-Matrix, ...). .).
Sie können ein Programm oder eine Funktion schreiben und eine der Standardmethoden zum Empfangen von Eingaben und zum Bereitstellen von Ausgaben verwenden.
Sie können jede Programmiersprache verwenden , beachten Sie jedoch, dass diese Lücken standardmäßig verboten sind.
Das ist Code-Golf , also gewinnt die kürzeste gültige Antwort - gemessen in Bytes .
Testfälle
Jeder Testfall wird als gegeben .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)
(getrennte Methode c
mit den vier Argumenten und 0
als fünftes Argument aufrufen ).