(Paradoks, Paradoks, Paradoks yang paling cerdik)
Ini adalah bagian pertama dari seri multi-bagian yang terinspirasi oleh fungsi R yang berbeda.
Tugas
Mengingat dataset bilangan bulat positif, aku ingin kau menghitung ringkasan 5 jumlah dari . Namun, saya sedang bekerja pada dataset besar, jadi saya perlu kode Anda sekecil mungkin, memungkinkan saya untuk menyimpannya di komputer saya.
Ringkasan nomor lima terdiri dari:
- Nilai minimum
- Kuartil pertama (Q1)
- Median / Kuartil kedua (Q2)
- Kuartil ketiga (Q3)
- Nilai maksimum
Ada beberapa cara untuk mendefinisikan kuartil, tetapi kita akan menggunakan yang diterapkan oleh R:
Definisi:
- Minimum dan maksimum: masing-masing nilai terkecil dan terbesar.
- Median: nilai tengah jika memiliki jumlah entri ganjil, dan rata-rata aritmatika dari dua nilai paling tengah jika memiliki jumlah entri genap. Perhatikan bahwa ini berarti median mungkin nilai non-integer. Kami harus Menghitung Median sebelumnya .
- Kuartil Pertama dan Ketiga: Membagi data menjadi dua bagian, termasuk elemen pusat di setiap setengah jika memiliki jumlah entri ganjil, dan menemukan nilai median masing-masing setengah. Median bagian bawah adalah Kuartil Pertama, dan median bagian atas adalah Kuartil Ketiga.
Contoh:
. Median kemudian , dan bagian bawah adalah , menghasilkan kuartil pertama dari , dan bagian atas adalah , menghasilkan kuartil ketiga dari .
. Median adalah , dan bagian bawah adalah , menghasilkan kuartil pertama dari , dan bagian atas adalah , menghasilkan kuartil ketiga dari .
Aturan tambahan:
- Input adalah sebagai larik atau padanan terdekat bahasa Anda.
- Anda dapat menganggap array diurutkan dalam urutan naik atau turun (tapi harap tentukan yang mana).
- Anda dapat mengembalikan / mencetak hasil dalam urutan yang konsisten , dan dalam format fleksibel apa pun yang Anda suka, tetapi harap tunjukkan urutan dan format dalam jawaban Anda.
- Fungsi bawaan yang setara dengan
fivenum
diizinkan, tetapi harap juga terapkan solusi Anda sendiri. - Anda mungkin tidak menganggap masing-masing dari lima angka tersebut akan menjadi bilangan bulat.
- Penjelasan didorong.
- Ini kode-golf , jadi jawaban tersingkat di setiap bahasa menang!
Kasus uji yang dihasilkan secara acak
1 1 1 1 1 2 2 2 2 2 3 3 4 4 4 4 4 5 5 5 -> 1 1.5 2.5 4 5
1 2 2 2 4 4 5 5 6 7 7 8 9 9 9 9 9 10 10 10 -> 1 4 7 9 10
2 2 2 6 8 10 15 16 21 22 23 24 26 33 35 38 38 45 46 47 48 -> 2 10 23 38 48
1 2 9 -> 1 1.5 2 5.5 9
1 2 3 3 3 4 9 -> 1 2.5 3 3.5 9
1 1 2 5 7 7 8 8 15 16 18 24 24 26 26 27 27 28 28 28 29 29 39 39 40 45 46 48 48 48 48 49 50 52 60 63 72 73 79 85 86 87 88 90 91 93 94 95 95 97 100 -> 1 25 45 76 100
2 2 4 4 6 8 10 11 13 14 14 15 17 21 23 24 26 27 27 28 28 30 31 33 33 34 36 36 38 38 39 40 41 42 42 43 45 45 47 47 47 47 47 48 48 48 50 51 53 53 55 56 56 56 57 57 58 62 62 63 64 64 65 65 66 67 67 67 68 69 69 71 71 71 74 79 80 81 81 81 82 82 83 83 86 86 86 87 89 94 94 94 95 95 97 98 99 100 100 100 -> 2 33.5 54 76.5 100
1 3 3 4 -> 1 2 3 3.5 4
1 3 3 3 4 -> 1 3 3 3 4
sumber
quantile
mengembalikan vektor bernama, sementarafivenum
tidak disebutkan namanya. Mungkin itu masalah hilir dari manafivenum
digunakan?unname()
akan menyelesaikannya. Mungkin ada alasan historis?fivenum
untuk input dengan panjang 3 mod 4, termasuk dua kasus uji.MATL , 18 byte
Urutan output meningkat, seperti dalam kasus uji.
Cobalah online! Atau verifikasi semua kasus uji .
Penjelasan
MATL, seperti MATLAB, menghitung kuantil menggunakan interpolasi linier jika diperlukan (seperti yang ditentukan dalam tantangan untuk median). Untuk mencapai perilaku yang diperlukan untuk kuartil pertama dan ketiga, cukup untuk mengulang median jika panjang input ganjil. Maka hasilnya hanyalah 0, .25, .5, .75 dan 1 kuantil.
sumber
Jelly , 13 byte
Cobalah online!
Order:
[Q1, Q3, Q2/med, min, max]
.sumber
Python 3.8 (pra-rilis) , 66 byte
Cobalah online!
Input dan output dalam urutan menaik.
sumber
Python 3.8, 97 byte
Ini mengasumsikan bahwa daftar input diurutkan dalam urutan menaik.
f
adalah fungsi untuk mengembalikan ringkasan 5-angka.Saya melepas beberapa byte dengan mengambil beberapa petunjuk dari jawaban FlipTack untuk Compute the Median.
Cobalah online!
Bagaimana cara kerjanya?
sumber
Arang , 33 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Output dalam urutan naik atau turun tergantung pada apakah input dalam urutan naik atau turun. Penjelasan:
Dapatkan indeks elemen terakhir.
Petakan elemen-elemen dari array berikut dan hasilkan ke string untuk cetakan implisit pada baris yang terpisah.
Hitung posisi elemen kuartil, di mana tambahan
0.5
menunjukkan bahwa nilainya adalah rata-rata dari dua elemen yang berdekatan.Hitung kuartil di setiap posisi dengan mengambil rata-rata nilai di lantai dan langit-langit posisi.
sumber
Ruby 2.7-preview1 , 59 bytes
Port
ripofflangsung dari jawaban Python xnor .Cobalah online! (satu byte lebih lama sejak TiO menggunakan Ruby 2.5 dan tidak memiliki parameter blok bernomor misalnya
@1
).sumber
C (gcc) ,
123121119 byte-2 Berkat ceilingcat.
Mengasumsikan daftar diurutkan dalam urutan menaik.
Output dalam urutan: min, Q1, Q2, Q3, maks.
Cobalah online!
sumber
05AB1E , 18 byte
Output-order adalah:
[Q1, Q3, Q2, min, max]
.Cobalah secara online atau verifikasi semua kasus uji . (Saya telah menambahkan semacam
{
untuk suite tes, sehingga kasus uji lebih mudah untuk diverifikasi dalam urutan[min, Q1, Q2, Q3, max]
.)Penjelasan:
sumber