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.
Réponses:
MATL, 9 octets
Cette solution accepte un tableau de valeurs
T
(vraies) etF
(fausses) comme deuxième entrée. Également pour le premier cas de test, avec des tableaux vides, il ne produit aucune sortie.Essayez-le en ligne! et une version légèrement modifiée pour tous les cas de test.
Explication
la source
Mathematica,
6662 octets4 octets enregistrés de @MartinEnder .
Fonction anonyme. Prend l'index basé sur 1, la liste et les marqueurs en entrée et renvoie la liste réorganisée en sortie.
la source
Haskell, 70 octets
Exemple d'utilisation:
([1,2,3,4,5,6,7]#[True,False,False,True,True,False,False]) 3
->[2,3,6,1,4,5,7]
.Comment ça fonctionne:
la source
JavaScript (ES6), 76 octets
la source
Gelée , 10 octets
Essayez-le en ligne!
Comment ça fonctionne
la source
C #, 132 octets
non golfé:
des idées d'amélioration appréciées.
la source
Python 3, 91 octets
où
a
est la liste des éléments / nombres,x
est laTrue/False
liste eti
est l'index.Version multiligne pour une meilleure lisibilité:
Comment ça marche?
L'appel à des
zip(a,x)
résultats dans une liste de tuples où chacun d'eux contient l'info:(element,0|1)
. Ensuite, une compréhension de liste est utilisée pour déterminer les éléments qui ont une0/False
valeur associée et les stocke dans la variableb
.Ainsi ,
[c for c,z in zip(a,x)if z<1]
crée une liste qui contient tous les éléments qui ont une0
(False
valeur) associée.Après cela, la liste des éléments qui ont une
True|1
valeur associée (qui est déterminée par la vérification que les éléments dea
sont pas présents dansb
:[c for c in a if(c in b)<1]
) est inséré dans la liste avec tous les éléments qui ont une0
(False
valeur) associé (listeb
à l'index spécifié)i
et la liste résultante est retournée.la source
Python 3,
10693 octetsAncienne version:
la source