La distancia de Manhattan en una cuadrícula regular es la cantidad de pasos ortogonales que uno debe tomar para llegar a una celda desde otra. Los pasos ortogonales son aquellos que pasan por los bordes de las celdas de la cuadrícula (a diferencia de las esquinas, lo que nos daría la distancia de Chebyshev ).
Podemos definir una distancia similar en otras cuadrículas, por ejemplo, la cuadrícula triangular. Podemos abordar las celdas individuales en la cuadrícula con el siguiente esquema de indexación, donde cada celda contiene un 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\ /
\/______\/______\/______\/______\/___...
/\ /\ /\ /\ /\
. . . . . . . . . .
. . . . . . . . . .
Ahora, la distancia de Manhattan en esta cuadrícula es nuevamente el número mínimo de pasos a través de los bordes para llegar de una celda a otra. Por lo que puede pasar de 3,1
a 2,1
, 4,1
o 3,2
, pero no a cualquier otro triángulo, ya que los cruzaría puntos en lugar de los bordes.
Por ejemplo, la distancia de 2,1
a 5,2
es 4
. El camino más corto generalmente no es único, pero una forma de hacer la distancia en 4 pasos es:
2,1 --> 3,1 --> 3,2 --> 4,2 --> 5,2
El reto
Dados dos pares de coordenadas y del esquema de direccionamiento anterior, devuelva la distancia de Manhattan entre ellos.x1,y1
x2,y2
Puede suponer que las cuatro entradas son enteros no negativos, cada uno menor que 128. Puede tomarlos en cualquier orden y agruparlos arbitrariamente (cuatro argumentos separados, una lista de cuatro enteros, dos pares de enteros, una matriz de 2x2, .. .).
Puede escribir un programa o una función y utilizar cualquiera de los métodos estándar para recibir entradas y proporcionar salidas.
Puede usar cualquier lenguaje de programación , pero tenga en cuenta que estas lagunas están prohibidas por defecto.
Este es el código de golf , por lo que gana la respuesta válida más corta, medida en bytes .
Casos de prueba
Cada caso de prueba se da como .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)
(llamando al método separado c
con los cuatro argumentos y 0
como quinto argumento) a mi respuesta.