Contexte
Les programmeurs de nos jours n'arrivent pas à garder leurs tampons droits! Une source d'erreur courante essaie d'utiliser un index de tableau trop grand pour le tampon. Votre tâche consiste à implémenter un tampon où les grands indices sont réduits à une taille que le tampon peut gérer. Parce que je décide exactement ce qui est le mieux pour tout le monde, vous allez implémenter ce tampon selon mes spécifications précises.
Présentation
Vous disposez d'un tampon d'insertion uniquement dont la taille augmente à mesure que des éléments y sont ajoutés. Le tampon est indexé zéro, et également indexé modulo sa taille actuelle. La règle spéciale pour ce défi est la suivante:
- Pour insérer un élément à l' index i signifie pour calculer j ,
j = i % buffer.length()
et insérer le nouvel élément après l' jème élément dans la liste.
Le seul cas particulier est si le tampon est vide, car le module arithmétique zéro ne fonctionne pas. Ainsi, si le tampon est actuellement vide, le nouvel élément sera l'index 0 .
Si le tampon n'a qu'un seul élément, vous insérez toujours après le 0ème élément. Ce n'est là qu'un exemple du cas général.
Si le tampon contient 6 éléments: [4, 9, 14, 8, 5, 2]
et on vous dit d'insérer un nouvel élément 10
à l'index 15 , vous le trouvez 15 % 6 == 3
, puis insérez le nouveau 10
après l' 8
index 3 qui donne un tampon résultant de [4, 9, 14, 8, 10, 5, 2]
Problème
Écrivez une fonction ou un programme qui prend une liste ordonnée d'entiers positifs et d'indices entiers positifs auxquels les insérer.
Commencez avec un tampon vide et ajoutez les entiers spécifiés au tampon aux indices correspondants.
Sortez la liste ordonnée des entiers qui sont dans le tampon une fois que toutes les insertions spécifiées ont été effectuées.
C'est un défi de code-golf, donc le code le plus court l'emporte.
Directives de saisie
Vous pouvez prendre les listes de saisie comme bon vous semble. Exemples:
- Liste des paires:
[ [1,1], [2,4], [3,9], [4,16], [5,25]...]
- Liste d'articles et liste d'index:
[1, 2, 3, 4, 5...], [1, 4, 9, 16, 25]
- Aplati:
[1, 1, 2, 4, 3, 9, 4, 16, 5, 25 ...]
- etc.
Vous pouvez supposer que l'entrée contient toujours au moins un élément et l'index correspondant.
Cas de test
Cas de carrés d'en haut:
[(1, 1), (2, 4), (3, 9), (4, 16), (5, 25), (6, 36), (7, 49), (8, 64)] -> [1, 2, 8, 7, 6, 5, 4, 3]
Je les ai générés au hasard:
[(11, 9), (13, 14)] -> [11, 13]
[(1, 18), (11, 7), (3, 35), (16, 22)] -> [1, 11, 16, 3]
[(3, 16), (16, 37), (0, 28), (18, 24)] -> [3, 18, 0, 16]
[(7, 26), (8, 20), (11, 39), (1, 23), (17, 27)] -> [7, 8, 11, 1, 17]
[(15, 35), (17, 7), (16, 15), (1, 13), (2, 6), (11, 34)] -> [15, 17, 1, 2, 16, 11]
[(2, 13), (1, 20), (16, 25), (8, 21), (5, 2), (16, 37), (3, 0)] -> [2, 3, 8, 1, 16, 5, 16]
[(6, 20), (15, 15), (12, 26), (10, 27), (17, 13), (7, 18), (4, 16)] -> [6, 10, 17, 12, 7, 4, 15]
[(18, 9), (5, 34), (15, 4), (12, 29), (2, 5), (7, 0), (7, 10), (16, 38)] -> [18, 7, 15, 2, 16, 5, 7, 12]
[(0, 12), (12, 0), (4, 16), (15, 12), (6, 28), (8, 10), (11, 24), (0, 25)] -> [0, 11, 8, 6, 15, 0, 4, 12]
[(6, 12), (14, 13), (10, 33), (11, 35), (1, 3), (0, 28), (15, 27), (8, 10), (1, 2)] -> [6, 14, 10, 1, 11, 8, 15, 0, 1]
[(2, 29), (19, 30), (18, 17), (13, 3), (0, 21), (19, 19), (11, 13), (12, 31), (3, 25)] -> [2, 13, 3, 11, 0, 12, 19, 18, 19]
Implémentation de référence Python3
def f(inputs):
# `inputs` is a list of pairs
buff = []
for item, index in inputs:
if len(buff) == 0:
buff.insert(0, item)
else:
insert_after = index % len(buff)
buff.insert(insert_after+1, item)
return buff
Réponses:
MATL ,
2422 octetsL'entrée est une matrice (avec
;
comme séparateur de ligne) contenant les valeurs de la première ligne et les indices de la seconde.La sortie est un tableau de colonnes, affiché sous forme de nombres séparés par des retours à la ligne.
Essayez-le en ligne! Ou vérifiez tous les cas de test , chaque résultat étant affiché sur une seule ligne.
Explication
la source
Perl, 37 octets
35 octets de code + 2 octets pour les
-lp
drapeaux.Essayez-le en ligne!
L'implémentation est assez simple,
splice
insère dans le tableau@F
à l'index1+<>%(@F||1)
(note qui@F||1
gère le cas du tableau étant vide).Juste quelques mots sur les accolades (apparemment) inégalées
}{
(parce que j'avais un commentaire à ce sujet, et je pense que c'est assez bizarre pour les gens qui ne connaissent pas Perl), et c'est une astuce assez courante dans les golfs de Perl: le-p
drapeau entoure le code avec (grossièrement)while(<>){ CODE } continue { print }
, (lecontinue
est exécuté après chaque itération). Donc, avec ceux inégalés}{
, je change mon code enwhile(<>) { CODE}{ } continue { print }
. Il crée donc un bloc vide juste après mon code (mais ce n'est pas un problème), et lecontinue
n'est exécuté qu'une seule fois, après lewhile
(c'est-à-dire lorsque toutes les entrées ont été lues).la source
}{
me}{
me rappelle cette illusionES6 (Javascript),
58,57,53, 50 octetsGolfé
Prend un tableau de paires index-valeur, en entrée.
MODIFICATIONS
&&
pour renvoyer la valeur, -1 octet|0
(car l'épissure peut apparemment bien gérer NaN), -2 octetsb=[]
un deuxième "argument" pour mapper () , -2 octets (Thx @ETHproductions!)Tester
la source
a=>a.map(e=>...,b=[])&&b
e=>
à(e,i)=>
et en utilisant aui
lieu deb.length
Haskell ,
7069 octetsEssayez-le en ligne! Utilisation:
foldl(!)[] [(1,5),(2,4),(3,7)]
. Un octet enregistré grâce à @nimi!Explication:
Solution sans calculer le module: (90 octets)
Essayez-le en ligne!
la source
j<-1+i`mod`length b
enregistre un octet.Python 2 ,
64625856 octetsMerci à @xnor d'avoir joué au golf sur 2 octets!
Essayez-le en ligne!
la source
(len(x)or 1)
au lieu d'initialiser la longueur?len(x or[0])
et la-~len(x[1:])
cravate.Python 2 ,
6260 octetsPrend la saisie sous forme de liste de paires, imprime le résultat. Edit: Outgolfed par Dennis
Essayez-le en ligne!
C'est assez simple - parcourez l'entrée, insérez les éléments au bon endroit, puis imprimez le résultat. Décider dans quel index insérer est fait avec
1+y%(len(b)or 1)
. Il s'agit de la méthode standard pour effectuer une indexation modulaire, avec leor 1
pour gérer le cas de bord d'une liste vide.la source
JavaScript (ES6), 60 octets
Extrait de test
Afficher l'extrait de code
la source
V ,
384035 octetsCette réponse plie la définition de liste, et n'est normalement pas un langage que vous utiliseriez pour la manipulation de liste, mais je voulais utiliser
[count]/{regex}
que j'ai récemment ajouté à V. L'entrée est prise comme[index] [num] [index] [num] ...
et retournée comme[num] [num] [num]
.Essayez-le en ligne!
Hexdump pour 2 personnages cachés:
Explication
Le code
dG@"
formate toutes les\d+ \d+
paires de sorte qu'une liste 1 2 3 4 5 6 se termine commepuis
dG@"
exécute tout cela en tant que code V comme suit:la source
PHP,
7292 octetsprend l'entrée aplatie à partir des arguments de la ligne de commande. Courez avec
-nr
.la source
Fatal error: Uncaught DivisionByZeroError: Modulo by zero
, corrigé cela, puis essayé1 1 1 2 1 3
et obtenu[1=>null]
en sortie au lieu de[1,3,2]
j+1
plutôt que d'insérer aprèsj
, non?18 1 7 11 35 3 22 16
=>[1,11,16]
plutôt que[1,11,16,3]
insert
mot - clé. Merci; fixé.Java 7,
125124 octetsAccepte une liste plate de valeurs suivie d'index. Pour le cas de test des carrés, l'entrée serait
new int[] {1, 2, 3, 4, 5, 6, 7, 8, 1, 4, 9, 16, 25, 36, 49, 64}
Essayez-le en ligne!
la source
Mathematica, 62 octets
Fonction pure dont le premier argument
#
devrait être une liste de paires. En commençant par la liste vide{}
, vous avez laisséFold
la liste d'entrée#
avec la fonction suivante:la source
Perl 6 , 51 octets
Prend l'entrée aplatie.
la source
Clojure, 87 octets
la source