Tâche
Étant donné un tableau d'entiers non négatifs a
, déterminez le nombre minimum de sauts vers la droite requis pour sauter "en dehors" du tableau, en commençant à la position 0, ou renvoyez zéro / nul s'il n'est pas possible de le faire.
Un saut d'index i
est défini comme une augmentation de l'index du tableau d'au plusa[i]
.
Un saut à l'extérieur est un saut où l'index résultant du saut i
est hors limites pour le tableau, donc pour l'indexation basée sur 1 i>length(a)
et pour l'indexation basée sur 0,i>=length(a)
.
Exemple 1
Considérez 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
Le chemin le plus court en "sautant" pour sortir des limites a une longueur 2
:
Nous pourrions sauter de 0->2->4->outside
qui a de la longueur 3
mais de la 0->4->outside
longueur, 2
alors nous revenons 2
.
Exemple 2
Supposons 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
Dans ce cas, il est impossible de sauter en dehors du tableau, nous devons donc retourner un zéro / null ou toute valeur non déterministe comme ∞
.
Exemple 3
Supposons Array=[4]
:
Array[0] = 4 -> You can jump 4 field
Nous pouvons directement sauter de l'index 0 en dehors du tableau, avec un seul saut, donc nous revenons 1
.
Éditer:
En raison de plusieurs questions sur la valeur de retour: Le retour ∞
est totalement valide s'il n'y a aucune chance de s'échapper. Parce que, s'il y a une chance, nous pouvons définir ce nombre.
C'est du code-golf , donc le code le plus court en octets gagne!
[2, 3, 1, 1]
.Réponses:
Coque , 9 octets
Renvoie
Inf
lorsqu'aucune solution n'existe. Essayez-le en ligne!Explication
Les valeurs de retour par défaut de Husk sont utiles ici.
Si la liste d'entrée est vide, elle
Γ
ne peut pas être déconstruite, elle renvoie donc la valeur entière par défaut, 0. Si le premier élément est 0, le résultat deMo₀↓ŀ
est une liste vide, sur laquelle▼
renvoie l'infini.la source
Haskell ,
7058 octetsEssayez-le en ligne!
EDIT: -12 octets grâce à @Esolanging Fruit et à l'OP pour avoir décidé d'autoriser l'infini!
Renvoie
Infinity
lorsqu'il n'y a pas de solution, ce qui la rend beaucoup plus simple. Puisque nous pouvons seulement avancer, ilf
suffit de regarder le début de la liste et de supprimer les1<=k<=x
éléments de la liste et de les répéter. Ensuite, nous ajoutons simplement 1 à chaque solution les appels récursifs trouvés et prenons le minimum. Si la tête vaut 0 le résultat sera infini (puisque nous ne pouvons pas bouger il n'y a pas de solution). Étant donné que1+Infinity==Infinity
ce résultat sera renvoyé aux appelants. Si la liste est vide, cela signifie que nous avons quitté le tableau, nous retournons donc un coût de 0.la source
Infinity
la valeur nulle (ce que l'OP n'a pas encore clarifié).Python 2 , 124 octets
Essayez-le en ligne!
-11 octets grâce à M. Xcoder
-12 octets grâce à M. Xcoder et Rod
la source
print(f([4,1,0,4,1,1,1]))
Vous revenez3
, mais devrait être2
comme[0] -> [3] -> outside
-~
astuce, oublié celui-là.APL (Dyalog Classic)ngn / apl , 18 octetsEDIT: je suis passé à ma propre implémentation d'APL car Dyalog ne prend pas en charge les infinis et l'auteur du défi ne permet pas aux nombres finis d'agir comme "null"
Essayez-le en ligne!essayez-le sur la page de démonstration de ngn / aplrevient sans solution
⌊/⍬
∞
la source
?
?2 3 1 1
doit être mappée sur2
0N
qui est le nombre entier nul de k; si vous êtes intéressé, je peux vous expliquer plus en détail dans la salleHaskell , 45 octets
Essayez-le en ligne!
Sorties
Infinity
quand impossible. L'argument auxiliaire gauche pour%
suivre le nombre d'espaces supplémentaires que nous pouvons déplacer dans notre saut actuel.la source
Perl 5 ,
5653 octetsComprend
+1
poura
Juste le code:
Essayez-le en ligne!
la source
Perl 5 , 80 octets
Essayez-le en ligne!
la source
Gelée , 32 octets
Essayez-le en ligne!
C'est trop long ...
la source
Gelée ,
1918 octetsEssayez-le en ligne!
Explication
la source
JavaScript ES6 , 118 octets
Essayez-le en ligne!
Effectue une première recherche étendue du tableau pour trouver le chemin le plus court.
la source
C (gcc) , 80 octets
Essayez-le en ligne!
la source
Julia 0,6 , 79 octets
Renvoie le nombre de sauts ou
Inf
si vous ne pouvez pas vous échapper. Examinez récursivement le premier élément et retournezInf
ou1
selon si vous pouvez vous échapper, sinon ajoutez1
à la solution la plus courte pour les tableaux tronqués représentant chaque saut valide. Le flux de contrôle se fait avec deux instructions ternaires commetest1 ? ontrue1 : test2 ? ontrue2 : onfalse2
.Essayez-le en ligne!
la source
C # (.NET Core) , 97 octets
Essayez-le en ligne!
Renvoie 0 si aucun chemin n'a été trouvé.
Explication
la source
Python 2 ,
837372 octets-10 grâce à @ user202729
-1 grâce à @JonathanFrech
Essayez-le en ligne! Renvoie l'infini pour une valeur nulle.
la source
and min(...)+1for
peut êtreand-~min(...)for
.