Un golf simple pour commencer la semaine! Vous disposez de trois tableaux: le tableau de base B
, le tableau de valeurs V
et le tableau d'index I
. Vous devez produire un autre tableau dans lequel les valeurs de V
sont insérées dans B
les indices spécifiés par I
. Voici un exemple:
Base: [5, 1, 4, 1, 3]
Values: [0, 0, 7]
Indices: [5, 0, 3]
Les indices pointent aux positions suivantes dans le tableau de base:
[ 5, 1, 4, 1, 3 ]
^ ^ ^
0 3 5
Ainsi, en insérant les éléments correspondants du tableau de valeurs, le résultat devrait être:
[0, 5, 1, 4, 7, 1, 3, 0]
Règles
Vous pouvez écrire un programme ou une fonction, en prenant une entrée via STDIN (ou l'alternative la plus proche), des arguments de ligne de commande ou des arguments de fonction et sortir le résultat via STDOUT (ou l'alternative la plus proche), la valeur de retour de la fonction, ou en modifiant le tableau donné comme B
paramètre .
Si votre soumission est une fonction I
et V
peut être modifiée de n'importe quelle manière, ainsi que B
si elle n'est pas utilisée pour la sortie.
Vous pouvez émettre les hypothèses suivantes sur l'entrée:
- Tous les éléments du tableau de base et de valeur seront des entiers non négatifs.
- Le tableau de valeurs aura au plus un élément de plus que le tableau de base.
- Le tableau de valeurs et le tableau d'index auront le même nombre d'éléments.
- Le tableau d'index ne contiendra pas d'indices répétés et tous les indices seront dans la plage.
- Les tableaux de base et de valeur peuvent contenir des éléments répétés.
- Tout ou partie des tableaux peut être vide.
- Vous ne devez pas supposer que les indices sont donnés dans un ordre particulier.
- Vous pouvez recevoir des entrées et produire des sorties dans n'importe quel format de chaîne ou de liste pratique et sans ambiguïté. Vous pouvez également choisir de recevoir les trois tableaux dans un ordre différent.
- Vous pouvez choisir entre l'indexation basée sur 0 et celle basée sur 1.
Il s'agit du code golf, donc la réponse la plus courte (en octets) l'emporte.
Cas de test
Donné au format B V I => Result
pour l'indexation basée sur 0. Si vous utilisez une indexation basée sur 1, incrémentez les éléments du troisième tableau de 1.
[] [] [] => []
[] [1] [0] => [1]
[1,2] [] [] => [1,2]
[1,2] [3] [0] => [3,1,2]
[1,2] [3] [1] => [1,3,2]
[1,2] [3] [2] => [1,2,3]
[0,0,0] [1,1,1,1] [0,1,2,3] => [1,0,1,0,1,0,1]
[5,1,4,1,3] [0,0,7] [5,0,3] => [0,5,1,4,7,1,3,0]
[1,2,3,4] [4,3,2,1] [4,0,3,1] => [3,1,1,2,3,2,4,4]
Faites-moi savoir si vous rencontrez d'autres cas de bord intéressants, et je les ajouterai.
Classement
Voici un extrait de pile pour générer à la fois un classement régulier et un aperçu des gagnants par langue.
Pour vous assurer que votre réponse s'affiche, veuillez commencer votre réponse avec un titre, en utilisant le modèle Markdown suivant:
# Language Name, N bytes
où N
est la taille de votre soumission. Si vous améliorez votre score, vous pouvez conserver les anciens scores dans le titre, en les barrant. Par exemple:
# Ruby, <s>104</s> <s>101</s> 96 bytes
la source
NULL
d'un tableau vide pour les langues où se trouve un tableau videNULL
?Réponses:
Pyth, 14 octets
Manifestation.
Ce programme prend les entrées comme un triplet de listes dans l'ordre Base, Indices, Values.
Explication sur l'exemple
[5, 1, 4, 1, 3], [5, 0, 3], [0, 0, 7]
:Prenez l'entrée: implicite, Q est l'entrée.
Faire l'index, les paires de valeurs:
CtQ
=[(5, 0), (0, 0), (3, 7)]
Triez les paires dans un ordre d'index croissant:
SCtQ
=[(0, 0), (3, 7), (5, 0)]
Retirez la valeur de chaque paire:
medSCtQ
=[0, 7, 0]
Divisez la liste de base à l'emplacement des indices:
cFPQ
=[[], [5, 1, 4], [1, 3], []]
Entrelacement 3 et 4:
.icFPQmedSCtQ
=[[], 0, [5, 1, 4], 7, [1, 3], 0, []]
Combinez en une seule liste:
s.icFPQmedSCtQ
=[0, 5, 1, 4, 7, 1, 3, 0]
la source
ssC,cFPQamedSCtQ]
.Python 2, 54
Prend l'entrée comme
B,I,V
. Modifie l'entréeB
lors de l'appel (merci à Martin Büttner de me le rappeler c'est possible).Utilise
map
pour appelerB.insert
sur chaque paire index / élément. Pour éviter le problème du déplacement des index de liste à mesure que les éléments sont insérés, trie les paires par ordre décroissant d'index par un laid zip / tri / décompression. Sinon pour la question du changement, nous pourrions simplement fairemap(B.insert,*X)
.Ancienne méthode (65):
la source
Haskell, 62 octets
Exemple d'utilisation:
f [5,1,4,1,3] [0,0,7] [5,0,3]
->[0,5,1,4,7,1,3,0]
.Comment ça marche: augmentez la liste de base avec des indices "et demi" à partir de
0.5
(par ex.[(0.5,5),(1.5,1),(2.5,4),(3.5,1),(4.5,3)]
) et concaténez-la avec les paires index-valeur. Triez et jetez l'index.Remarque : je ne sais pas si je triche ici. D'un point de vue mathématique, c'est bien, mais un programmeur pourrait faire valoir que la liste des indices
[5,0,3]
n'est pas une liste deIntegers
comme demandé, mais une liste deFractionals
(pour être exact, le type est polymorphe, mais doit appartenir à laFractional
classe, par exempleFloat
ouDouble
).la source
Rubis,
605953 octetsEt la version non golfée
la source
->a,b,c{...}
. Il y a aussi des chances qu'ilinsert
n'y ait pas besoin de parenthèses.CJam,
342318 octetsMa première soumission CJam. Les conseils sont les bienvenus, je suis sûr qu'il y a beaucoup à jouer au golf.
16 octets enregistrés avec l'aide de @ MartinBüttner et @Dennis.
Fonction attendant l'entrée sur la pile dans l'ordre
B V I
(I est le plus haut).Exemple d'utilisation:
Méthode:
i
e élément du tableau aveci+0.5
la source
q~.5fm.\2/\ee+$1f=p
et à 18 octets en utilisant une fonction anonyme:{.5fm.\2/\ee+$1f=}
{.\2/\ee+{0=}$1f=}
(toujours 18 octets)get array element
opérateur pour1f=
. Je le laisserai cependant comme un programme complet.K,
2221 octetsNous définissons une fonction
{…}
à 3 arguments avec les variables implicitesx
,y
etz
représentant respectivement la liste de départ, la liste de valeurs et la liste d'index. L'opérateur "cut" (_
) est utilisé pour séparer la liste de départ en une liste triée d'indices donnés ((z@<z)
). Nous entrelacons les valeurs (après les avoir triées de manière correspondante) avec les morceaux séparés du tableau d'origine en formant une liste ((a;b)
), en prenant sa transposition (+
) et en aplatissant le résultat (,//
).Exemple d'utilisation:
Les espaces autour du trait de soulignement sont nécessaires car K autorise les traits de soulignement dans les identificateurs. K5 supprime cette ambiguïté potentielle. Si nous pouvions compter sur les indices en ordre croissant et que les traits de soulignement n'étaient pas des identificateurs valides, nous pourrions utiliser le programme 13 octets bien plus agréable:
(soupir.)
modifier:
Rompre la symétrie, mais nous pouvons enregistrer un octet en utilisant le crochet-indexation (
[…]
) au lieu de l'@
opérateur d'indexation infixe . Habituellement, cela rallonge les programmes, mais dans ce cas, nous avions quand même besoin de parens pour trierz
avant d'effectuer la coupe.la source
Pyth, 17 octets
@isaacg a déjà battu ma solution. Mais comme ma documentation est terminée, je vais tout de même la publier.
Cela prend l'entrée au format
B, I, V
. Vous pouvez l'essayer ici: démonstration ou suite de testsExplication:
J'utilise l'exemple
B = [5,1,4,1,3], I = [5,0,3], V = [0,0,7]
de l'OP.la source
JavaScript (ES6), 75
Une fonction avec 3 paramètres de tableau, renvoyant un tableau. Bizarrement, cette fonction modifie son
i
paramètre (comme l'a gentiment permis OP)Testez l'exécution de l'extrait, Firefox uniquement comme d'habitude.
la source
fat arrow function
n'est pas implémenté même dans la version développeur de Chrome (AFAIK)Mathematica,
5251 octetsExemple:
Explication:
En utilisant l'exemple ci-dessus.
Tr@#2->#&~MapIndexed~#
=>{1 -> 5, 2 -> 1, 3 -> 4, 4 -> 1, 5 -> 3}
Thread[#3+.5->#2]
=>{5.5 -> 0, 0.5 -> 0, 3.5 -> 7}
{0.5 -> 0, 1 -> 5, 2 -> 1, 3 -> 4, 3.5 -> 7, 4 -> 1, 5 -> 3, 5.5 -> 0}
){0, 5, 1, 4, 7, 1, 3, 0}
)la source
CJam,
3029 octetsC'est trop long. Je sens que ce n'est pas une soumission de langue de golf: |
Essayez-le en ligne ici
la source
R, 75 octets
Cela crée une fonction sans nom. Pour l'appeler, donnez-lui un nom, par exemple
f=function...
. Notez que les tableaux doivent être indexés 1 car c'est exactement ainsi que R roule.Non golfé + explication:
Exemples:
Les suggestions sont les bienvenues comme toujours!
la source
CJam, 19 octets
Ceci est un programme complet qui lit les tableaux B , I et V (un par ligne, dans cet ordre) à partir de STDIN.
Essayez-le en ligne dans l' interpréteur CJam .
Comment ça marche
CJam, 20 octets
Il s'agit d'une fonction anonyme qui extrait B , V et I (de haut en bas) de la pile et laisse en retour un seul tableau sur la pile.
Essayez-le en ligne dans l' interpréteur CJam .
Comment ça marche
la source
Rubis, 48 octets
Je pense que cela est conforme aux règles, mais veuillez vérifier.
Fonction sans nom prenant les trois tableaux en entrée. Génère une chaîne qui peut être analysée sans ambiguïté dans un tableau de nombres avec l'expression ruby
x.split(/:+/).map(&:to_i)
.Cas de test sur ideone .
Je pourrais économiser 3 octets de plus, mais le format de sortie
[1,2,[nil,5]]
étire un peu trop les règles, bien que ce soit sans ambiguïté.la source
nil
valeurs d' entrelacement sont un peu extensibles. Mais dans les deux cas, cela ne gagne pas le concours, donc je ne suis pas vraiment inquiet de toute façon.R, 60
Comme une fonction sans nom qui prend b, v et i
Développe b avec NAs Remplit les lacunes où nécessaire avec v Renvoie le vecteur sans NAs
la source
Java,
253, 226, 219,209pas exactement un gagnant, mais bon.
En supposant que B, V et I ne sont pas nuls. v (minuscule v) est la longueur des tableaux de valeurs / indicateurs. R est le tableau retourné. r est la longueur du tableau retourné. x, y et i sont tous des entiers temporaires.
étendu:
la source
APL, 22 octets
Dans ⎕IO ← 0 pour faire correspondre les cas de test.
C'est un algorithme standard: le vecteur d'index du premier argument est ajouté aux index donnés (3e argument).
⍋
calcule la permutation qui trierait les index dans l'ordre croissant. Puisque l'algorithme de tri d'APL est stable par définition, la permutation calculée place l'élément de la caténation des deuxième et premier arguments au bon endroit.Par exemple :
la source