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!
fonte
^
ouv
.><
é 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?Respostas:
JavaScript (ES6),
140135 bytesToma entrada como
(a, width, height, x1, y1)(x0, y0)
ondea[]
é uma matriz de números inteiros e todas as coordenadas são 0-indexado.Experimente online!
Quão?
fonte
Geléia ,
7372 bytesExperimente online!
Exemplo usando o caso 3 que requer duas alterações (também possui um rodapé para converter os
><v^
números em números).Um programa completo que espera os seguintes argumentos:
Esquerda: uma lista de duas listas; primeiro, a grade de direção nivelada codificada como 1 = direita, 2 = esquerda, 3 = abaixo, 4 = acima, seguida por uma lista da posição final e da posição inicial como índices zero [linha, coluna]. Para o primeiro exemplo
[1,1,1,1,3,1,1,1,1,4,2,2,2,2,2],[[2,0],[0,0]]
,.Direita: uma lista do número de linhas seguidas por colunas. Para o primeiro exemplo
[3,5]
Retorna o número de alterações necessárias para obter do início ao fim. Retarde uma vez que isso é mais de uma alteração. No TIO, o terceiro exemplo de caso leva aprox. 30 segundos para concluir.
Explicação completa abaixo, mas a visão geral é:
Explicação completa:
fonte