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 10après l' 8index 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