Arka fon
Programcılar bugünlerde tamponlarını düz tutuyor gibi görünmüyor! Yaygın bir hata kaynağı, arabellek için çok büyük bir dizi dizini kullanmaya çalışıyor. Göreviniz, büyük dizinlerin arabelleğin işleyebileceği bir boyuta indirgendiği bir tampon uygulamaktır. Çünkü herkes için neyin en iyisi olduğuna tam olarak karar verdim, bu tamponu tam özelliklere göre uygulayacaksın.
genel bakış
Öğeler eklendikçe boyut olarak büyüyen yalnızca ekleme arabelleğiniz var. Tampon, sıfır indeksli ve ayrıca şu anki büyüklüğünde modulo indekslenmiştir . Bu meydan okuma için özel kural şudur:
- Dizinde bir öğe eklemek için i hesaplamak için anlamı j ,
j = i % buffer.length()
ve sonra yeni bir öğe eklemek j listesinde öğe.
Tek özel durum, eğer tampon boşsa, aritmetik modulo sıfır çalışmıyor. Dolayısıyla, eğer tampon şu anda boşsa, yeni madde endeks 0 olacaktır .
Arabellek yalnızca bir öğe içeriyorsa , her zaman 0 öğeden sonra eklersiniz . Bu genel davanın sadece bir örneği.
Arabellek 6 öğe içeriyorsa: [4, 9, 14, 8, 5, 2]
ve 15.10
dizine yeni bir öğe eklemeniz istenirse , bunu bulursunuz ve ardından yenisini, sonuçtaki bir arabellek veren 3 dizininden sonra eklersiniz. 15 % 6 == 3
10
8
[4, 9, 14, 8, 10, 5, 2]
Sorun
Sıralı pozitif tamsayılar listesine ve bunların ekleneceği pozitif tamsayı indekslerine giren bir işlev veya program yazın.
Boş bir tamponla başlayın ve belirtilen tamsayıları ilgili indekslerdeki tampon belleğe ekleyin.
Belirtilen tüm eklemeler yapıldıktan sonra tamponda bulunan tam sayıların sıralı listesini çıkar.
Bu bir kod golf mücadelesidir, bu yüzden en kısa kod kazanır.
Giriş kuralları
Giriş listelerini uygun gördüğünüz halde alabilirsiniz. Örnekler:
- Çiftlerin listesi:
[ [1,1], [2,4], [3,9], [4,16], [5,25]...]
- Öğe listesi ve dizin listesi:
[1, 2, 3, 4, 5...], [1, 4, 9, 16, 25]
- düzleşmiş:
[1, 1, 2, 4, 3, 9, 4, 16, 5, 25 ...]
- vb.
Girişin her zaman en az bir öğe ve karşılık gelen dizin içerdiğini varsayabilirsiniz.
Test durumları
Yukarıdaki kareler durumu:
[(1, 1), (2, 4), (3, 9), (4, 16), (5, 25), (6, 36), (7, 49), (8, 64)] -> [1, 2, 8, 7, 6, 5, 4, 3]
Bunları rastgele oluşturdum:
[(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 referans uygulaması
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