Temukan faktor-C dari suatu pemungutan suara

11

Dalam tantangan ini, Anda akan menentukan seberapa kontroversial suatu pemungutan suara, dengan serangkaian suara lainnya, dengan mencari tahu nomor yang disebut faktor-C. Apa faktor-C, Anda bertanya?

Nah, bayangkan Anda memiliki banyak suara dalam suatu pemilihan. Kami akan menggunakan 1dan 0demi tantangan untuk mewakili dua kandidat yang berbeda dalam pemilihan. Inilah sepuluh suara dalam pemilihan sampel kami:

0110111011

Sekarang, katakanlah kami ingin menemukan faktor-C dari setiap suara untuk kandidat 0. Kita dapat melakukannya dengan fungsi berikut:

f(o,v)=abs(omean(v))

Di , adalah suara yang ingin kita tentukan faktor-C, dan merupakan array suara. Jadi, menggunakan fungsi kami, untuk mendapatkan faktor-C dari setiap suara untuk kandidat :fov0

f(0,[0,1,1,0,1,1,1,0,1,1])=0.7

Faktor C yang lebih rendah menunjukkan bahwa suara itu kurang kontroversial dibandingkan dengan suara lainnya. Jadi, suara untuk kandidat 0lebih berbeda dari suara lainnya daripada suara untuk kandidat 1. Sebagai perbandingan, faktor-C untuk 1suara kandidat adalah , sehingga kurang kontroversial karena lebih seperti suara lainnya.0.3

Tantangan

Tulis fungsi untuk menentukan faktor-C dari suara yang diberikan hasil suara .f(o,v)ov

  • oharus berupa bilangan bulat, baik 0atau 1.

  • v harus berupa larik (atau jenis wadah serupa tergantung pada spesifikasi bahasa) dengan panjang sewenang-wenang yang mengandung nol dan satu.

  • Fungsi harus mengembalikan atau mencetak ke konsol C-factor yang dihasilkan dengan parameter fungsi, menggunakan rumus di atas atau metode yang dimodifikasi.

Semoga berhasil! Bytes terkecil menang (pemenang dipilih dalam lima hari).

hubungkan charger Anda
sumber
Tidak mean(v)sama dengan 0,7 dalam contoh Anda?
HyperNeutrino
@HyperNeutrino Ya. apa masalahnya?
connectyourcharger
Bagaimana dengan abs(0 - 0.7)setara 0.3?
HyperNeutrino
Ah. Memperbaiki contoh. Saya membalikkan dua angka
connectyourcharger
Oh baiklah. Terima kasih telah mengklarifikasi!
HyperNeutrino

Jawaban:

6

Jelly , 3 byte

ạÆm

Cobalah online!

Secara harfiah hanya "perbedaan mutlak berarti".

ạÆm  Main link
ạ    Absolute difference
 Æm  Arithmetic Mean

Jika Anda membalikkan argumen, Anda dapat membalikkan atom.

HyperNeutrino
sumber
10

R , 23 byte

function(o,v)mean(o!=v)

Cobalah online!

Tantangannya bermuara pada perhitungan proporsi nilai yang vberbeda dari o(yaitu mean(xor(o,v))). Karena itu kita dapat menghindari penggunaan abs.

Robin Ryder
sumber
2
Juga berfungsi untuk representasi pemilihan acak, rapi.
CriminallyVulgar
6

APL (Dyalog Unicode) , 9 8 5 byte

≠⌹⊢=⊢

Cobalah online!

Kereta anonim. Terima kasih kepada @ Adám selama satu byte yang disimpan, dan terima kasih kepada @ngn selama 3 byte!

Bagaimana:

≠⌹⊢=⊢  Anonymous Train
      The right argument (⍵)
  ⊢=   Equals itself. Generates an array of 1s
      XOR left (⍺) and right args; generates  or (not ⍵), depending on ⍺.
      Divide these matrices.
J. Sallé
sumber
4
Anda dapat melakukannya dalam 5. petunjuk: ⌹
ngn
4

Sebenarnya , 3 byte

♀^æ

Cobalah online!

Penjelasan:

♀^æ
♀^   XOR each vote with candidate (0 if matches, 1 if not)
  æ  mean of the list
Mego
sumber
3

05AB1E , 3 byte

ÅAα

Cobalah online!

Luis Mendo
sumber
2
Aku 30 detik terlambat .. Pesanan saya meskipun berbeda, pertama αkemudian ÅA; p
Kevin Cruijssen
2
@KevinCruijssen Saya melihat solusi Anda datang secara real-time, saya mulai berkomentar, dan itu dihapus, semua dalam waktu sekitar 30 detik. Lucu sekali!
connectyourcharger
@KevinCruijssen Saya tidak begitu mengerti bagaimana kedua pesanan bekerja sama ... :-) Pengetahuan 05AB1E saya tidak terlalu bagus
Luis Mendo
1
@KevinCruijssen Ah, begitu. Yang membingungkan saya adalah bahwa kedua pendekatan ini memberikan hasil yang berbeda untuk angka yang berubah-ubah; tetapi untuk input 0/1 mereka tampaknya setuju. Contoh
Luis Mendo
2
@LuisMendo Ah, ya, Anda memang benar. Saya mengujinya dengan beberapa bilangan bulat lainnya, tetapi mereka memberikan hasil yang sama juga terlepas dari urutan (tetapi test case Anda dengan 0,8 memang berbeda). Jika input bisa mengandung sesuatu yang lain selain 0/ 1, pendekatan Anda pertama-tama mendapatkan mean dan kemudian perbedaan absolut benar ketika kita membandingkannya dengan rumus dalam deskripsi tantangan. Dengan hanya 0s / 1s beberapa alternatif 3-byters juga dimungkinkan, seperti ÊÅA.
Kevin Cruijssen
2

