背景
如今,程序员似乎无法保持其缓冲水平!错误的常见来源是尝试使用对于缓冲区而言太大的数组索引。您的任务是实现一个缓冲区,将大索引减小到缓冲区可以处理的大小。因为我确定了最适合每个人的最佳方法,所以您将根据我的精确规范实施此缓冲区。
总览
您有一个仅插入的缓冲区,该缓冲区的大小会随着向其添加元素而增加。缓冲区是零索引的,并且也以其当前大小为模索引。此挑战的特殊规则是:
- 在索引i处插入项目意味着要计算j,
j = i % buffer.length()并将新项目插入列表中第j个项目之后。
唯一的特殊情况是缓冲区为空,因为算术模零不起作用。因此,如果缓冲区当前为空,则新项将为索引0。
如果缓冲区只有一个项目,那么您总是在第0个项目之后插入。这只是一般情况的一种情况。
如果缓冲区包含6个项目:[4, 9, 14, 8, 5, 2]并且被告知要10在索引15处插入新项目,则会找到15 % 6 == 3,然后10在8at索引3之后插入新项,从而得到结果缓冲区为 [4, 9, 14, 8, 10, 5, 2]
问题
编写一个函数或程序,该函数或程序接受正整数的有序列表以及要插入它们的正整数索引。
从空缓冲区开始,然后将指定的整数添加到缓冲区的相应索引处。
完成所有指定的插入之后,输出缓冲区中整数的有序列表。
这是一个代码挑战,所以最短的代码胜出。
输入准则
您可以选择输入列表,但您认为合适。例子:
- 配对列表:
[ [1,1], [2,4], [3,9], [4,16], [5,25]...] - 项目列表和索引列表:
[1, 2, 3, 4, 5...], [1, 4, 9, 16, 25] - 展平:
[1, 1, 2, 4, 3, 9, 4, 16, 5, 25 ...] - 等等
您可以假设输入始终包含至少一项和相应的索引。
测试用例
从上面看方格:
[(1, 1), (2, 4), (3, 9), (4, 16), (5, 25), (6, 36), (7, 49), (8, 64)] -> [1, 2, 8, 7, 6, 5, 4, 3]
我随机生成了这些:
[(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参考实现
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