Mendapatkan rata-rata daftar (mis. [2,6,7]
)
- Dapatkan panjang daftar:
[2,6,7] -> 3
- Jumlahkan angka-angka dalam daftar:
2 + 6 + 7 = 15
. - Membagi jumlah dengan jumlah mereka:
15 / 3 = 5
.
Anda harus membandingkan rata-rata dari dua daftar bilangan bulat positif N dan M , dengan mengembalikan nilai jika N memiliki rata-rata yang lebih tinggi, nilai lain jika M memiliki rata-rata yang lebih tinggi, dan yang lain dalam kasus dasi.
Aturan I / O
Semua metode Input dan Output standar diperbolehkan.
Memasukkan
Anda dapat mengambil input sebagai dua daftar terpisah, daftar bersarang, atau apa pun yang Anda anggap cocok untuk tugas tersebut. Silakan tentukan formatnya.
Keluaran
Nilai-nilai yang diberikan harus berbeda dan harus terdiri dari setidaknya satu karakter non-spasi putih. Juga, mereka harus konsisten antara berjalan (nilai tunggal untuk N , nilai tunggal untuk M , nilai tunggal untuk Tie ). Silakan tentukan yang ada di jawaban Anda. Nilai-nilainya bisa berupa String tidak kosong, nilai Bool, Integer, atau apa pun yang Anda anggap cocok.
Spesifikasi
Daftar tidak harus memiliki panjang yang sama.
Anda dijamin bahwa daftar ini tidak kosong.
Uji Kasus
Saya memilih nilai-nilai N wins
, M wins
dan Tie
, yang cukup jelas.
N, M -> Output (Rata-Rata) [7], [6] -> N menang (N memiliki 7, M memiliki 6) [4,5], [4,4] -> N menang (N memiliki 4,5, M memiliki 4) [2,3,4], [4,5,6] -> M menang (N memiliki 3, M memiliki 5) [4,1,3], [7,3,2,1,1,2] -> Tie (keduanya memiliki 2,666 ...) [100,390,1], [89,82,89] -> N menang (N memiliki 163,666 ..., M memiliki 86,666 ...) [92.892], [892.92] -> Dasi (daftar pada dasarnya identik) [10.182], [12,78.203,91] -> Tie (keduanya memiliki 96)
Berlaku celah default . Penjelasan didorong! Ini adalah kode-golf , jadi kode terpendek dalam byte menang!
sumber
Jawaban:
Sebenarnya , 5 byte
Cobalah online!
1
untukN > M
,0
untukN = M
,-1
untukN < M
.Penjelasan:
sumber
Mathematica, 15 byte
Cobalah online!
Function
yang mengharapkan daftar dua daftar.Mean/@#
mengambil rata-rata aritmatika dari masing-masing daftar dalam input, lalu berarti itu diteruskanOrder
, yang kembali-1
jika daftar pertama menang,0
jika ada seri, dan1
jika daftar kedua menang.sumber
JavaScript (ES6),
5250 byte(Disimpan 2 byte berkat @Shaggy.)
Berikut adalah dua solusi 50-byte:
Mengembalikan Infinity untuk N, -Infinity untuk M, dan NaN untuk dasi.
Solusi pertama mungkin memerlukan sedikit penjelasan karena rekursi:
Pada panggilan pertama ke fungsi,
a
diinisialisasi sebagai rata-rataN
array:M
memiliki nilai pada titik ini, jadi bagian pertama dari ekspresi kondisional disebut:M ? (a-f(M))/0 : a ----------
Fungsi ini disebut dalam ungkapan ini, kali ini menggantikan
M
untukN
.Pada panggilan kedua ke fungsi ini,
a
diinisialisasi sebagai rata-rataN
–– yang adaM
dalam panggilan sebelumnya.Karena tidak ada parameter kedua selama panggilan ini ke fungsi, bagian kedua dari ekspresi kondisional dipicu, yang mengembalikan rata-rata:
M ? (a-f(M))/0 : a --
Kita sekarang dapat memahami ungkapan dengan lebih baik:
Nya:
Perbedaan antara rata-rata akan menjadi angka positif, angka negatif, atau 0.
Membagi perbedaan dengan 0 hasil di Infinity , -Infinity , atau NaN - memberikan tiga nilai berbeda sesuai kebutuhan.
Kasus uji:
Tampilkan cuplikan kode
sumber
A
ke parameter fungsi?Mathematica, 21 byte
1 untuk
#
menang, -1 untuk#2
menang, 0 untuk dasi.sumber
Sign[#-#2&@@Mean/@#]&
MATL , 8 byte
Soooo banyak pengubah (
Y
danZ
). Saya tidak dapat menemukan cara untuk membuatnya lebih pendek.sum / number_of_elements
adalah tiga byte. Mungkin ini cara yang lebih baik untuk dilakukan-ZS
, tetapi saya tidak dapat menemukannya.Cobalah online!
Mengembalikan
1
jika input pertama lebih besar,0
jika mereka ikat, dan-1
jika input kedua lebih besar.sumber
05AB1E , 9 byte
1 jika
M
menang, -1 jikaN
menang dan 0 untuk seri.Cobalah online!
Penjelasan
sumber
Julia , 27 byte
Cobalah online!
Mengembalikan
1
jika rata-rata pertama lebih besar,-1
jika yang kedua adalah, dan0
jika mereka mengikat.sumber
Python 2 , 43 byte
Cobalah online!
sumber
Oktaf , 27 byte
Cobalah online!
Mengambil dua vektor
x.y
sebagai input, mengambilmean
kedua vektor, dan kurangi satu dari yang lain. Dapatkan tandanya, untuk mendapatkan1
,0
dan-1
untuk tiga alternatif berbeda.sumber
Python 2, 49 byte
Cobalah online
sumber
APL (Dyalog) , 11 byte
Meminta daftar dua daftar. Mencetak
1
jika kiri memiliki rata-rata lebih tinggi, 0 jika mereka memiliki rata-rata yang sama, dan¯1
jika kanan memiliki rata-rata yang lebih tinggi.Cobalah online!
⎕
cepat(
...)¨
terapkan fungsi tersembunyi berikut untuk masing-masing:+/
jumlah÷
dibagi dengan≢
penghitungan-/
masukkan (dan evaluasi) nilai minus di antara keduanya×
signumsumber
Javascript,
81665856 bytemenyimpan 15 byte berkat Luke
disimpan 2 byte berkat Justin Mariner
Dasi adalah 0, M adalah 1 dan N adalah -1. Disebut menggunakan sintaks currying, mis.
f([7])([6])
sumber
eval(a.join`+`)
.a=>(b=a.map(c=>eval(c.join`+`)/c.length))[0]-b[1]?b[0]>b[1]:0
untuk 61 byte. Dibutuhkan input sebagai array array, dan output0
untuk seri,true
untuk M danfalse
untuk N.a
) pertama kali digunakan:n=>m=>Math.sign((a=b=>eval(b.join`+`)/b.length)(m)-a(n))
.PHP , 68 byte
Cobalah online!
PHP , 69 byte
Cobalah online!
operator pesawat ruang angkasa -1 kurang dari itu, 0 dasi, 1 lebih besar dari itu
sumber
Haskell,
6543 BytesDisimpan 22 byte berkat nimi!
Pasti ada cara yang lebih baik ... Tapi konversi jenis mengacaukan saya.Pemakaian
Kembali
GT
jika argumen pertama menang,LT
jika argumen kedua menang, danEQ
jika mereka mengikat.Cobalah online!
sumber
sum$x
denganf.
. Juga:length x
bisa diganti dengansum[1|_<-x]
, sehingga Anda dapat menyingkirkan offf
sepenuhnya:a x=sum x/sum[1|_<-x]
.#
:...(a x)$a y
.(.a).compare.a
. Penggunaan:( (.a).compare.a ) [7] [6]
.[1|_<-x]
sama dengan(1<$x)
.J, 10 byte
Satu daftar diberikan di sebelah kiri, satu di sebelah kanan. Akan mengembalikan _1 jika rata-rata kiri lebih kecil, 1 jika lebih besar, dan 0 jika mereka sama
(+/%#)
adalah garpu J standar untuk menghitung rata-rata daftar&
memberikan variasi pada garpu diad. itu berlaku sisi kanan (kata kerja rata-rata, dalam hal ini) untuk kedua argumen, dan kemudian meneruskannya ke kata kerja di sisi kiri, yang dalam hal ini adalah ...*@-
kurangi diikuti dengan "tanda": jadi rata-rata kanan dikurangkan dari kiri, dan kami diberi tanda hasilnya - _1, 1, atau 0sumber
Pyth,
10876 byteTerima kasih @isaacg untuk menyimpan byte
Input diambil sebagai daftar bersarang
[N, M]
,. Keluaran-1
jikaN < M
,1
jikaN > M
dan0
jika mereka sama.Cobalah secara Online
sumber
h.+
dengan-F
TI-Basic,
2521131210 byte-2 byte terima kasih kepada lirtosiast
sumber
Ans
bukannyaC
:mean(L₁)>mean(L₂:Ans+3(mean(L₁)=mean(L₂
, 21 byte.(
dan)
.Jelly , 7 byte
Tautan monadik yang menerima daftar dari dua daftar,
N,M
yang mengembalikan:[-1]
untukN
;[1]
untukM
; dan[0]
untuk dasi.Sebagai program penuh mencetak hasilnya (daftar item tunggal mencetak konten mereka saja, jadi
-1
,1
atau0
).Cobalah online!
Bagaimana?
sumber
S÷L
,, dan kemudian Anda mengonversinya menjadi tautan tunggalS÷¥L$
yang dapat disingkatS÷Lµ
karena berada pada sangat awal dari program dan kemudian Anda meletakkan€
di sana untuk memetakan dan kemudian karena tidak ada builtin untuk membandingkan Anda akan menggunakan_/Ṡ
tetapi Anda dapat mempersingkatIṠ
karena itu masih 3 output cmp yang berbeda ... ya, cukup yakin itu tidak bisa dilakukan pada 5. Juga 5 tidak akan membantu karena saya FGITW'd. :)Perl 6 , 25 byte
Cobalah online!
Membawa argumen tunggal, daftar elemen dua angka daftar. Mengembalikan
1
jika daftar pertama memiliki rata-rata yang lebih besar,-1
jika daftar kedua, dan0
jika rata-rata sama.sumber
JavaScript (ES6), 60 byte
Output
0
untukTie
,true
untukN
danfalse
untukM
.sumber
JavaScript (ES6),
6054 byte-6 byte terima kasih kepada @Luke dan @Neil
Mengambil input sebagai array 2 elemen
[N, M]
. Outputtrue
,0
ataufalse
untukN
,Tie
atauM
masing-masing.Penjelasan
Cuplikan Tes
Masukkan angka yang dipisahkan oleh spasi / koma.
Tampilkan cuplikan kode
sumber
Math.sign(y-x)
dengany-x?x>y:0
. Output0
untukTie
,true
untukN
danfalse
untukM
.x-y&&x>y
mungkin?Pip , 13 byte
Ini adalah fungsi yang mengambil daftar daftar. Mengembalikan
1
jika rata-rata pertama lebih besar,-1
jika yang kedua lebih besar,0
jika diikat. Jalankan semua test case di sini.Latar Belakang
Solusi ini banyak menggunakan dua metaoperator Pip:
$
, lipat. Ambil operator biner dan terapkan di antara elemen daftar. Misalnya,+
adalah tambahan, tetapi$+
merangkum daftar. Catatan yang$
membuat operator biner menjadi operator unary.*
, peta. Ambil operator unary dan terapkan pada setiap elemen daftar. Misalnya,#
berikan panjang daftar, tetapi#*
berikan (daftar) panjang item daftar itu.$+*
peta dilipat / ditambah di atas daftar, menjumlahkan setiap elemen daftar.Hal lain yang perlu diketahui tentang Pip adalah bahwa banyak operator bekerja secara bijak pada daftar secara default. Misalnya,
[1 2 3] * 5
memberi[5 10 15]
;[1 2 3] * [2 3 4]
memberi[2 6 12]
; dan[[1 2] [3 4]] * [5 6]
memberi[[5 10] [18 24]]
.Penjelasan
Kami akan menggunakan input contoh
[[2 3 4] [2 3 4 6]]
:{...}
Menentukan fungsi. Argumen (pertama) terikat ke variabel lokal
a
.#*a
Peta
#
ke argumen fungsi, dapatkan panjang sublists. Hasil:[3 4]
a/#*a
Bagilah (elemen-elemen) sublist
a
dengan panjang masing-masing. Hasil:[[0.667 1 1.333] [0.5 0.75 1 1.5]]
$+*a/#*a
Peta
$+
(lipat tambahan) ke hasil itu, menjumlahkan sublists. Hasil:[3 3.75]
$CM$+*a/#*a
Lipat
CM
, yang memberi-1
,,0
atau1
tergantung pada perbandingan dua operan (seperti Pythoncmp
). Hasil:-1
(karena3
lebih kecil dari3.75
).Anda juga bisa mendefinisikan fungsi dalam Pip dengan menulis ekspresi yang mengandung fungsi identitas
_
. Sebagai contoh,_*_
adalah fungsi yang kuadratkan argumennya - gula sintaksis untuk{a*a}
, dan lebih sedikit byte. Namun, ada bug dalam versi penerjemah saat ini yang mencegah_
bekerja dengan*
metaoperator. Setelah itu tetap, solusi ini bisa menjadi 11 bytes :$CM$+*_/#*_
.sumber
C (gcc), 91
98byteTempat yang salah untuk C dan mungkin satu-satunya jawaban yang tidak perlu pembagian. Setidaknya kode ditampilkan tanpa slider.
Kembali 0,1,2 untuk
M>N
,M=N
,M<N
masing-masing. Mengambil input sebagailength of M
,length of N
,M
,N
.sumber
Brachylog , 8 byte
Cobalah online!
Keluaran
1
jika daftar pertama memiliki rata-rata lebih besar,-1
adalah daftar kedua memiliki rata-rata lebih besar, dan0
jika mereka terikat.Penjelasan
sumber
Java, 105 byte
Lambda yang mengambil daftar bersarang, sesuai input yang diijinkan.
Mengalirkan daftar daftar, mengubah keduanya menjadi rata-rata, lalu mengembalikan tanda perbedaan.
1
jika daftar pertama lebih besar,-1
jika daftar kedua lebih besar,0
untuk seri.sumber
Stream
s secara langsung, seperti yang saya lakukan .R
3834 byteFungsi itu sebagai input dua vektor numerik. Mengembalikan 1 jika rata-rata daftar pertama lebih tinggi, 0 jika mereka sama dan -1 jika rata-rata daftar kedua lebih tinggi.
sumber
f=
.{}
dari fungsi tubuh.MATL , 6 byte
Jangan terlalu kejam! *
Urutan tumpukan input:
Keluaran:
Cobalah online!
* Jawaban ini golf tanpa bermaksud jahat, angka yang tidak berdaya.
sumber
Java (OpenJDK 8) ,
7662 byteCobalah online!
Karena input bisa berupa apa saja, saya memutuskan untuk mengambil
IntStream
s sebagai input. Anda bisa mendapatkan input seperti itu dari standarint[]
denganArrays.stream(array)
.Output
1
untuk "N menang",-1
untuk "M menang", dan0
untuk dasi.Menghemat
sumber
java.util.Arrays.stream(array).map(java.util.Arrays::stream)
). Hanya ketika saya membaca kembali pertanyaan hari ini, saya pikir format input ini sama validnya dengan yang lainnya..orElse(0)
pemendekan yang layak.getAsDouble()
?(a,b)->Math.signum(a.average().orElse(0)-b.average().orElse(0));
adalah 64 byteDyalog APL, 14 byte
1
jika yang kiri lebih besar,¯1
jika yang kanan dan yang0
di ikat.Bagaimana?
¨∘⊢
untuk setiap daftar+/÷≢
menghitung rata-rata (+/
jumlah÷
dibagi dengan≢
panjang)-/
kurangi rata-rata×
tanda hasilnyasumber
Common Lisp ,
7471 byteCobalah online!
sumber