Sunting: -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 penggunaan Math.floor
danMath.ceil
Sunting 3: -13 byte karena saya bisa mengganti a.length
fungsi pintas hanya dengan panggilan langsung ke a.length
untuk menyimpan 4 byte. Saya juga memindahkan fungsi g () langsung ke pernyataan kembali, karena itu hanya digunakan sekali, yang menghapus sisa byte.
a=>{s=i=>a.splice(i,1)
e=_=>a.reduce((t,i)=>t+=i)/a.length
r=n=>(m=n%1,m<0.75?m>0.25?~~(n)+0.5:~~(n):n%1?-~n:n)
return a.length>2?r((a.sort((x,y)=>x-y),s(0),s(-1),e())):r(e())}
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 ( { }
dan return
).
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 pembulatanr
, 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)
a => { // a is the input array
s = i=>a.splice(i, 1); // shortcut to remove index i for 1 element
e = _=>a.reduce((t, i) => t += i) / a.length; // get array avg
g = _=>(a.sort((x,y)=>x-y), s(0), s(-1), e()); // what to execute when > 2: sort, remove 1st/last, get avg
t = n=>Math.floor(n); // Math.floor shortcut
// apply olympic rounding to number by checking the value of n%1
r = n=>(m=n%1,m < 0.75 ? (m > 0.25 ? t(n) + 0.5 : t(n)) : Math.ceil(n));
// if arr length > 2: round g(), otherwise round e()
return a.length > 2 ? r(g()) : r(e());
}