Tarea
Dado un conjunto de enteros no negativos a
, determine el número mínimo de saltos hacia la derecha necesarios para saltar "fuera" de la matriz, comenzando en la posición 0, o devolver cero / nulo si no es posible hacerlo.
Un salto desde el índice i
se define como un aumento en el índice de matriz como máximoa[i]
.
A fuera de salto es un salto donde el índice resultante de la salto i
está fuera de los límites para la matriz, por lo que para la indexación 1 basada en i>length(a)
, y para la indexación 0 a base de, i>=length(a)
.
Ejemplo 1
Considera 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
El camino más corto al "saltar" para salir de los límites tiene longitud 2
:
Podríamos saltar de lo 0->2->4->outside
que tiene longitud 3
pero 0->4->outside
tiene longitud, 2
así que volvemos 2
.
Ejemplo 2
Supongamos 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
En este caso, es imposible saltar fuera de la matriz, por lo que deberíamos devolver un valor cero / nulo o cualquier valor no determinista como ∞
.
Ejemplo 3
Supongamos Array=[4]
:
Array[0] = 4 -> You can jump 4 field
Podemos saltar directamente desde el índice 0 fuera de la matriz, con solo un salto, por lo que volvemos 1
.
Editar:
Debido a múltiples preguntas sobre el valor de retorno: la devolución ∞
es totalmente válida, si no hay posibilidad de escapar. Porque, si hay una posibilidad, podemos definir ese número.
Este es el código de golf , por lo que gana el código más corto en bytes.
[2, 3, 1, 1]
.Respuestas:
Casco , 9 bytes
Devuelve
Inf
cuando no existe una solución. Pruébalo en línea!Explicación
Los valores de retorno predeterminados de Husk son útiles aquí.
Si la lista de entrada está vacía,
Γ
no puede deconstruirla, por lo que devuelve el valor entero predeterminado, 0. Si el primer elemento es 0, entonces el resultado deMo₀↓ŀ
es una lista vacía, en la que▼
devuelve infinito.fuente
Haskell ,
7058 bytesPruébalo en línea!
EDITAR: -12 bytes gracias a @Esolanging Fruit y al OP por decidir permitir el infinito.
Regresa
Infinity
cuando no hay solución, lo que hace que la solución sea mucho más simple. Como solo podemos avanzar,f
solo mira el encabezado de la lista y cae1<=k<=x
elementos de la lista y vuelve a aparecer. Luego simplemente agregamos 1 a cada solución que se encuentran las llamadas recursivas y tomamos el mínimo. Si la cabeza es 0, el resultado será infinito (ya que no podemos movernos, no hay solución). Dado que1+Infinity==Infinity
este resultado será llevado de vuelta a las personas que llaman. Si la lista está vacía, eso significa que hemos abandonado la matriz, por lo que devolvemos un costo de 0.fuente
Infinity
como valor nulo (que el OP aún no ha aclarado).Python 2 , 124 bytes
Pruébalo en línea!
-11 bytes gracias al Sr. Xcoder
-12 bytes gracias al Sr. Xcoder y Rod
fuente
print(f([4,1,0,4,1,1,1]))
Volverá3
, pero debe ser2
igual[0] -> [3] -> outside
-~
truco, se olvidó de eso.APL (Dyalog Classic)ngn / apl , 18 bytesEDITAR: cambié a mi propia implementación de APL porque Dyalog no admite infinitos y el autor del desafío no permite que los números finitos actúen como "nulos"
Pruébalo en línea!pruébalo en la página de demostración de ngn / apldevuelve sin solución
⌊/⍬
∞
fuente
?
?2 3 1 1
debe asignarse a2
0N
que es nulo entero de k; si te interesa, puedo explicarte más en la sala deHaskell , 45 bytes
Pruébalo en línea!
Salidas
Infinity
cuando es imposible. El argumento auxiliar izquierdo para%
rastrear cuántos espacios más podemos mover en nuestro salto actual.fuente
Perl 5 ,
5653 bytesIncluye
+1
paraa
Solo el código:
Pruébalo en línea!
fuente
Perl 5 , 80 bytes
Pruébalo en línea!
fuente
Jalea , 32 bytes
Pruébalo en línea!
Esto es demasiado largo ...
fuente
Jalea ,
1918 bytesPruébalo en línea!
Explicación
fuente
JavaScript ES6 , 118 bytes
Pruébalo en línea!
Realiza una primera búsqueda amplia de la matriz para encontrar la ruta más corta.
fuente
C (gcc) , 80 bytes
Pruébalo en línea!
fuente
Julia 0.6 , 79 bytes
Devuelve el número de saltos o
Inf
si no puedes escapar. Mire recursivamente el primer elemento y regreseInf
o1
dependiendo de si puede escapar, de lo contrario, agregue1
a la solución más corta para matrices truncadas que representan cada salto válido. El flujo de control se realiza con dos declaraciones ternarias comotest1 ? ontrue1 : test2 ? ontrue2 : onfalse2
.Pruébalo en línea!
fuente
C # (.NET Core) , 97 bytes
Pruébalo en línea!
Devuelve 0 si no se encontró ninguna ruta.
Explicación
fuente
Pitón 2 ,
837372 bytes-10 gracias a @ user202729
-1 gracias a @JonathanFrech
Pruébalo en línea! Devuelve infinito para un valor nulo.
fuente
and min(...)+1for
puede serand-~min(...)for
.