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 10
di indeks 15 , Anda menemukan itu 15 % 6 == 3
, dan kemudian memasukkan yang baru 10
setelah 8
pada 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
Jawaban:
MATL ,
2422 byteInput adalah matriks (dengan
;
pemisah baris) yang berisi nilai-nilai di baris pertama dan indeks di baris kedua.Output adalah array kolom, ditampilkan sebagai angka yang dipisahkan oleh baris baru.
Cobalah online! Atau verifikasi semua kasus uji , dengan setiap hasil ditampilkan pada satu baris.
Penjelasan
sumber
Perl, 37 byte
35 byte kode + 2 byte untuk
-lp
flag.Cobalah online!
Implementasinya cukup lurus ke depan,
splice
memasukkan array@F
pada indeks1+<>%(@F||1)
(catatan yang@F||1
menangani kasus array kosong).Hanya beberapa kata tentang kawat gigi (tampaknya) yang tak tertandingi
}{
(karena saya punya komentar tentang itu, dan saya pikir itu sangat aneh untuk orang-orang yang tidak tahu Perl), dan itu adalah trik yang cukup umum di golfing Perl:-p
bendera mengelilingi kode dengan (kurang lebih)while(<>){ CODE } continue { print }
, (continue
dijalankan setelah setiap iterasi). Jadi dengan orang-orang yang tak tertandingi}{
, saya mengubah kode saya untukwhile(<>) { CODE}{ } continue { print }
. Jadi itu menciptakan blok kosong tepat setelah kode saya (tapi itu tidak masalah), dancontinue
dijalankan hanya sekali, setelahwhile
(mis. Ketika semua input telah dibaca).sumber
}{
membuatku gila ...}{
mengingatkan saya pada ilusi iniES6 (Javascript),
58,57,53, 50 byteGolf
Mengambil array pasangan nilai indeks, sebagai input.
EDIT
&&
untuk mengembalikan nilai, -1 byte|0
(karena sambungan tampaknya dapat menangani NaN dengan baik), -2 byteb=[]
"argumen" kedua untuk memetakan () , -2 byte (Thx @ETHproductions!)Uji
sumber
a=>a.map(e=>...,b=[])&&b
e=>
ke(e,i)=>
dan menggunakani
bukannyab.length
Haskell ,
7069 byteCobalah online! Penggunaan:
foldl(!)[] [(1,5),(2,4),(3,7)]
. Disimpan satu byte berkat @nimi!Penjelasan:
Solusi tanpa menghitung modulus: (90 byte)
Cobalah online!
sumber
j<-1+i`mod`length b
menghemat satu byte.Python 2 ,
64625856 byteTerima kasih kepada @xnor karena bermain golf 2 byte!
Cobalah online!
sumber
(len(x)or 1)
alih - alih menginisialisasi panjang?len(x or[0])
dan-~len(x[1:])
dasi.Python 2 ,
6260 byteMengambil input sebagai daftar pasangan, mencetak hasilnya. Sunting: Dikalahkan oleh Dennis
Cobalah online!
Ini cukup sederhana - loop melalui input, memasukkan item ke tempat yang benar, dan kemudian cetak hasilnya. Memutuskan indeks mana yang akan dimasukkan
1+y%(len(b)or 1)
. Ini adalah cara standar untuk melakukan pengindeksan modular, denganor 1
menangani kasus tepi daftar kosong.sumber
JavaScript (ES6), 60 byte
Cuplikan tes
Tampilkan cuplikan kode
sumber
V ,
384035 byteJawaban ini membengkokkan definisi daftar, dan biasanya bukan bahasa yang akan Anda gunakan untuk manipulasi daftar, tetapi saya ingin menggunakan
[count]/{regex}
yang baru-baru ini saya tambahkan ke V. Masukan diambil seperti[index] [num] [index] [num] ...
dan dikembalikan seperti[num] [num] [num]
.Cobalah online!
Hexdump untuk 2 karakter tersembunyi:
Penjelasan
Kode hingga
dG@"
memformat semua\d+ \d+
pasangan sehingga daftar 1 2 3 4 5 6 akan berakhir sepertidan kemudian
dG@"
jalankan semua itu sebagai kode V seperti berikut:sumber
PHP,
7292 bytemengambil input yang diratakan dari argumen baris perintah. Jalankan dengan
-nr
.sumber
Fatal error: Uncaught DivisionByZeroError: Modulo by zero
, memperbaikinya, lalu mencoba1 1 1 2 1 3
dan mendapatkan[1=>null]
sebagai keluaran alih-alih[1,3,2]
j+1
daripada memasukkan setelahj
, bukan?18 1 7 11 35 3 22 16
=>[1,11,16]
daripada[1,11,16,3]
insert
kata kunci. Terima kasih; tetap.Java 7,
125124 byteMenerima daftar nilai rata yang diikuti oleh indeks. Untuk kasus uji kuadrat, inputnya adalah
new int[] {1, 2, 3, 4, 5, 6, 7, 8, 1, 4, 9, 16, 25, 36, 49, 64}
Cobalah online!
sumber
Mathematica, 62 byte
Fungsi murni dengan argumen pertama
#
diharapkan menjadi daftar pasangan. Dimulai dengan daftar kosong{}
, meninggalkanFold
daftar input#
dengan fungsi berikut:sumber
Perl 6 , 51 byte
Mengambil input yang rata.
sumber
Clojure, 87 byte
sumber