Latar Belakang
Pemrogram hari ini sepertinya tidak bisa menjaga buffer mereka tetap lurus! Sumber kesalahan yang umum adalah mencoba menggunakan indeks array yang terlalu besar untuk buffer. Tugas Anda adalah mengimplementasikan buffer di mana indeks besar dikurangi menjadi ukuran yang bisa ditangani oleh buffer. Karena saya memutuskan dengan tepat apa yang terbaik untuk semua orang, Anda akan mengimplementasikan buffer ini ke spesifikasi saya yang tepat.
Ikhtisar
Anda memiliki penyangga khusus penyisipan yang tumbuh dalam ukuran ketika elemen ditambahkan ke dalamnya. Buffer diindeks nol, dan modulo juga diindeks ukurannya saat ini. Aturan khusus untuk tantangan ini adalah ini:
- Untuk memasukkan item pada indeks i berarti menghitung j ,
j = i % buffer.length()dan memasukkan item baru setelah item ke - j dalam daftar.
Satu-satunya kasus khusus adalah jika buffer kosong, karena modulo nol aritmatika tidak berfungsi. Jadi, jika buffer saat ini kosong, item baru akan menjadi indeks 0 .
Jika buffer hanya memiliki satu item, maka Anda selalu memasukkan setelah item ke - 0 . Ini hanya satu contoh dari kasus umum.
Jika buffer berisi 6 item: [4, 9, 14, 8, 5, 2]dan Anda diminta untuk memasukkan item baru 10di indeks 15 , Anda menemukan itu 15 % 6 == 3, dan kemudian memasukkan yang baru 10setelah 8pada indeks 3 yang memberikan buffer yang dihasilkan dari [4, 9, 14, 8, 10, 5, 2]
Masalah
Tulis fungsi atau program yang memasukkan daftar bilangan bulat positif yang terurut, dan indeks bilangan bulat positif untuk memasukkannya.
Mulai dengan buffer kosong, dan tambahkan bilangan bulat yang ditentukan ke buffer di indeks yang sesuai.
Keluarkan daftar bilangan bulat yang diurutkan dalam buffer setelah semua penyisipan yang ditentukan telah dibuat.
Ini adalah tantangan kode-golf, sehingga kode terpendek menang.
Panduan input
Anda dapat mengambil daftar input sesuai keinginan Anda. Contoh:
- Daftar pasangan:
[ [1,1], [2,4], [3,9], [4,16], [5,25]...] - Daftar item dan daftar indeks:
[1, 2, 3, 4, 5...], [1, 4, 9, 16, 25] - Diratakan:
[1, 1, 2, 4, 3, 9, 4, 16, 5, 25 ...] - dll.
Anda dapat menganggap input selalu mengandung setidaknya satu item dan indeks yang sesuai.
Uji kasus
Kotak kuadrat dari atas:
[(1, 1), (2, 4), (3, 9), (4, 16), (5, 25), (6, 36), (7, 49), (8, 64)] -> [1, 2, 8, 7, 6, 5, 4, 3]
Saya membuat ini secara acak:
[(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]
Implementasi referensi 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