Hintergrund
Heutzutage können Programmierer ihre Puffer nicht gerade halten! Eine häufige Fehlerquelle ist der Versuch, einen Array-Index zu verwenden, der für den Puffer zu groß ist. Ihre Aufgabe ist es, einen Puffer zu implementieren, in dem große Indizes auf eine Größe reduziert werden, die der Puffer verarbeiten kann. Da ich genau entscheide, was für jeden das Beste ist, implementieren Sie diesen Puffer nach meinen genauen Spezifikationen.
Überblick
Sie haben einen Puffer nur zum Einfügen, der größer wird, wenn Elemente hinzugefügt werden. Der Puffer ist nullindexiert und auch modulo seiner aktuellen Größe indexiert . Die Sonderregel für diese Herausforderung lautet:
- So fügen Sie ein Element am Index i bedeuten , zu berechnen , j ,
j = i % buffer.length()und setzen Sie das neue Element nach dem j - ten Elemente in der Liste.
Der einzige Sonderfall ist, wenn der Puffer leer ist, da das arithmetische Modulo Null nicht funktioniert. Wenn der Puffer derzeit leer ist, erhält das neue Element den Index 0 .
Wenn der Puffer nur ein Element enthält, wird immer nach dem 0. Element eingefügt . Dies ist nur ein Beispiel für den allgemeinen Fall.
Wenn der Puffer 6 Elemente enthält: [4, 9, 14, 8, 5, 2]und Sie aufgefordert werden, ein neues Element 10bei Index 15 einzufügen , finden Sie das 15 % 6 == 3und fügen Sie das Neue 10nach dem 8bei Index 3 ein , was einen resultierenden Puffer von ergibt [4, 9, 14, 8, 10, 5, 2]
Problem
Schreiben Sie eine Funktion oder ein Programm, das eine geordnete Liste positiver Ganzzahlen und positive Ganzzahlindizes zum Einfügen enthält.
Beginnen Sie mit einem leeren Puffer und fügen Sie die angegebenen Ganzzahlen an den entsprechenden Indizes zum Puffer hinzu.
Gibt die geordnete Liste der Ganzzahlen aus, die sich im Puffer befinden, nachdem alle angegebenen Einfügungen vorgenommen wurden.
Dies ist eine Code-Golf-Herausforderung, also gewinnt der kürzeste Code.
Eingaberichtlinien
Sie können die Eingabelisten nach Belieben übernehmen. Beispiele:
- Liste der Paare:
[ [1,1], [2,4], [3,9], [4,16], [5,25]...] - Artikelliste und Indexliste:
[1, 2, 3, 4, 5...], [1, 4, 9, 16, 25] - Abgeflacht:
[1, 1, 2, 4, 3, 9, 4, 16, 5, 25 ...] - etc.
Sie können davon ausgehen, dass die Eingabe immer mindestens ein Element und einen entsprechenden Index enthält.
Testfälle
Quadrate von oben:
[(1, 1), (2, 4), (3, 9), (4, 16), (5, 25), (6, 36), (7, 49), (8, 64)] -> [1, 2, 8, 7, 6, 5, 4, 3]
Ich habe diese zufällig generiert:
[(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]
Python3-Referenzimplementierung
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