La distance de Manhattan sur une grille régulière est le nombre de pas orthogonaux qu'il faut prendre pour atteindre une cellule à partir d'une autre. Les étapes orthogonales sont celles qui traversent les bords des cellules de la grille (par opposition aux coins, ce qui nous donnerait la distance de Chebyshev ).
On peut définir une distance similaire sur d'autres grilles, par exemple la grille triangulaire. Nous pouvons traiter les cellules individuelles de la grille avec le schéma d'indexation suivant, où chaque cellule contient une x,y
paire:
____________________________________...
/\ /\ /\ /\ /\
/ \ 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\ /
\/______\/______\/______\/______\/___...
/\ /\ /\ /\ /\
. . . . . . . . . .
. . . . . . . . . .
Maintenant, la distance de Manhattan sur cette grille est à nouveau le nombre minimal d'étapes à travers les bords pour passer d'une cellule à l'autre. Vous pouvez donc passer de 3,1
à 2,1
, 4,1
ou 3,2
, mais pas à n'importe quel autre triangle, car ce sont des points de croisement plutôt que des bords.
Par exemple, la distance de 2,1
à 5,2
est 4
. Le chemin le plus court n'est généralement pas unique, mais une façon de faire la distance en 4 étapes est:
2,1 --> 3,1 --> 3,2 --> 4,2 --> 5,2
Le défi
Étant donné deux paires de coordonnées et à partir du schéma d'adressage ci-dessus, renvoyez la distance Manhattan entre elles.x1,y1
x2,y2
Vous pouvez supposer que les quatre entrées sont des entiers non négatifs, chacun inférieur à 128. Vous pouvez les prendre dans n'importe quel ordre et regroupés arbitrairement (quatre arguments distincts, une liste de quatre entiers, deux paires d'entiers, une matrice 2x2, .. .).
Vous pouvez écrire un programme ou une fonction et utiliser l'une des méthodes standard de réception d'entrée et de sortie.
Vous pouvez utiliser n'importe quel langage de programmation , mais notez que ces failles sont interdites par défaut.
Il s'agit de code-golf , donc la réponse valide la plus courte - mesurée en octets - l'emporte.
Cas de test
Chaque cas de test est donné sous la forme .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)
(appel de la méthode séparée c
avec les quatre arguments et 0
comme cinquième argument) à ma réponse.