Tugas
Diberikan (dengan cara apa pun) dataset titik mengambang yang diurutkan, kembalikan (dengan cara apa pun dan dalam 1 ‰ dari nilai yang benar) mean interkuartil .
Salah satu algoritma yang mungkin
- Buang titik terendah dan tertinggi dari titik data.
- Hitung rata-rata (jumlah dibagi dengan hitungan) dari titik data yang tersisa.
Catatan: Jika ukuran dataset tidak terbagi rata menjadi empat, Anda harus menimbang titik data yang dibagi oleh sub-set. Lihat Contoh evaluasi 2 di bawah ini.
Contoh evaluasi 1
Diberikan {1, 3, 4, 5, 6, 6, 7, 7, 8, 8, 9, 38}
- Hitungan data adalah 12, jadi kami menghapus 3 titik data terendah dan tertinggi:
{1, 3, 4,5, 6, 6, 7, 7, 8,8, 9, 38} - Rata-rata dari 6 titik data yang tersisa:
(5 + 6 + 6 + 7 + 7 + 8) / 6 = 6.5
Contoh evaluasi 2
Diberikan {1, 3, 5, 7, 9, 11, 13, 15, 17}
- Hitung adalah 9, sehingga setiap kuartal memiliki 2¼ titik data:
{1, 2, (0,25 × 5),(0,75 × 5), 7, 9, 11, (0,75 × 13),(0,25 × 13), 15, 17} - Rata-rata dari sisa 4,5 titik data:
(0.75 × 5 + 7 + 9 + 11 + 0.75 × 13) / 4.5 = 9
Pyth ,
1110 byteSuite uji.
Bagaimana itu bekerja
Ini empat kali lipat daftar input untuk memastikan bahwa jumlah data habis dibagi 4.
Masih perlu disortir, karena
*4
berlaku untuk seluruh daftar, bukan untuk masing-masing elemen.Kemudian, ia membagi daftar menjadi empat bagian yang sama, kemudian menghapus bagian pertama dan terakhir.
Daftar yang tersisa diratakan dan rata-rata diambil.
sumber
MATL ,
1211 byteInput adalah vektor horizontal, dengan format
atau
Cobalah online!
Penjelasan
sumber
6L)
menghapus elemen pertama dan terakhir? Ketika saya melakukannya, itu mendorong banyak bilangan kompleks.[2, -1+i]
ketika digunakan sebagai indeks berarti2:end-1
Snowman , 66 byte
Cobalah online!
Menggunakan algoritma yang sama dengan jawaban @LeakyNun .
sumber
Python 3, 50 byte
Ide itu!
Bagaimana itu bekerja
Ini adalah terjemahan dari jawaban saya dalam Pyth .
sumber
Jelly ,
141312 byteCobalah online!
Suite uji.
Bagaimana itu bekerja
Ini adalah terjemahan dari jawaban saya dalam Pyth .
sumber
Pyke,
1613 byteCoba di sini!
sumber
Brachylog , 21 byte
Cobalah online! atau verifikasi beberapa kasus uji
Penjelasan
Ini pada dasarnya adalah algoritma jawaban Pyth @ LeakyNun.
Satu-satunya trik kecil yang ada dalam mengalikan dengan kebalikan dari panjang alih-alih membaginya dengan panjang, karena pembagian antara 2 bilangan bulat adalah pembagian bilangan bulat.
sumber
Oktaf , 44 byte
Ini mendefinisikan fungsi anonim.
Masukan adalah vektor horisontal.
Cobalah di ideone .
Penjelasan
Vektor horisontal input pertama kali dikalikan matriks (
*
) oleh vektor kolom empat yang (dibangun dengan~~(1:4)'
). Hasilnya adalah matriks empat kolom di mana setiap baris adalah salinan dari vektor input. Ini kemudian dibentuk kembali, sambil mempertahankan urutan linier elemen, menjadi matriks 4-kolom (reshape(...,[],4)
). Pusat dua kolom disimpan ((:,2:3)
) dan dilinearisasi menjadi satu kolom ((:)
), yang rerata dihitung (mean(...)
).sumber
[x;x;x;x]
daripada~~(1:4)'*x
@(x)mean([x;x;x;x](:)((b=numel(x))+1:3*b))
juga 2 byte lebih sedikit. Itu sebabnya saya muncul, tetapi pada dasarnya sama dengan pendekatan Anda.J ,
2018 byte2 byte terima kasih kepada @miles
Cobalah online! ( Penerjemah online )
Pemakaian
Bagaimana itu bekerja
Ini adalah terjemahan dari jawaban saya dalam Pyth .
sumber
-@#(+/%#)@}.#}.4#]
selama 18 byte .Sebenarnya ,
201513 byteCobalah online!
Bagaimana itu bekerja
Ini adalah terjemahan dari jawaban saya dalam Pyth .
sumber
Oktaf, 42 byte
Fungsi anonim lain untuk Oktaf.
Anda dapat mencobanya secara online . Cukup masukkan perintah itu, lalu lakukan
ans([1 2 4 5 6 9])
atau angka apa pun yang diperlukan.Yang ini dimulai dengan membuat dari satu array input dengan 4 dari setiap elemen input dengan terlebih dahulu menggabungkan empat salinan secara vertikal, dan kemudian meratakannya secara vertikal. Ini mempertahankan urutan pengurutan.
Kemudian adalah mengekstrak rentang elemen dari panjang array input ditambah 1 hingga tiga kali panjang array input. Karena array baru empat kali lebih lama, ini memotong kuartil atas dan bawah.
Akhirnya rata-rata array baru dikembalikan.
sumber
05AB1E, 15 byte
Penjelasan
Cobalah online
sumber
APL (Dyalog) , 15 byte
Cobalah online!
4∘/
melipatgandakan setiap elemen-∘≢↓
jatuhkan elemen trailing sebanyak-banyaknya karena ada elemen dalam argumen≢↓
turunkan banyak elemen utama karena ada elemen dalam argumen(
...)
terapkan fungsi diam-diam berikut:+/
jumlah÷
dibagi dengan≢
penghitungansumber
JavaScript (ES6), 75 byte
Menggunakan pendekatan quadruplicate-and-sort yang jelas, dan saya bisa menggunakannya
reduce
, yang bagus. Satu-satunya tipuan di sini adalah untuk menyimpan 4 byte dengan menggunakan kembali komparator pengurutan untuk mengurangi semua elemen array dari nol, yang memberi saya-2l
kali jawaban yang saya inginkan.sumber
Golfscript,
2829 byteCobalah online!
sumber
Sebenarnya, 12 byte
Cobalah online! (saat ini tidak berfungsi karena TIO adalah beberapa versi di belakang)
Penjelasan:
sumber
Mathematica, 51 byte
Urutkan empat salinan daftar (untuk mencegah masalah dengan panjang daftar bukan kelipatan empat), ambil bagian
"1 quarter the length of resulting list plus 1"
melalui"1/4 length list + 1 from the end"
, ambilMean
.sumber
Java
146126 BytesJava banyak verbose!
Lebih tua Ungolfed sebagian dapat dibaca dengan kasus uji
sumber
Clojure,
8281 byteSunting: 1 byte lebih sedikit dengan menulis ulang bagian "didvide by 2 n".
Sebelumnya:
Menggunakan
for
untuk menghasilkan 4 nilai berulang, menggunakan float2.0
tidak memiliki hasil fraksional, sisanya hanya standar.sumber
R,
1711 byteDengan asumsi
n
adalah vektor input dalam bentuk R standarn=c(1, 2, 3, ...)
.Ini sama sekali tidak mengejutkan karena R dapat dianggap sebagai "bahasa untuk komputasi statistik" dan memiliki banyak statistik built-in.
MEMPERBARUI. Disimpan 6 byte berkat rturnbull karena
trim
merupakan argumen opsional pertama secara default!Kasus uji:
sumber
trim
argumen kedua default, Anda tidak perlu menyebutkannya;0.25
dapat disingkat menjadi.25
atau1/4
. Ini menghemat enam byte.Excel, 17 byte
Format input yang santai membuat ini mudah. Masukkan satu per baris di Kolom A.
sumber