Le but de ce défi est de collecter les éléments sélectionnés dans une liste et de les déplacer vers un certain emplacement dans la liste.
À titre d'exemple visuel, prenez les valeurs d'entrée (représentées par des nombres entiers encadrés en noir) et une liste correspondante de valeurs véridiques où true indique que l'élément est sélectionné (représenté par des cases bleues, où T
est véridique et F
est faux):
La première étape logique consiste à séparer les éléments marqués véridique et non véridique dans leurs listes correspondantes. Notez que l'ordre relatif dans chaque liste doit être maintenu (c'est-à-dire que l'ordre des éléments sélectionnés doit être 1,4,5
, et l'ordre des éléments non sélectionnés doit être 2,3,6,7
)!
La deuxième étape logique reçoit un index dans la liste restante des éléments non sélectionnés, insérez tous les éléments sélectionnés avant l'élément à l'index donné. En supposant que l'indexation commence à 0, supposons que vous souhaitiez insérer la sélection à l'index 3. Cela correspond au point avant la 7
boîte, donc les éléments sélectionnés doivent être insérés avant le 7
.
La solution finale est alors 2,3,6,1,4,5,7
.
Notez que ce diagramme logique illustre une façon de procéder; votre programme n'a pas besoin de suivre les mêmes étapes logiques tant que la sortie produit toujours le même résultat observable.
Contribution
Votre programme reçoit 3 entrées:
- Une liste d'entiers représentant les éléments. Cela peut être une liste vide. Cette liste sera toujours constituée d'entiers positifs uniques, pas nécessairement dans l'ordre trié (c'est-à-dire que 5 ne figureront pas deux fois dans la liste).
- Une liste de valeurs véridiques / fausses de la même longueur que la liste des éléments, où une valeur véridique représente que l'élément du même index a été sélectionné.
- Un entier représentant où insérer la sélection. Vous pouvez choisir quel est l'index du premier élément de la liste tant qu'il est constant à chaque exécution de votre programme (par exemple, le premier élément pourrait être l'index 0 ou l'index 1). Veuillez préciser à quelle convention votre programme adhère. Cet index doit être dans la plage
[starting_idx, ending_idx+1]
, c'est-à-dire qu'il sera toujours un index valide. Pour l'index de casending_idx+1
, la sélection doit être insérée à la fin de la liste. Vous pouvez supposer que cet entier s'adaptera au type d'entier natif de votre langue.
L'entrée peut provenir de n'importe quelle source souhaitée (stdio, paramètre de fonction, etc.)
Production
Le résultat est une liste représentant la séquence finale des éléments. Cela peut être à n'importe quelle source souhaitée (stdio, valeur de retour, paramètre de sortie de fonction, etc.). Vous êtes autorisé à modifier n'importe laquelle des entrées sur place (par exemple, étant donné une liste modifiable en tant que paramètre de fonction et que votre fonction fonctionne sur place dans cette liste).
Cas de test
Tous les cas de test suivants supposent une indexation basée sur 0. J'ai utilisé 0 et 1 pour indiquer des valeurs fausses / véridiques respectivement pour le masque de sélection.
Les cas de test ont des listes formatées [a,b,c]
, mais tant que vos listes d'entrée représentent une séquence ordonnée finie, c'est bien.
Contribution:
[]
[]
0
Production:
[]
Contribution:
[1,2,3,4,5,6,7]
[1,0,0,1,1,0,0]
3
Production:
[2,3,6,1,4,5,7]
Contribution:
[1,2,3,4,5,6,7]
[1,0,0,1,1,0,0]
0
Production:
[1,4,5,2,3,6,7]
Contribution:
[1,2,3,4,5,6,7]
[1,0,0,1,1,0,0]
4
Production:
[2,3,6,7,1,4,5]
Contribution:
[1,2,3,4,5,6,7]
[1,1,1,1,1,1,1]
0
Production:
[1,2,3,4,5,6,7]
Contribution:
[1,2,3,4,5,6,7]
[0,0,0,0,0,0,0]
5
Production:
[1,2,3,4,5,6,7]
Contribution:
[1,3,2,5,4,6]
[1,0,0,1,1,0]
3
Production:
[3,2,6,1,5,4]
Notation
C'est le golf de code; la réponse la plus courte en octets l'emporte. Les failles standard sont interdites. Vous êtes autorisé à utiliser toutes les fonctions intégrées souhaitées.