A distância de Manhattan em uma grade regular é o número de etapas ortogonais necessárias para alcançar uma célula da outra. Etapas ortogonais são aquelas que atravessam as bordas das células da grade (em oposição aos cantos, o que nos daria a distância de Chebyshev ).
Podemos definir uma distância semelhante em outras grades, por exemplo, a grade triangular. Podemos endereçar as células individuais na grade com o seguinte esquema de indexação, em que cada célula contém um 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\ /
\/______\/______\/______\/______\/___...
/\ /\ /\ /\ /\
. . . . . . . . . .
. . . . . . . . . .
Agora, a distância de Manhattan nessa grade é novamente o número mínimo de etapas nas bordas para passar de uma célula para outra. Portanto, você pode passar de 3,1
para 2,1
, 4,1
ou 3,2
, mas não para qualquer outro triângulo, pois esses seriam pontos de cruzamento e não arestas.
Por exemplo, a distância de 2,1
a 5,2
é 4
. O caminho mais curto geralmente não é único, mas uma maneira de fazer a distância em 4 etapas é:
2,1 --> 3,1 --> 3,2 --> 4,2 --> 5,2
O desafio
Dados dois pares de coordenadas e do esquema de endereçamento acima, retorne a distância de Manhattan entre eles.x1,y1
x2,y2
Você pode assumir que todas as quatro entradas são números inteiros não negativos, cada uma com menos de 128. Você pode levá-las em qualquer ordem e agrupadas arbitrariamente (quatro argumentos separados, uma lista de quatro números inteiros, dois pares de números inteiros, uma matriz 2x2, .. .).
Você pode escrever um programa ou uma função e usar qualquer um dos métodos padrão de recebimento de entrada e saída.
Você pode usar qualquer linguagem de programação , mas observe que essas brechas são proibidas por padrão.
Isso é código-golfe , então a resposta mais curta e válida - medida em bytes - vence.
Casos de teste
Cada caso de teste é fornecido 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)
(chamando método separado c
com os quatro argumentos e 0
como quinto argumento) à minha resposta.