Inspiré par We do tower hopping et lié au 2D Maze Minus 1D
introduction
Votre tâche consiste à trouver le chemin le plus court pour sortir d'un labyrinthe de tableaux en suivant les règles spécifiées.
Défi
Un tableau 1D a avec n éléments peut être considéré comme un labyrinthe composé de n points, où le point d'index k est connecté aux points avec k + a [ k ] et k - a [ k ] d'une manière unidirectionnelle. En d'autres termes, vous pouvez sauter en avant ou en arrière exactement à [ k ] pas du point d'index k . Les points avec un index en dehors des limites du tableau sont considérés en dehors du labyrinthe.
Pour illustrer cela, considérez le tableau suivant,
[0,8,5,9,4,1,1,1,2,1,2]
Si nous sommes au 5ème élément en ce moment, puisque l'élément est 4, nous pouvons sauter 4 pas en avant vers le 9ème élément, ou 4 pas en arrière vers le 1er élément. Si nous faisons ce dernier, nous nous retrouvons avec l'élément 0, ce qui indique qu'aucun autre mouvement n'est possible. Si nous faisons le premier, puisque le 9ème élément est 2, nous pouvons choisir de sauter au 11ème élément, qui est à nouveau un 2, puis nous pouvons à nouveau sauter au "13ème élément", qui est hors des limites du tableau et considéré comme une sortie vers le labyrinthe.
Donc, si nous partons de l'élément du milieu, une façon de sortir du labyrinthe est de sauter 1 pas en arrière, 4 pas en avant, 2 pas en avant et encore 2 pas en avant, qui peut être exprimé comme le tableau [-1,4,2,2]
. Sinon , vous pouvez l' exprimer avec le tableau [4,8,10,12]
qui enregistre l'indice de base zéro de tous les points intermédiaires et finaux (1 à base d'indice est aussi très bien), ou tout simplement les signes, [-1,1,1,1]
.
Échapper au labyrinthe de l'extrémité à faible indice est également OK.
Utiliser la première notation et partir du même élément, [1,1,1,2,2]
est également une solution mais elle n'est pas optimale car il y a 5 étapes au lieu de 4.
La tâche consiste à trouver le chemin le plus court pour sortir du labyrinthe de tableaux et sortir le chemin. S'il existe plusieurs chemins optimaux, vous pouvez en générer un ou tous. S'il n'y a pas de solution, vous devez sortir une valeur de falsification choisie par vous qui est discernable à partir d'un chemin valide (la production d'aucune sortie du tout est également OK).
Par souci de simplicité, le nombre d'éléments dans le tableau est toujours un nombre impair et nous partons toujours de l'élément du milieu.
Cas de test
Les cas de test illustrent différentes formes de sortie, mais vous n'êtes pas limité à celles-ci.
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]
[]
Spécifications
Vous pouvez écrire une fonction ou un programme complet.
Le tableau contient uniquement des entiers non négatifs.
Vous pouvez prendre des entrées et des sorties via n'importe quel formulaire standard , mais veuillez spécifier dans votre réponse le formulaire que vous utilisez.
C'est le code-golf , le plus petit nombre d'octets gagne.
Comme d'habitude, les failles par défaut s'appliquent ici.
[1,1,1,-1]
au lieu de [-1,1,1,1]
?
[0,8,5,9,4,1,1,1,2,1,2]
, sortie[[-1,4,2,2]]
)