Attache , 11 8 byte

Mean@`/=

Cobalah online! Membawa argumen sebagai f[o, v].

Tidak ada yang sangat orisinal.

Pendekatan alternatif

11 byte: Average@`/=

11 byte: ${1-x~y/#y} Menghitung kejadian xdalam ydibagi dengan panjangnya y, lalu mengurangkannya dari 1.

11 byte: {1-_2~_/#_} (Argumen dibalik untuk yang ini)

15 byte: ${Sum[x/=y]/#y} Versi yang lebih eksplisit di atas, tanpa Average.

Conor O'Brien
sumber
1

JavaScript, 38 byte

n=>a=>a.map(x=>n-=x/a.length)|n<0?-n:n

Cobalah

Shaggy
sumber
1

Proton , 26 byte

(o,v)=>1-v.count(o)/len(v)

Cobalah online!

Outputnya adalah sebagian kecil karena Proton menggunakan sympy daripada angka Python biasa untuk presisi yang lebih baik.

(-7 byte; abs-diff berarti lebih pendek dari rata-rata abs-diff; Aku sebenarnya bodoh)

-1 byte terima kasih kepada Rod

HyperNeutrino
sumber
@Rod saya mencoba mencari cara untuk mengoptimalkan pembatasan input 1/0 tetapi gagal. Terima kasih!
HyperNeutrino
1

Perl 6 , 20 byte

{@_.sum/@_}o(*X!= *)

Cobalah online!

* X!= *adalah fungsi anonim yang mengambil produk silang tidak-sama dari dua argumennya. Ini menghasilkan urutan Boolean; misalnya, 1 X!= (1, 0, 1)mengevaluasi ke (False, True, False).

{ @_.sum / @_ }adalah fungsi anonim lain yang mengembalikan rata-rata argumennya. Boolean Truemengevaluasi ke 1angka, dan Falseke 0.

The oOperator menyusun dua fungsi menjadi satu.

Sean
sumber
1

Mintalah , 3 byte

nÆm

Cobalah online!

nÆm  Main Link
n    Not Equals (returns a list of whether or not each element is unequal to to the value)
 Æm  Arithmetic Mean

Bahasa ini sangat terinspirasi oleh Jelly sampai-sampai mungkin seperti saya bereksperimen untuk mencoba membuat ulang struktur bagaimana Jelly diurai dengan kode saya sendiri.

-1 byte terima kasih kepada Tn. Xcoder

HyperNeutrino
sumber
Anda dapat menggunakan ndaripada _...Amenyimpan 1 ( Coba online! ).
Tn. Xcoder
@ Mr.Xcoder Ooh bagus. Ya saya menyadari trik! = Setelah membuat lol ini. Terima kasih!
HyperNeutrino
1

Retina 0.8.2 , 27 byte

(.),((?(\1)|()).)*$
$#3/$#2

Cobalah online! Menghasilkan sebagian kecil. Penjelasan: Kelompok pertama menangkap odan kelompok kedua menangkap setiap entri v, sedangkan bersyarat memastikan bahwa kelompok ketiga hanya membuat tangkapan ketika suara berbeda. The $#konstruksi kemudian mengembalikan hitungan menangkap relevan seperti yang diinginkan.

Neil
sumber
1

Elm 0,19, 48 byte

f a v=abs(v-(List.sum a/toFloat(List.length a)))

Demo online di sini .

Ketidakseimbangan
sumber
1

C (gcc) , 62 byte

float f(o,v,l,k)int*v;{float r=0;for(k=l;k;)r+=v[--k]^o;r/=l;}

Cobalah online!

Sebut sebagai f(int o, int *v, int length_of_v).

pizzapants184
sumber
0

Java 8, 47 byte

v->o->(o-=v.get().sum()/v.get().count())<0?-o:o

Cobalah online.

atau sebagai alternatif:

v->o->Math.abs(o-v.get().sum()/v.get().count())

Cobalah online.

Untuk kedua input adalah Supplier<DoubleStream>untuk daftar suara vdan doublesuara o.

Penjelasan:

v->o->                 // Method with DoubleStream-Supplier & double parameters and double return
  (o-=v.get().sum()    //  Get the sum of the DoubleStream-Supplier
      /v.get().count() //  Divide it by the amount of items in the DoubleStream-Supplier
      )                //  Subtract this from `o`
       <0?-o:o         //  And get the absolute value of this updated value `o`
Kevin Cruijssen
sumber
0

Ukuran umum 49 byte

Larutan:

(defun c(o v)(abs(- o(/(reduce'+ v)(length v)))))

Cobalah online

Penjelasan:

(defun c(o v)
  (abs (- o (/ (reduce '+ v) (length v)))))
  • pengurangan menerapkan fungsi di atas semua elemen daftar (+ dalam kasus ini)
  • sisanya hanya fungsi dasar, abs (o - mean (v))
David Horak
sumber
0

Pyth, 4 byte

aE.O

Penjelasan:

       ( implicitly set Q = eval(input()) )
a      Absolute difference between
 E     eval(input()) (this is the second line of input taken)
  .O   and the average of
    Q  (implicit) Q (the first line of input)

Input dalam format:

[0,1,1,0,1,1,1,0,1,1]
0

dengan deretan suara pertama, dan kandidat kedua.

Cobalah online!

RK.
sumber