Lý lịch
Các lập trình viên ngày nay dường như không thể giữ bộ đệm của họ thẳng! Một nguồn lỗi phổ biến là cố gắng sử dụng một chỉ mục mảng quá lớn cho bộ đệm. Nhiệm vụ của bạn là thực hiện một bộ đệm trong đó các chỉ số lớn được giảm xuống kích thước mà bộ đệm có thể xử lý. Bởi vì tôi quyết định chính xác những gì tốt nhất cho mọi người, bạn sẽ triển khai bộ đệm này theo thông số kỹ thuật chính xác của tôi.
Tổng quan
Bạn có một bộ đệm chỉ chèn tăng kích thước khi các phần tử được thêm vào nó. Bộ đệm được lập chỉ mục bằng không, và cũng được lập chỉ mục modulo kích thước hiện tại của nó. Quy tắc đặc biệt cho thử thách này là:
- Để chèn một mục tại index i có nghĩa là để tính toán j ,
j = i % buffer.length()và chèn mục mới sau khi thứ j mục trong danh sách.
Trường hợp đặc biệt duy nhất là nếu bộ đệm trống, vì modulo số học không hoạt động. Do đó, nếu bộ đệm hiện đang trống, mục mới sẽ là chỉ số 0 .
Nếu bộ đệm chỉ có một mục, thì bạn luôn chèn sau mục thứ 0 . Đây chỉ là một ví dụ của trường hợp chung.
Nếu bộ đệm chứa 6 mục: [4, 9, 14, 8, 5, 2]và bạn được yêu cầu chèn một mục mới 10vào chỉ mục 15 , bạn tìm thấy mục đó 15 % 6 == 3, sau đó chèn mục mới 10vào sau 8mục 3 , cung cấp bộ đệm kết quả là [4, 9, 14, 8, 10, 5, 2]
Vấn đề
Viết hàm hoặc chương trình nhận trong danh sách các số nguyên dương có thứ tự và các chỉ số nguyên dương để chèn chúng.
Bắt đầu với một bộ đệm trống và thêm các số nguyên được chỉ định vào bộ đệm tại các chỉ số tương ứng.
Xuất ra danh sách các số nguyên có trong bộ đệm sau khi tất cả các lần chèn được chỉ định đã được thực hiện.
Đây là một thử thách chơi gôn, vì vậy mã ngắn nhất sẽ thắng.
Hướng dẫn đầu vào
Bạn có thể lấy danh sách đầu vào tuy nhiên bạn thấy phù hợp. Ví dụ:
- Danh sách các cặp:
[ [1,1], [2,4], [3,9], [4,16], [5,25]...] - Danh sách mục và danh sách chỉ mục:
[1, 2, 3, 4, 5...], [1, 4, 9, 16, 25] - Làm phẳng:
[1, 1, 2, 4, 3, 9, 4, 16, 5, 25 ...] - v.v.
Bạn có thể giả sử đầu vào luôn chứa ít nhất một mục và chỉ mục tương ứng.
Các trường hợp thử nghiệm
Trường hợp hình vuông từ trên cao:
[(1, 1), (2, 4), (3, 9), (4, 16), (5, 25), (6, 36), (7, 49), (8, 64)] -> [1, 2, 8, 7, 6, 5, 4, 3]
Tôi đã tạo ngẫu nhiên những thứ này:
[(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]
Triển khai tham chiếu 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