Tantangannya adalah untuk menulis program kode golf yang, diberikan n bilangan real positif dari 0 hingga 10 (format xy, y hanya dapat 0 atau 5: 0, 0,5, 1, 1,5, 2, 2,5 ... 9,5 dan 10), buang nilai-nilai terendah dan tertinggi (hanya satu, meskipun mereka diulang) dan menunjukkan rata-rata sisanya, dalam format xy (y dapat 0 atau 5, dibulatkan ke terdekat), mirip dengan beberapa penilaian Olimpiade.
Contoh: Input -> Output
6 -> 6
6.5, 9 -> 8
9, 7, 8 -> 8
6, 5, 7, 8, 9 -> 7
5, 6.5, 9, 8, 7 -> 7
6.5, 6.5, 9.5, 8, 7 -> 7
5, 6.5, 7.5, 8.5, 9.5 -> 7.5
Catatan: Jika inputnya hanya dua angka, jangan dibuang, cukup rata-rata saja. Jika input adalah satu angka, outputnya sama.
Mengklarifikasi aturan pembulatan (maaf, sedikit bingung):
x.01 hingga x.25 bulat ke x.0
x.26 hingga x.75 hingga x.5
x.76 hingga x.99 untuk x + 1.0
6.5, 9
tidak setuju dengan spesifikasi Anda yang menunjukkan bahwa x.75 membulatkan ke x.5.Jawaban:
Jelly , 12 byte
Cobalah online!
Versi yang putaran turun separuh, sesuai dengan spesifikasi dengan mengorbankan test case kedua:
Jelly , 12 byte
Cobalah online!
Metode pembulatan di sini lebih dekat dengan Jonathan Allan's:
sumber
[1,10,6,7,7,7]
Retina , 86 byte
Cobalah online! Tautan termasuk kasus uji. Penjelasan:
Karena Retina tidak dapat dengan mudah menangani bilangan pecahan atau nol, setiap bilangan diwakili dalam unary dengan 1 lebih dari 4 kali nilainya. Karena
.5
itu memperluas ke 2_
s, sedangkan*4*_
berlaku untuk bagian bilangan bulat, dan final_
suffixed.Urutkan angka ke dalam urutan.
Jika setidaknya ada tiga angka, buang yang pertama (terkecil) dan terakhir (terbesar).
Urutkan spasi ke awal, sehingga juga menjumlahkan angka.
Hitung jumlah spasi dan tambahkan
_
dan pemisah. Ini kemudian mewakili angka yang harus kita bagi.Membagi jumlah dengan jumlah angka, memungkinkan untuk fakta bahwa kami bekerja dalam kelipatan 4 kali dari angka asli, sehingga bagian bilangan bulat dan desimal dapat langsung diekstraksi. Ini adalah divisi pemotongan, tetapi untungnya karena kami menambahkan ekstra
_
untuk setiap angka, hasilnya secara efektif mencakup 0,25 tambahan, sehingga memberi kami pembulatan yang kami inginkan.sumber
EDIT: Jawaban ini sejak itu menjadi tidak valid. Itu valid sekitar setengah menit setelah diposting.
Jelly , 10 byte
Cobalah online!
sumber
Ḟ
tampaknya menghasilkan hasil yang salah untuk[6.5,9]
.J ,
3635 byteCobalah online!
Meminjam trik dobel / lantai / separuh untuk pembulatan menjadi 0,5 penambahan dari String Tidak Terkait.
sumber
Python 3 , 62 byte
Cobalah online!
sumber
JavaScript (V8) ,
213211189176 byteSunting: -2 byte karena saya berakhir dengan
;\n}
ketika saya hanya bisa mengakhiri dengan}
, kesalahan konyol.Sunting 2: -22 byte lebih banyak dengan membaca tentang kiat-kiat golf JS umum. Saya berhasil mengeluarkan tanda kurung dari terary saya yang bersarang dalam
r
fungsi pembulatan, dan menggunakan operasi matematika bitwise untuk menghindari penggunaanMath.floor
danMath.ceil
Sunting 3: -13 byte karena saya bisa mengganti
a.length
fungsi pintas hanya dengan panggilan langsung kea.length
untuk menyimpan 4 byte. Saya juga memindahkan fungsi g () langsung ke pernyataan kembali, karena itu hanya digunakan sekali, yang menghapus sisa byte.Cobalah online!
Saya yakin ini dapat ditingkatkan karena saya cukup baru, tapi itu menyenangkan untuk menyelesaikan yang satu ini. Saya percaya hal-hal utama yang dapat diperbaiki adalah logika pembulatan / metode saya, dan fakta bahwa fungsi utama menggunakan fungsi tubuh (
{ }
danreturn
).Ada satu hal dalam pertanyaan yang tidak konsisten dengan contoh dan saya tidak benar-benar yakin bagaimana menanganinya. Saya menerapkannya agar konsisten dengan contoh, tetapi tidak persis mencerminkan aturan pembulatan yang ditentukan, berikut adalah contoh yang saya temukan tidak konsisten:
6.5, 9 -> 8
Anda mengatakan itu harus 8, meskipun rata-rata adalah 7,75. Dalam aturan pembulatan, Anda mengatakan setidaknya harus 0,76 untuk menjadi +1. Saya memilih untuk mencerminkan contoh alih-alih aturan pembulatan Anda, jadi> = 0,75 untuk menjadi +1, dan <= 0,25 untuk -1, antara 0,25 dan 0,75 (eksklusif) untuk 0,5. Jika spesifikasi pembulatan berubah, kode saya harus dapat beradaptasi tanpa mengubah jumlah byte, dengan hanya mengubah angka dalam fungsi pembulatan
r
, dan mungkin urutan pernyataan ternary tergantung pada aturan.Sedikit tidak tahu apa-apa dengan penjelasan (operasi matematika diubah menjadi operasi bitwise dan g () langsung dalam pernyataan kembali)
sumber
a.length
, jadi karena saya menggunakannya sebelum & sesudah operasi yang mengubah array,l
akan menjadi tidak valid segera setelah array diubah. LMK jika salah. Ternyata itu benar-benar akan menyelamatkan saya 3 byte sekarang untuk hanya menggantinya dengana.length
panggilan langsung . Ketika saya awalnya menulisnya, saya tidak tahu JS mengizinkan Anda untuk menggunakan angka negatif untuk sambungan, jadi awalnya sambungan kedua sayas(l()-1)
bukan hanyas(-1)
, dan ketika saya memiliki 3 panggilan panjang, disimpan byte untuk memiliki pintasan ini. Sekarang sudah tidak layak lagi. Terima kasih, akan diperbarui!Jelly , 12 byte
Tautan monadik yang menerima daftar angka yang menghasilkan angka.
Cobalah online!
Bagaimana?
sumber
1,10,7,7,7,6
mana 27/4 = 6,75Brachylog , 19 byte
Cobalah online!
Dan saya pikir pembulatan canggung di Jelly!
sumber
[1,10,7,7,7,6]
; 27/4 = 6.75 yang seharusnya membulatkan ke 6.5 menurut spec.Cepat , 203 byte
Cobalah online!
sumber
PHP , 110 byte
Sepertinya PHP memiliki beberapa fungsi bawaan yang baik untuk ini. Saya hanya array_sum semuanya, maka jika ada lebih dari dua elemen, kurangi nilai min () dan max () dan bagi dengan 2 kurang dari panjang array.
Untuk pembulatan, saya menggunakan fungsi round () dengan flag PHP_ROUND_HALF_DOWN (yang = 2) dengan menggandakan rata-rata, dan kemudian membaginya dengan 2 sehingga bertambah menjadi 0,5
EDIT: untuk kasus [6,5, 9] saya mengikuti aturan yang dinyatakan bahwa 7,75 putaran menjadi 7,5 dan bukan 8 seperti pada contoh asli yang diberikan.
Cobalah online!
sumber
Zsh ,
141136 bytecoba online!
141bytesSolusi mengikuti spesifikasi terbaru. Menyimpan beberapa byte menggunakan implisit
($@)
.Kami secara implisit mengulangi argumen dengan
for x
, dan membangun total berjalant
, dan juga menemukan maksimum, minimumm, n
. Jika jumlah argumena
lebih besar dari 2, kami membuangm
dann
dari rata-rata.s
adalah 2x rata-rata yang dihasilkan. Jika mantissas
lebih besar dari 0,5, bulatkans
, jika tidak terpotongs^0
. Akhirnya, bagi dengan 2 dan output.sumber