Tugas dalam tantangan ini adalah untuk memasukkan elemen-elemen dari array ke dalam tempat waktu. Input akan berupa susunan bilangan bulat positif yang tidak berkurang yang menunjukkan waktu kejadian, dan bilangan bulat yang mewakili ukuran setiap nampan. Mari kita mulai dengan sebuah contoh. Kami memanggil array input A
dan array output O
.
`A = [1,1,1,2,7,10]` and `bin_size = 2`.
`O = [4,0,0,1,1]`.
Mengapa ? Dengan a bin_size = 2
, kita akan memiliki interval berikut:, di (0,2], (2,4], (4,6], (6,8], (8,10]
mana empat item (1,1,1,2)
berada dalam interval pertama (0,2]
, tidak ada di interval kedua dan ketiga, satu 7
di interval (6,8]
, dan satu 10
di interval (8,10]
.
Kode Anda harus mempertimbangkan setiap interval panjang bin_size
mulai dari 0
dan menghitung berapa banyak angka A
di masing-masing. Anda harus selalu memasukkan ujung kanan sebuah interval ke nampan sehingga dalam contoh di atas 2
termasuk dalam hitungan 4
. Kode Anda harus berjalan dalam waktu linier dalam jumlah panjang input dan output.
Lebih banyak contoh:
`A = [1,2,7,12,15]` and `bin_size = 5`.
`O = [2, 1, 2]`.
`A = [1,2,7,12,15]` and `bin_size = 3`.
`O = [2,0,1,1,1]`.
Anda dapat mengasumsikan bahwa input dan output dapat diberikan dalam format apa pun yang Anda rasa nyaman. Anda dapat menggunakan bahasa dan perpustakaan apa saja yang Anda suka.
0
dibolehkan? Jadi,[2,0,1,1,1,0]
bukannya kembali[2,0,1,1,1]
?bin_size
, haruskah kita benar-benar menangani ini? Tampaknya sebagian besar jawaban memang benar, tetapi jika demikian, alangkah baiknya untuk menambahkan test case untuk skenario ini untuk mencegah kebingungan.Jawaban:
R , 48 byte
Cobalah online!
Sekali lagi,
table
dancut
ting untukfactor
melakukan trik untuk binning tersebut. Menghasilkan namavector
tempatnames
interval, dalam notasi interval, misalnya(0,5]
,.EDIT: Kembalikan ke versi sebelumnya yang berfungsi saat
s
tidak dibagin
.sumber
format you [most likely do not] find convenient
tanpatable
bagian.cut
membagi vektor menjadi faktor dengan level yang diberikan oleh interval, dantable
menghitung kemunculan setiap nilai unik dalam inputnya.0:ceiling(max(n)/s)*s
dengan reaplacingseq(0,max(n)+s-1,s)
. Ini berfungsi setidaknya untuk dua sampel dalam pertanyaan.1:max(n/s+1)*s-s
adalah perbaikan lain karena keduanya setaraOktaf , 36 byte
Cobalah online!
Keluar berburu telur Paskah dan membuat api unggun. Saya akan menambahkan penjelasan ketika saya punya waktu.
sumber
Perl 5
-a
-i
,3228 byteBerikan hitungan setelah opsi -i. Berikan setiap elemen input pada baris terpisah di STDIN
Cobalah online!
sumber
Python 2 , 62 byte
Cobalah online!
sumber
I[-1]/s+1
sebaiknya~-I[-1]/s+1
sebaliknya.05AB1E , 18 byte
Cobalah online!
sumber
A.count
max (A) , jadi run time tidak linier di len (A) + len (O) . Apakah itu benar atau saya salah?O(max(A)*max(A))
... jadi kuadrat pada maksimum A ... OP ditentukan itu harus linier dalam hal ... apa sebenarnya?APL + WIN, 23 byte
Meminta input layar dari nampan kemudian vektor bilangan bulat:
Penjelasan:
sumber
C ++ (gcc) ,
9083 byteCobalah online!
sumber
Java 8, 75 byte
Port of @ DeadPossum's Python 2 answer , jadi pastikan untuk mengunggah jawabannya!
Penjelasan:
Cobalah online.
sumber
Ruby , 60 byte
Cobalah online!
sumber
JavaScript (ES6), 60 byte / O (len (a) + maks (a) / n)
Disimpan 5 byte berkat @Neil
Mengambil input dalam sintaks currying
(a)(n)
.Cobalah online!
Atau hanya 43 byte / O (len (a)) jika elemen kosong diizinkan.
sumber
[...o].map(n=>n|0)
mendapatkan output pertama dari solusi kedua dalam lebih sedikit byte.Haskell ,
637570 byteUps, yang lebih pendek ini tidak linier tetapi kuadrat;
Cobalah online!
sumber
Pyth,
2322 byteCoba di sini
sumber
Ruby ,
5350 byteEdit: -3 byte oleh iamnotmaynard.
Cobalah online!
sumber
a.max
bukan kelipatanb
(misalnyaf[[1,1,1,2,7,10],3]
=>[4, 0, 1]
tetapi harus memberi[4, 0, 2]
). Saya telah mencoba pendekatan yang sama.[4, 0, 1, 1]
)Teka-teki ini pada dasarnya adalah Count-sort. Kami tidak tahu panjang output tanpa melalui input terlebih dahulu.
C (dentang) , 53 byte
Cobalah online!
Solusi ini mengambil parameter berikut: panjang
A
array input penyimpanan bin_size untuk Output. Harus cukup panjang dan mengembalikan output di O.l
b
O
Solusi ini memiliki kekurangan: ia tidak mengembalikan panjang larik keluaran O, dan karenanya penelepon tidak tahu berapa banyak yang harus dicetak.
Versi berikut mengatasi cacat itu:
C (dentang) , 79 byte
Cobalah online!
Dibutuhkan parameter tambahan
m
dan mengembalikan panjangO
di dalamnya. Harganya 26 byte.sumber
C (gcc) ,
102908986 byteCobalah online!
Terima kasih kepada Kevin Cruijssen karena memangkas 12 byte, dan ceilingcat untuk 4 byte lainnya!
sumber
int
, dan mengubah==1
ke>0
.O(n)
tepat waktu, sehingga Anda tidak dapat memiliki loop untuk bersarang ... (Jawaban C ++ Anda tampaknya baik-baik saja. Jadi saya telah memberi +1 pada yang itu. :))O(n)
dengan mengulang item input. Bahkan jika loop dalam hanya akan loop 2 kali sudah di atasO(n)
. Atau apakah saya salah paham akan sesuatu .. Saya harus mengakui -O
kadang-kadang bukan keahlian saya ..