La distanza di Manhattan su una griglia regolare è il numero di passi ortogonali che uno deve prendere per raggiungere una cella da un'altra. I passaggi ortogonali sono quelli che attraversano i bordi delle celle della griglia (al contrario degli angoli, che ci darebbe la distanza di Chebyshev ).
Possiamo definire una distanza simile su altre griglie, ad esempio la griglia triangolare. Possiamo indirizzare le singole celle nella griglia con il seguente schema di indicizzazione, in cui ogni cella contiene una x,y
coppia:
____________________________________...
/\ /\ /\ /\ /\
/ \ 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\ /
\/______\/______\/______\/______\/___...
/\ /\ /\ /\ /\
. . . . . . . . . .
. . . . . . . . . .
Ora la distanza di Manhattan su questa griglia è di nuovo il numero minimo di passi attraverso i bordi per passare da una cella all'altra. Così si può passare da 3,1
a 2,1
, 4,1
o 3,2
, ma non a qualsiasi altro triangolo, dal momento che quelli sarebbero stati attraversando punti piuttosto che bordi.
Ad esempio, la distanza da 2,1
a 5,2
è 4
. Il percorso più breve non è generalmente unico, ma un modo per fare la distanza in 4 passi è:
2,1 --> 3,1 --> 3,2 --> 4,2 --> 5,2
La sfida
Date due coppie di coordinate e dallo schema di indirizzamento sopra riportato, restituiscono la distanza di Manhattan tra di loro.x1,y1
x2,y2
Puoi presumere che tutti e quattro gli input siano numeri interi non negativi, ciascuno inferiore a 128. Puoi prenderli in qualsiasi ordine e raggruppati arbitrariamente (quattro argomenti separati, un elenco di quattro numeri interi, due coppie di numeri interi, una matrice 2x2, .. .).
È possibile scrivere un programma o una funzione e utilizzare uno dei metodi standard per ricevere input e fornire output.
È possibile utilizzare qualsiasi linguaggio di programmazione , ma si noti che queste scappatoie sono vietate per impostazione predefinita.
Questo è code-golf , quindi la risposta valida più breve - misurata in byte - vince.
Casi test
Ogni caso di test è indicato come .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)
(chiamando il metodo separato c
con i quattro argomenti e 0
come quinto argomento) alla mia risposta.