Tugas
Diberikan daftar input bilangan bulat x 1 ... x n , hitung daftar peringkat r 1 ... r n (permutasi dari {1 ... n} ) sehingga x r 1 ≤ x r 2 ≤ ... ≤ x r n . Kemudian, untuk setiap x i , ganti pangkatnya dengan rata-rata aritmatika dari semua nilai dalam x yang sama dengan x i . (Yaitu, setiap kali ada ikatan antara nilai yang sama dalam x , cukup mendistribusikan ulang peringkat di antara mereka semua.) Keluarkan daftar peringkat yang dimodifikasi r ' 1 ... r'n .
(Untuk geeks statistik: peringkat pengamatan seperti itu digunakan dalam uji Mann-Whitney U (metode dua, langkah 1.))
Contoh
Diberikan daftar input [3, -6, 3, 3, 14, 3] , daftar peringkat pertama adalah [2, 1, 3, 4, 6, 5] , yang akan mengurutkan daftar menjadi [-6, 3, 3, 3, 3, 14] . Kemudian, peringkat untuk semua 3 detik dalam daftar input disamakan menjadi (2 + 3 + 4 + 5) ÷ 4 = 3.5 . Output akhir adalah [3.5, 1, 3.5, 3.5, 6, 3.5] .
Uji kasus
[4, 1, 4] -> [2.5, 1.0, 2.5]
[5, 14, 14, 14, 14, 5, 14] -> [1.5, 5.0, 5.0, 5.0, 5.0, 1.5, 5.0]
[9, 9, -5, -5, 13, -5, 13, 9, 9, 13] -> [5.5, 5.5, 2.0, 2.0, 9.0, 2.0, 9.0, 5.5, 5.5, 9.0]
[13, 16, 2, -5, -5, -5, 13, 16, -5, -5] -> [7.5, 9.5, 6.0, 3.0, 3.0, 3.0, 7.5, 9.5, 3.0, 3.0]
Aturan
Ini adalah kode-golf , jadi kode terpendek dalam byte menang.
Jawaban:
Jelly ,
108 byteDisimpan 2 byte dengan menggunakan
cmp
trik dari jawaban xnor .Cobalah online! atau verifikasi semua kasus uji .
Bagaimana itu bekerja
sumber
Pyth, 12
Test Suite
Untuk setiap nilai ini menghitung rata-rata aritmatika dari
[1..frequency]
dan menambahkan jumlah nilai kurang dari yang sekarang.Ini berfungsi karena untuk setiap nilai kami akan menghitung:
yang dapat kita sederhanakan menjadi:
dan lagi ke:
Namun, di Pyth, pemain golf menghitung puncak pertama dengan menggunakan mean builtin, daripada formula lainnya ini.
sumber
Python 2, 51 byte
Untuk setiap elemen
y
,cmp
ekspresi memberikan 2 poin untuk masing-masing lebih kecilx
dan 1 poin untuk masing-masing samax
. Jumlah ini diubah kembali ke kisaran yang tepat dengan menambahkan 1 dan membagi dua. The2.
diperlukan untuk menghindari pembagian integer.Python 3, 52 byte
Python 3 tidak memiliki
cmp
, membutuhkan ekspresi Boolean (+2 byte), tetapi memiliki divisi float (-1 byte).sumber
MATL , 14 byte
Cobalah online! Atau verifikasi semua kasus uji (versi kode yang sedikit dimodifikasi; setiap hasil berada pada baris yang berbeda).
sumber
05AB1E , 13 byte
Kode:
Menggunakan pengkodean CP-1252 . Cobalah online! .
sumber
R,
1712 byteMembawa input dari output STDIN ke STDOUT. Jika output fleksibel maka kita dapat membuang
cat()
.Cukup sederhana, menggunakan peringkat bawaan yang standarnya rata-rata untuk pemutus dasi.
Digunakan:
sumber
cat()
, jika terserah saya. Saya tidak tahu apa konsensus komunitas itu.J, 18 byte
Berdasarkan solusi Dennis menggunakan metode xnor .
Menggunakan pendekatan lurus ke depan membutuhkan 24 byte untuk saya.
Pemakaian
sumber
Sebenarnya, 18 byte
Cobalah online!
Ini pada dasarnya adalah port dari solusi Python xnor .
Penjelasan:
sumber
APL, 17 karakter
Dengan asumsi daftar disimpan di
X
.Penjelasan:
Perhatikan bahwa APL mengevaluasi ekspresi dari kanan ke kiri. Kemudian:
∘.=⍨X
= diX∘.=X
mana∘.=
produk luar menggunakan=
fungsi diad. (Di mana Anda biasanya akan multiply. Jadi produk luar matematika dapat ditulis sebagai∘.×
.)y
dany
langsung dilipat menggunakan+
untuk memberikan vektor dari jumlah objek yang sama untuk setiap peringkat (sebut sajaz←+/y
).⍋X
mengembalikan jajaranX
y+.×⍋X
memberikan produk dalam matriks y kami dengan vektor ini.z
.sumber
Julia, 30 byte
Ini menggunakan pendekatan dari jawaban @ xnor . Julia punya
cmp
, tetapi itu tidak membuat vektor.Cobalah online!
sumber
JavaScript (ES6),
4948 byteSunting: Disimpan 1 byte dengan memformulasikan ulang ekspresi sehingga sekarang sepertinya @ xnor jawaban Python 3.
sumber