Fondo
¡Los programadores en estos días parecen no poder mantener sus buffers rectos! Una fuente común de error es intentar usar un índice de matriz que es demasiado grande para el búfer. Su tarea es implementar un búfer donde los índices grandes se reduzcan a un tamaño que el búfer pueda manejar. Como decido exactamente qué es lo mejor para todos, implementará este búfer según mis especificaciones precisas.
Visión general
Tiene un búfer de solo inserción que crece en tamaño a medida que se le agregan elementos. El tampón es cero indexados, y también indexados modulo su tamaño actual. La regla especial para este desafío es esta:
- Para insertar un elemento en el índice i medio para calcular j ,
j = i % buffer.length()e insertar el nuevo elemento después de que el j-ésimo elemento de la lista.
El único caso especial es si el búfer está vacío, ya que el módulo aritmético cero no funciona. Por lo tanto, si el búfer está actualmente vacío, el nuevo elemento será el índice 0 .
Si el búfer tiene solo un elemento, siempre está insertando después del elemento 0 . Esta es solo una instancia del caso general.
Si el búfer contiene 6 elementos: [4, 9, 14, 8, 5, 2]y se le indica que inserte un nuevo ítem 10en el índice 15 , lo encuentra 15 % 6 == 3y luego inserta el nuevo 10después del 8índice 3, lo que da un búfer resultante de [4, 9, 14, 8, 10, 5, 2]
Problema
Escriba una función o programa que tome una lista ordenada de enteros positivos e índices de enteros positivos en los que insertarlos.
Comience con un búfer vacío y agregue los enteros especificados al búfer en los índices correspondientes.
Salida de la lista ordenada de enteros que están en el búfer después de que se hayan realizado todas las inserciones especificadas.
Este es un desafío de código de golf, por lo que gana el código más corto.
Pautas de entrada
Puede tomar las listas de entrada como mejor le parezca. Ejemplos:
- Lista de pares:
[ [1,1], [2,4], [3,9], [4,16], [5,25]...] - Lista de artículos y lista de índice:
[1, 2, 3, 4, 5...], [1, 4, 9, 16, 25] - Aplanado:
[1, 1, 2, 4, 3, 9, 4, 16, 5, 25 ...] - etc.
Puede suponer que la entrada siempre contiene al menos un elemento y el índice correspondiente.
Casos de prueba
Caja de cuadrados desde arriba:
[(1, 1), (2, 4), (3, 9), (4, 16), (5, 25), (6, 36), (7, 49), (8, 64)] -> [1, 2, 8, 7, 6, 5, 4, 3]
Los generé al azar:
[(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]
Implementación de referencia de 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