sfondo
Al giorno d'oggi i programmatori non riescono a mantenere dritti i loro buffer! Una fonte comune di errore sta tentando di utilizzare un indice di array troppo grande per il buffer. Il tuo compito è implementare un buffer in cui indici di grandi dimensioni sono ridotti a una dimensione gestibile dal buffer. Poiché decido esattamente ciò che è meglio per tutti, implementerai questo buffer secondo le mie specifiche precise.
Panoramica
Hai un buffer di solo inserimento che aumenta di dimensioni man mano che gli elementi vengono aggiunti ad esso. Il buffer è a zero, e anche a modulo indicizzato la sua dimensione attuale. La regola speciale per questa sfida è questa:
- Per inserire un elemento di indice i mezzi per calcolare j ,
j = i % buffer.length()e inserire il nuovo elemento dopo il j-esimo elemento della lista.
L'unico caso speciale è se il buffer è vuoto, poiché il modulo zero aritmetico non funziona. Pertanto, se il buffer è attualmente vuoto, il nuovo elemento sarà indice 0 .
Se il buffer ha un solo elemento, allora si inserisce sempre dopo il 0 ° elemento. Questa è solo un'istanza del caso generale.
Se il buffer contiene 6 elementi: [4, 9, 14, 8, 5, 2]e ti viene chiesto di inserire un nuovo elemento 10nell'indice 15 , lo trovi 15 % 6 == 3, quindi inserisci il nuovo 10dopo l' 8indice 3 che fornisce un buffer risultante di [4, 9, 14, 8, 10, 5, 2]
Problema
Scrivi una funzione o un programma che includa un elenco ordinato di numeri interi positivi e indici interi positivi in cui inserirli.
Inizia con un buffer vuoto e aggiungi gli interi specificati al buffer negli indici corrispondenti.
Emette l'elenco ordinato di numeri interi che si trovano nel buffer dopo aver effettuato tutti gli inserimenti specificati.
Questa è una sfida di code-golf, quindi vince il codice più corto.
Linee guida di input
Puoi prendere le liste di input come preferisci. Esempi:
- Elenco di coppie:
[ [1,1], [2,4], [3,9], [4,16], [5,25]...] - Elenco articoli ed elenco indice:
[1, 2, 3, 4, 5...], [1, 4, 9, 16, 25] - appiattito:
[1, 1, 2, 4, 3, 9, 4, 16, 5, 25 ...] - eccetera.
Si può presumere che l'input contenga sempre almeno un elemento e un indice corrispondente.
Casi test
Caso quadrati dall'alto:
[(1, 1), (2, 4), (3, 9), (4, 16), (5, 25), (6, 36), (7, 49), (8, 64)] -> [1, 2, 8, 7, 6, 5, 4, 3]
Ho generato questi in modo casuale:
[(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]
Implementazione di riferimento di 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