Inspirado por We do hopping de torre e relacionado a 2D Maze Minus 1D
Introdução
Sua tarefa é encontrar o caminho mais curto para sair de um labirinto de matrizes seguindo as regras especificadas.
Desafio
Uma matriz 1D a com n elementos pode ser considerada como um labirinto composto por n pontos, onde o ponto com o índice k é conectado aos pontos com k + a [ k ] ek - a [ k ] de maneira unidirecional. Em outras palavras, você pode pular para frente ou para trás exatamente a [ k ] etapas do ponto com o índice k . Pontos com um índice fora dos limites da matriz são considerados fora do labirinto.
Para ilustrar isso, considere a seguinte matriz,
[0,8,5,9,4,1,1,1,2,1,2]
Se estamos no 5º elemento agora, já que o elemento é 4, podemos pular 4 etapas para a frente para o 9º elemento ou 4 etapas para trás para o 1º elemento. Se fizermos o último, acabaremos com o elemento 0, que indica que não são possíveis outros movimentos. Se fizermos o primeiro, já que o 9º elemento é 2, podemos optar por pular para o 11º elemento, que é novamente um 2, e depois podemos pular novamente para o "13º elemento", que está fora dos limites do matriz e considerado uma saída para o labirinto.
Portanto, se começarmos do elemento do meio, uma maneira de sair do labirinto é dar um passo para trás, quatro passos para frente, dois passos para frente e novamente dois passos para frente, que podem ser expressos como a matriz [-1,4,2,2]
. Como alternativa, você pode expressá-lo com a matriz [4,8,10,12]
que registra o índice baseado em zero de todos os pontos intermediários e finais (o índice baseado em 1 também é bom) ou apenas os sinais [-1,1,1,1]
.
Escapar do labirinto a partir do final de baixo índice também é bom.
O uso da primeira notação e a partir do mesmo elemento [1,1,1,2,2]
também é uma solução, mas não é ideal, pois há 5 etapas em vez de 4.
A tarefa é descobrir o caminho mais curto para sair do labirinto da matriz e gerar o caminho. Se houver mais de um caminho ideal, você poderá gerar um ou todos eles. Se não houver solução, você deve gerar um valor falso escolhido por você que seja discernível a partir de um caminho válido (não produzir nenhuma saída também é bom).
Por simplicidade, o número de elementos na matriz é sempre um número ímpar e sempre começamos a partir do elemento no meio.
Casos de teste
Os casos de teste ilustram várias formas de saída, mas você não está limitado a elas.
Input
Output
[0,8,5,9,4,1,1,1,2,1,2]
[-1,4,2,2]
[2,3,7,1,2,0,2,8,9]
[2,9] (or [2,-5] or [[2,9],[2,-5]])
[0,1,2,2,3,4,4,4,3,2,2,3,0]
[1,-1,1,1]
[0,1,2,2,4,4,6,6,6,6,6,4,2,1,2,2,0]
[]
Especificações
Você pode escrever uma função ou um programa completo.
A matriz contém apenas números inteiros não negativos.
Você pode receber e enviar informações através de qualquer formulário padrão , mas especifique na sua resposta qual formulário você está usando.
Isso é código-golfe , o menor número de bytes vence.
Como sempre, as brechas padrão se aplicam aqui.
[1,1,1,-1]
invés de [-1,1,1,1]
?
[0,8,5,9,4,1,1,1,2,1,2]
, saída[[-1,4,2,2]]
)