Fenomena yang disebut Will Rogers menggambarkan cara untuk mengubah statistik dengan menaikkan rata-rata dalam dua (multi) set ketika satu elemen dipindahkan antara dua set. Sebagai contoh sederhana, perhatikan dua set
A = {1, 2, 3}
B = {4, 5, 6}
Berarti aritmatika mereka adalah 2
dan 5
, masing-masing. Jika kami memindahkan 4
ke A
:
A = {1, 2, 3, 4}
B = {5, 6}
Sekarang rata-rata adalah 2.5
dan 5.5
, masing-masing, sehingga kedua rata-rata telah dinaikkan melalui pengelompokan ulang sederhana.
Sebagai contoh lain, pertimbangkan
A = {3, 4, 5, 6} --> A = {3, 5, 6}
B = {2, 3, 4, 5} --> B = {2, 3, 4, 4, 5}
Di sisi lain, tidak mungkin menaikkan kedua rata-rata untuk set
A = {1, 5, 9}
B = {4, 5, 7, 8}
Tantangan
Diberikan dua daftar bilangan bulat non-negatif, tentukan apakah mungkin untuk menaikkan kedua rata-rata dengan memindahkan satu bilangan bulat dari satu daftar ke yang lain.
Rata-rata daftar kosong tidak ditentukan, jadi jika salah satu daftar hanya berisi satu elemen, elemen ini tidak dapat dipindahkan.
Anda dapat menulis sebuah program atau fungsi, mengambil input melalui STDIN (atau alternatif terdekat), argumen baris perintah atau argumen fungsi dan mengeluarkan hasilnya melalui STDOUT (atau alternatif terdekat), nilai pengembalian fungsi atau parameter function (out).
Input dapat diambil dalam format string atau daftar yang nyaman.
Anda tidak boleh berasumsi bahwa elemen dalam setiap daftar adalah unik, atau bahwa mereka diurutkan. Anda dapat mengasumsikan bahwa kedua daftar berisi setidaknya satu elemen.
Output harus truthy jika kedua rata-rata dapat diangkat dengan memindahkan satu bilangan bulat dan falsy sebaliknya.
Ini adalah kode golf, jadi jawaban tersingkat (dalam byte) menang.
Uji Kasus
Benar:
[1], [2, 3]
[1, 2, 3], [4, 5, 6]
[3, 4, 5, 6], [2, 3, 4, 5]
[6, 5, 9, 5, 6, 0], [6, 2, 0, 9, 5, 2]
[0, 4], [9, 1, 0, 2, 8, 0, 5, 5, 4, 9]
Falsy:
[1], [2]
[2, 4], [5]
[1, 5], [2, 3, 4, 5]
[2, 1, 2, 3, 1, 3], [5, 1, 6]
[4, 4, 5, 2, 4, 0], [9, 2, 10, 1, 9, 0]
Papan peringkat
Berikut ini adalah Stack Snippet untuk menghasilkan leaderboard biasa dan gambaran umum pemenang berdasarkan bahasa.
Untuk memastikan bahwa jawaban Anda muncul, silakan mulai jawaban Anda dengan tajuk utama, menggunakan templat Penurunan harga berikut:
# Language Name, N bytes
di mana N
ukuran kiriman Anda. Jika Anda meningkatkan skor Anda, Anda dapat menyimpan skor lama di headline, dengan mencoretnya. Contohnya:
# Ruby, <s>104</s> <s>101</s> 96 bytes
<script>site = 'meta.codegolf'; postID = 5314; isAnswer = true; QUESTION_ID = 53913</script><script src='https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js'></script><script>jQuery(function(){var u='https://api.stackexchange.com/2.2/';if(isAnswer)u+='answers/'+postID+'?order=asc&sort=creation&site='+site+'&filter=!GeEyUcJFJeRCD';else u+='questions/'+postID+'?order=asc&sort=creation&site='+site+'&filter=!GeEyUcJFJO6t)';jQuery.get(u,function(b){function d(s){return jQuery('<textarea>').html(s).text()};function r(l){return new RegExp('<pre class="snippet-code-'+l+'\\b[^>]*><code>([\\s\\S]*?)</code></pre>')};b=b.items[0].body;var j=r('js').exec(b),c=r('css').exec(b),h=r('html').exec(b);if(c!==null)jQuery('head').append(jQuery('<style>').text(d(c[1])));if (h!==null)jQuery('body').append(d(h[1]));if(j!==null)jQuery('body').append(jQuery('<script>').text(d(j[1])))})})</script>
sumber
1
dan9
lebih, yang akan menaikkan rata-rata, tetapi Anda tidak bisa melakukannya dengan memindahkan satu saja.Jawaban:
Pyth,
29282624 byteTerima kasih kepada @Jakube karena telah menyelamatkan saya 3 byte dengan
.p
danL
.Sangat sederhana, periksa apakah ada elemen dalam daftar 2 yang lebih besar dari rata-rata daftar 1 dan kurang dari rata-rata daftar 2, lalu ulangi dengan daftar 1 dan daftar 2 diaktifkan.
Mencetak daftar yang tidak kosong untuk kebenaran, dan
[]
untuk falsey.Cobalah online di sini .
Test Suite.
sumber
Python 3, 74
Mengambil dua daftar sebagai masukan. Cek apakah daftar pertama memiliki elemen yang lebih besar dari rata-rata tetapi lebih kecil dari yang lain. Kemudian, lakukan hal yang sama untuk dua input yang ditukar. Memiliki pemahaman daftar dua lapis lebih pendek daripada mendefinisikan fungsi terpisah untuk mencoba dua perintah (82):
sumber
Haskell,
5857kita dapat memeriksa apakah kita memperbesar atau menurunkan rata-rata dengan memeriksa apakah elemen yang akan dihapus atau dimasukkan lebih besar atau lebih kecil dari rata-rata.
kita dapat memeriksa dengan memeriksa apakah rata-rata lebih kecil atau lebih besar dari suatu elemen dengan menghapus elemen itu dari array, dan memeriksa apakah rata-rata array baru negatif atau positif, yang pada gilirannya sama dengan memeriksa apakah jumlahnya positif atau negatif .
memeriksa yang dimasukkan sangat sederhana
sum.map(-n+)
.sumber
Mathematica,
4947 byteMengevaluasi fungsi murni yang mengharapkan input dalam formulir
{list1, list2}
.sumber
APL,
4540 byteDisimpan 5 byte berkat Moris Zucca!
Ini menciptakan fungsi dyadic tanpa nama yang menerima array di kiri dan kanan dan mengembalikan 1 atau 0.
Anda dapat mencobanya secara online .
sumber
R,
6652 BytesSebagai fungsi yang tidak disebutkan namanya, yang menerima 2 vektor. Singkirkan beberapa yang palsu.
Tes
sumber
SAS / IML, 67
Ini menggunakan operator pengurangan subskrip untuk mendapatkan jawabannya, mengembalikan 0 jika tidak ada elemen yang cocok dengan persyaratan atau 1 jika ada yang ditemukan.
Non-golf, di sini saya mengembalikan nilai aktual itu sendiri menggunakan perkalian matriks:
Tes:
(Ringkas untuk keterbacaan)
sumber
Python 2.7,
1029896Mengambil input sebagai array dari 2 input dan mengembalikan boolean.
Logikanya adalah - temukan rata-rata dari 2 daftar, kemudian temukan elemen sedemikian rupa sehingga kurang dari rata-rata daftar sendiri dan tetapi lebih besar dari rata-rata daftar lainnya.
Mengujinya untuk input yang diberikan demo di sini
sumber
*1.
alih - alih*1.0
menyimpan byte. Atau, jika Anda melakukan ini di Python 3, divisi akan mengembalikan float secara default, sehingga Anda tidak akan memerlukan perkalian sama sekali. (Saya tidak berpikir Anda harus mengubah kode Anda sama sekali untuk menggunakan Python 3.)f=
dan mengubahin[0,1]for
kein 0,1for
. Karena Anda sebenarnya pada 101 byte, ini membawa Anda ke 98.CJam, 28 byte
Ini adalah fungsi anonim yang muncul array dua dimensi dari tumpukan dan meninggalkan array elemen bergerak sebagai gantinya.
Di browser yang didukung, Anda dapat memverifikasi semua kasus uji sekaligus dalam juru bahasa CJam .
Uji kasus
Kode
Memasukkan
Keluaran
Bagaimana itu bekerja
Jika A dan B adalah array dan rata - rata (A) ≤ rata-rata (B), kami cukup memeriksa apakah B ∩ {⌊avg (A) ⌋ + 1,…, ⌈avg (B) ⌉-1} tidak kosong. Elemen apa pun di persimpangan ini dapat dipindahkan dari B ke A untuk meningkatkan kedua rata-rata.
Ini mendorong array semua elemen array dengan rata-rata yang lebih tinggi yang dapat dipindahkan untuk meningkatkan kedua rata-rata. Array ini kosong / salah jika dan hanya jika tidak ada elemen yang dapat dipindahkan untuk mencapai hasil ini.
sumber
Ruby, 86
Dibawa sebagai input array yang mengandung dua array.
Mencoba menemukan sub item rata-rata dari grup dengan rata-rata lebih tinggi yang lebih besar daripada rata-rata grup lainnya.
Uji: http://ideone.com/444W4U
sumber
f=->a,s=1{i,j=a.map{|x|x.inject(0.0,:+)/x.size};a[0].any?{|y|i>y&&j<y}||s&&f[b,a,p]}
b
. Saya pikir panggilan rekursif harus sepertif[a.rotate,p]
.Matlab, 54
Menggunakan fungsi anonim:
Contoh:
sumber
C #, 104
Panggilan Contoh:
sumber
C ++ 14, 157 byte
Sebagai lambda yang tidak disebutkan namanya, kembali dengan parameter terakhir
r
. DiasumsikanA
,B
menjadi wadah sepertivector<int>
atauarray<int,>
.Tidak Disatukan:
Pemakaian:
sumber