Un jour, vous ne vous réveillez que pour vous retrouver pris dans un tableau. Vous essayez de sortir de là, en prenant un index à la fois, mais il semble qu'il existe d'autres règles:
Le tableau est entièrement rempli de nombres naturels.
- Si vous vous retrouvez sur un index
n
, vous accédez à l'indexarray[n]
, sauf: - Si vous vous retrouvez sur un indice
n
qui est un nombre premier, vousarray[n]
reculez
Exemple: vous commencez sur l'index 4
, dans ce tableau (l'index de départ est 0):
array = [1,4,5,6,8,10,14,15,2,2,4,5,7];
-----------------^ you are here
Comme la valeur du champ sur lequel vous vous trouvez est 8
, vous accédez à l'index 8
comme première étape. Le champ sur lequel vous atterrissez contient la valeur 2
. Vous allez ensuite à l'index 2
comme deuxième étape. Comme 2
c'est un nombre premier, vous reculez de 5 pas, ce qui est votre troisième pas. Comme il n'y a pas d'index -3
, vous avez réussi à échapper au tableau en 3 étapes au total.
Votre tâche est:
Pour écrire un programme ou une fonction, qui accepte un tableau et un index de démarrage comme paramètre, et génère le nombre d'étapes pour échapper au tableau. Si vous ne pouvez pas échapper au tableau (par exemple [2,0,2]
avec start-index 2
=> vous passez constamment de l'index 2
à 0
), affichez une valeur falsifiée. Vous pouvez utiliser une indexation à base unique ou une indexation à base zéro, mais veuillez spécifier celle que vous utilisez.
Cas de test
Contribution: [2,5,6,8,1,2,3], 3
Sortie: 1
Contribution: [2, 0, 2], 2
Sortie: false
Entrée: [14,1,2,5,1,3,51,5,12,3,4,41,15,4,12,243,51,2,14,51,12,11], 5
;
Sortie: 6
La réponse la plus courte l'emporte.
la source
Réponses:
Pyth, 31 octets
Les cas de test
Il utilise zéro pour indiquer une valeur fausse, le nombre de sauts sinon.
la source
Python,
161138 octetsCrédits pour factorielle.
Ideone ça!
Comment ça marche
Le théorème de Wilson est utilisé pour la vérification principale.
Détection de boucle en stockant les indices vus dans un tableau (
l
) et en vérifiant si l'index actuel est dedansl
.la source
Python, 107 octets
Utilisation:
f(list, start)
ex:f([2,5,6,8,1,2,3], 3)
Renvoie les
0
boucles (détecté quandn > len(a)
)la source
Matlab, 138 octets
Il s'agit d'une approche directe, utilisant des indices basés sur 1 car Matlab utilise des indices basés sur 1 par défaut. Pour compter le nombre de pas, nous utilisons une
for
boucle comptant de 1 à l'infini (!). Dans le cas où nous ne pouvons pas échapper au tableau, nous utilisons un vecteurv
pour garder une trace des entrées que nous avons déjà visitées. Si nous visitons une entrée deux fois, nous savons que nous sommes coincés dans un cycle inéluctable. Pour voir si nous sommes en dehors d'un tableau, nous utilisons latry/catch
structure, qui intercepte également les exceptions hors limites.la source
05AB1E, 32 octets
Explication
Essayez-le en ligne
la source
JavaScript (ES6), 100
Index base 0. Remarque: cette fonction modifie le tableau d'entrée
Moins golfé
Tester
la source
JAVA,
229218 octetsMerci à Kevin, 11 octets mord la poussière.
la source
Stack<Integer>i=new Stack<>();
jouer au golf un peu plus: peut être changé enStack i=new Stack();
etreturn 1==2;
peut être changé enreturn 0>1;
. En outre, vous voudrez peut-être mentionner que c'est Java 7 au lieu de Java en général.a,b->{...}
au lieu deObject e(int[]a,int b){...}
, c'est pourquoi je mentionne personnellement Java 7 pour faire savoir aux gens que je n'ai pas délibérément utilisé de lambdas Java 8, mais c'est à vous de décider.CJam, 44 octets
Attend
index array
sur la pile.Essayez-le en ligne!
Ma première réponse CJam, donc pourquoi c'est si terrible et impératif ...
(il est considéré comme correct de planter après la sortie correcte telle qu'imprimée, ce que fait le programme ici)
la source
C, 121 octets
La fonction
f
accepte le tableau, l'index de départ (basé sur 0) et le nombre d'éléments dans le tableau, car il n'y a aucun moyen de tester la fin d'un tableau en C (au moins je n'en connais pas).Essayez-le sur ideone!
Remarque:
function p(n)
teste sin
est premier ou non. Le mérite en revient à @Lynn et sa réponse pour Ce numéro est-il un nombre premier?la source
c
pour appeler à nouveau la fonction.JavaScript,
121132 octetsmodifier 1: oups, manqué le bit sur le retour du nombre d'étapes. correction à venir bientôt.
modifier 2: fixe
la source
Raquette,
183156octetsProbablement plus d'octets enregistrables avec le golf, mais c'est tout pour moi. :)
Module complet avec suite de tests avec fonction de nettoyage:
Exécutez-le comme
raco test e.rkt
Félicitations majeures pour @cat découvrir la
prime?
fonction non documentée .la source
Java,
163160 octetsp(n)
est pour le test principal,f(a,n)
est pour la fonction d'échappement. Usage:Version non-golfée:
la source
Perl 6 , 85 octets
Explication:
Il s'agit d'une séquence paresseuse des indices parcourus selon la règle. Si l'index dépasse finalement les limites du tableau d'entrée (la
!(0 <= * < a)
condition), la séquence est finie; sinon, les indices tournent à l'infini.Cette séquence est envoyée à la fonction anonyme interne:
Si la séquence est définie à l'index donné par la taille du tableau d'entrée, elle doit être entrée dans un cycle infini, elle
0
est donc renvoyée. Sinon, la taille de la séquence+$_
est renvoyée.la source
Perl 5 , 107 + 1 (
-a
) = 108 octetsEssayez-le en ligne!
Liste basée sur 0. Renvoie false (vide) si la liste est incontournable.
la source