Tarefa
Dada uma matriz de números inteiros não negativos a
, determine o número mínimo de saltos para a direita necessários para pular "fora" da matriz, iniciando na posição 0, ou retornar zero / nulo se não for possível.
Um salto do índice i
é definido como um aumento no índice da matriz, no máximo a[i]
.
Um salto para fora é um salto em que o índice resultante do salto i
está fora dos limites da matriz, portanto, para indexação com base em 1 i>length(a)
e para indexação com base em 0 i>=length(a)
,.
Exemplo 1
Considere Array = [4,0,2,0,2,0]
:
Array[0] = 4 -> You can jump 4 field
Array[1] = 0 -> You can jump 0 field
Array[2] = 2 -> You can jump 2 field
Array[3] = 0 -> You can jump 0 field
Array[4] = 2 -> You can jump 2 field
Array[5] = 0 -> You can jump 0 field
O caminho mais curto "pulando" para sair dos limites tem comprimento 2
:
Nós poderíamos pular de 0->2->4->outside
qual tem comprimento, 3
mas 0->4->outside
tem comprimento, 2
então voltamos 2
.
Exemplo 2
Suponha Array=[0,1,2,3,2,1]
:
Array[0] = 0 -> You can jump 0 fields
Array[1] = 1 -> You can jump 1 field
Array[2] = 2 -> You can jump 2 field
Array[3] = 3 -> You can jump 3 field
Array[4] = 2 -> You can jump 2 field
Array[5] = 1 -> You can jump 1 field
Nesse caso, é impossível pular fora da matriz, portanto, devemos retornar um valor zero / nulo ou qualquer valor não determinístico ∞
.
Exemplo 3
Suponha Array=[4]
:
Array[0] = 4 -> You can jump 4 field
Podemos pular diretamente do índice 0 fora da matriz, com apenas um salto, por isso retornamos 1
.
Editar:
Devido a várias perguntas sobre o valor de retorno: O retorno ∞
é totalmente válido, se não houver chance de escapar. Porque, se houver uma chance, podemos definir esse número.
Isso é código-golfe , então o código mais curto em bytes vence!
[2, 3, 1, 1]
.Respostas:
Casca , 9 bytes
Retorna
Inf
quando não existe solução. Experimente online!Explicação
Os valores de retorno padrão do Husk são úteis aqui.
Se a lista de entrada estiver vazia,
Γ
não será possível desconstruí-la, retornando o valor inteiro padrão, 0. Se o primeiro elemento for 0, o resultado deMo₀↓ŀ
será uma lista vazia, na qual▼
retornará infinito.fonte
Haskell ,
7058 bytesExperimente online!
EDIT: -12 bytes graças ao @Esolanging Fruit e ao OP por decidir permitir o infinito!
Retorna
Infinity
quando não há solução que torne a solução muito mais simples. Como só podemos avançar,f
apenas olha para o cabeçalho da lista e elimina1<=k<=x
itens da lista e recorremos novamente. Em seguida, adicionamos 1 a cada solução das chamadas recursivas encontradas e reduzimos o mínimo. Se a cabeça for 0, o resultado será infinito (já que não podemos nos mover, não há solução). Uma vez que1+Infinity==Infinity
este resultado será levado de volta para os chamadores. Se a lista estiver vazia, significa que deixamos a matriz e retornamos um custo de 0.fonte
Infinity
como o valor nulo (que o OP ainda não esclareceu).Python 2 , 124 bytes
Experimente online!
-11 bytes graças ao Sr. Xcoder
-12 bytes graças ao Sr. Xcoder e Rod
fonte
print(f([4,1,0,4,1,1,1]))
Você volta3
, mas deve ser2
Like[0] -> [3] -> outside
-~
truque, esqueci disso.APL (Dyalog Classic)ngn / apl , 18 bytesEDIT: mudei para minha própria implementação do APL porque o Dyalog não suporta infinitos e o autor do desafio não permite que números finitos atuem como "nulos"
Experimente online!experimente na página de demonstração do ngn / aplretorna para nenhuma solução
⌊/⍬
∞
fonte
?
?2 3 1 1
devem ser mapeados para2
0N
que é o número inteiro nulo de k; Se você estiver interessado, eu posso explicar melhor na sala de aplHaskell , 45 bytes
Experimente online!
Saídas
Infinity
quando impossíveis. O argumento auxiliar esquerdo para%
rastrear quantos mais espaços podemos mover em nosso salto atual.fonte
Perl 5 ,
5653 bytesInclui
+1
paraa
Apenas o código:
Experimente online!
fonte
Perl 5 , 80 bytes
Experimente online!
fonte
Gelatina , 32 bytes
Experimente online!
Isso é muito longo ...
fonte
Geléia ,
1918 bytesExperimente online!
Explicação
fonte
JavaScript ES6 , 118 bytes
Experimente online!
Executa uma primeira pesquisa abrangente da matriz para encontrar o caminho mais curto.
fonte
C (gcc) , 80 bytes
Experimente online!
fonte
Julia 0.6 , 79 bytes
Retorna o número de saltos ou
Inf
se você não pode escapar. Observe recursivamente o primeiro elemento e retorneInf
ou,1
dependendo se você puder escapar, adicione1
a solução mais curta para matrizes truncadas que representam cada salto válido. O fluxo de controle é feito com duas declarações ternárias, comotest1 ? ontrue1 : test2 ? ontrue2 : onfalse2
.Experimente online!
fonte
C # (.NET Core) , 97 bytes
Experimente online!
Retorna 0 se nenhum caminho foi encontrado.
Explicação
fonte
Python 2 ,
837372 bytes-10 graças a @ user202729
-1 graças a @JonathanFrech
Experimente online! Retorna o infinito para um valor nulo.
fonte
and min(...)+1for
pode serand-~min(...)for
.