Dada uma grade de direções e uma posição inicial e final, determine o número mínimo de substituições na grade de direção que precisam ser feitas para concluir o caminho entre os dois pontos. A grade é duplamente cilíndrica. Isso é mais claro, dado um exemplo.
Exemplo
Vamos pegar a seguinte grade como exemplo:
>>>>v
>>>><
<<<<<
Vamos começar em (1, 1)
e terminar em (1, 3)
(onde estão as coordenadas (x, y)
ou (col, row)
, com a linha superior e a coluna esquerda 1
). Então, uma solução possível é substituir (1, 1)
e (1, 2)
por v
, para que a grade final fique assim:
v>>>v
v>>><
<<<<<
A partir de (1, 1)
, o caminho nos levaria a (1, 3)
. No entanto, existe uma solução mais curta, que é substituir (5, 2)
por v
, portanto, a grade final é esta:
>>>>v
>>>>v
<<<<<
A partir de (1, 1)
, um caminho bastante longo leva a (1, 3)
.
Substituir qualquer coisa na linha superior por ^
obras também (obrigado @Spitemaster).
Entrada
A entrada consistirá em uma grade retangular de 4 valores possíveis, além de duas coordenadas. Você pode pegar a grade em qualquer formato razoável; por exemplo, matriz de caracteres ou número inteiro, lista de cadeias, etc. Você também pode solicitar as dimensões da grade. Você pode pegar as coordenadas em qualquer formato razoável; por exemplo, par inteiro, número complexo, etc. Você pode escolher a indexação 0 ou 1.
Resultado
A saída deve ser um número inteiro único, o número mínimo de substituições de grade necessárias para fechar o caminho do início ao fim.
Regras e especificações
- As brechas padrão se aplicam
- a grade é duplamente cilíndrica, o que significa que subir do topo vai para o fundo, da esquerda para a esquerda, para a direita etc.
Casos de amostra
Os casos de amostra são dados como uma matriz de caracteres e coordenadas 1-indexadas.
Caso 1
Entrada
>>>>v
>>>><
<<<<<
1 1
1 3
Resultado
1
Explicação
Consultar exemplo.
Caso 2
Entrada
<<<<<
v>v>v
>>>>>
1 1
5 3
Resultado
1
Explicação
Você pode substituir (1, 1)
por v
ou (2, 1)
com v
. No primeiro caso, a partir de (1, 1)
, o caminho segue direto para a direita e para o destino. No segundo caso, o caminho sai da esquerda para a direita, alcança (2, 1)
, desce, direita, desce e depois para a direita até atingir o destino.
Caso 3
Entrada
^^^^^^
><<>>>
vvvvvv
2 2
5 2
Resultado
2
Explicação
A melhor mudança é fazer a linha central dobrar da esquerda para o ponto; ou seja, crie o primeiro e o último itens na linha central <
. Alternativamente, faça 2 2
e 3 2
ambos >
.
Este é um desafio do código-golfe , portanto o código mais curto vence!
><
é pingue-pongue para frente e para trás (para que ambas as posições sejam alcançadas) ou é como se houvesse uma parede entre elas?
^
ouv
.