Znajdź współczynnik C głosowania

11

W tym wyzwaniu będziesz określać, jak kontrowersyjny jest głos, biorąc pod uwagę szereg innych głosów, ustalając liczbę zwaną współczynnikiem C. Jaki jest współczynnik C, pytasz?

Wyobraź sobie, że masz wiele głosów w wyborach. Wykorzystamy 1i 0ze względu na wyzwanie reprezentujemy dwóch różnych kandydatów w wyborach. Oto dziesięć głosów w naszych przykładowych wyborach:

0110111011

Powiedzmy, że chcemy znaleźć współczynnik C każdego głosowania na kandydata 0. Możemy to zrobić za pomocą następującej funkcji:

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

W , jest głosowanie chcemy określić C-czynnik, a jest tablicą głosów. Tak więc, korzystając z naszej funkcji, aby uzyskać współczynnik C każdego głosowania na kandydata :fov0

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

Niższy współczynnik C pokazuje, że głosowanie było mniej kontrowersyjne w porównaniu z innymi głosami. Tak więc głos na kandydata 0różni się bardziej od innych głosów niż głos na kandydata 1. Dla porównania współczynnik C dla 1głosu kandydata wynosi , więc jest mniej kontrowersyjny, ponieważ bardziej przypomina inne głosy.0.3

Wyzwanie

Napisz funkcję aby określić współczynnik C głosowania na podstawie wyników głosowania .f(o,v)ov

  • omusi być liczbą całkowitą albo 0czy 1.

  • v musi być tablicą (lub podobnym typem kontenera w zależności od specyfikacji języka) o dowolnej długości zawierającej zera i jedynki.

  • Funkcja powinna zwrócić lub wydrukować na konsoli wynikowy współczynnik C, biorąc pod uwagę parametry funkcji, przy użyciu powyższego wzoru lub zmodyfikowanej metody.

Powodzenia! Wygrywa najmniej bajtów (zwycięzca wybrany za pięć dni).

podłącz ładowarkę
źródło
Czy mean(v)w twoim przykładzie nie jest równe 0,7?
HyperNeutrino
@HyperNeutrino Tak. W czym problem?
connectyourcharger
Jak to jest abs(0 - 0.7)równe 0.3?
HyperNeutrino,
Ach Naprawiono przykład. Odwróciłem dwie liczby
Connectyourcharger
W porządku Dzięki za wytłumaczenie!
HyperNeutrino

Odpowiedzi:

6

Galaretka , 3 bajty

ạÆm

Wypróbuj online!

Dosłownie „absolutna różnica oznacza”.

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

Jeśli odwrócisz argumenty, możesz odwrócić atomy.

HyperNeutrino
źródło
10

R , 23 bajty

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

Wypróbuj online!

Wyzwanie sprowadza się do obliczenia proporcji wartości vinnych niż o(tj mean(xor(o,v)).). Dlatego możemy uniknąć używania abs.

Robin Ryder
źródło
2
Działa również w przypadku dowolnych oświadczeń dotyczących głosowania.
CriminallyVulgar
6

APL (Dyalog Unicode) , 9 8 5 bajtów

≠⌹⊢=⊢

Wypróbuj online!

Anonimowy pociąg. Dzięki @ Adám za zapisany bajt i dzięki @ngn za 3 bajty!

W jaki sposób:

≠⌹⊢=⊢  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é
źródło
4
możesz to zrobić w 5. podpowiedź: ⌹
ngn
4

Właściwie 3 bajty

♀^æ

Wypróbuj online!

Wyjaśnienie:

♀^æ
♀^   XOR each vote with candidate (0 if matches, 1 if not)
  æ  mean of the list
Mego
źródło
3

05AB1E , 3 bajty

ÅAα

Wypróbuj online!

Luis Mendo
źródło
2
Jestem 30 sekund za późno .. Moje zamówienie było inaczej, choć pierwsze αwtedy ÅA; p
Kevin Cruijssen
2
@KevinCruijssen Obserwowałem, jak Twoje rozwiązanie wchodzi w czasie rzeczywistym, zacząłem komentować i zostało ono usunięte w ciągu około 30 sekund. Wesoły!
connectyourcharger
@KevinCruijssen Nie bardzo rozumiem, jak te dwa zamówienia działają tak samo ... :-) Moja wiedza na temat 05AB1E nie jest zbyt dobra
Luis Mendo
1
@KevinCruijssen Ah, rozumiem. Mylące było dla mnie to, że te dwa podejścia dają różne wyniki dla dowolnych liczb; ale wydaje się, że w przypadku danych wejściowych 0/1 zgadzają się. Przykład
Luis Mendo
2
@LuisMendo Ach, tak, rzeczywiście masz rację. Przetestowałem to z kilkoma innymi liczbami całkowitymi, ale te dały te same wyniki niezależnie od kolejności (ale twój przypadek testowy z 0,8 rzeczywiście się różni). Jeśli dane wejściowe mogłyby zawierać coś innego niż 0/ 1, twoje podejście do uzyskania średniej, a następnie bezwzględnej różnicy jest prawidłowe, gdy porównamy ją ze wzorem w opisie wyzwania. Przy tylko 0 s / 1 s możliwe są również alternatywne 3-bajtowe ÊÅA.
Kevin Cruijssen
2

Attache , 11 8 bajtów

Mean@`/=

Wypróbuj online! Traktuje argumenty jako f[o, v].

Nic strasznie oryginalnego.

Alternatywne podejścia

11 bajtów: Average@`/=

11 bajtów: ${1-x~y/#y} Zlicza wystąpienia xw ypodzielone przez długość y, a następnie odejmuje to od 1.

11 bajtów: {1-_2~_/#_} (Argumenty są odwrócone w tym przypadku)

15 bajtów: ${Sum[x/=y]/#y} Bardziej wyraźna wersja powyższego, bez Average.

Conor O'Brien
źródło
1

JavaScript, 38 bajtów

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

Spróbuj

Kudłaty
źródło
1

Proton , 26 bajtów

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

Wypróbuj online!

Wynik jest ułamkiem, ponieważ Proton używa sympii zamiast zwykłych liczb w Pythonie dla lepszej precyzji.

(-7 bajtów; abs-diff na średni jest krótszy niż średni abs-diff; właściwie jestem głupi)

-1 bajt dzięki Rod

HyperNeutrino
źródło
@Rod Próbowałem dowiedzieć się, jak zoptymalizować ograniczenie wejściowe 1/0, ale nie powiodło się. Dzięki!
HyperNeutrino,
1

Perl 6 , 20 bajtów

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

Wypróbuj online!

* X!= *jest anonimową funkcją, która przyjmuje nierówny iloczyn krzyżowy dwóch argumentów. Tworzy sekwencję boolean; na przykład 1 X!= (1, 0, 1)ocenia na (False, True, False).

{ @_.sum / @_ }to kolejna anonimowa funkcja, która zwraca średnią swoich argumentów. Boolean TrueZwraca 1numerycznie, a Falsedo 0.

oOperatora tworzy te dwie funkcje w jednym.

Sean
źródło
1

Zaciągnij , 3 bajty

nÆm

Wypróbuj 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

Język jest bardzo mocno zainspirowany przez Jelly do tego stopnia, że ​​prawdopodobnie bardziej przypomina mnie eksperymentowanie z próbą odtworzenia struktury sposobu, w jaki Jelly jest analizowany z moim własnym kodem.

-1 bajt dzięki Mr. Xcoder

HyperNeutrino
źródło
Możesz użyć nzamiast _...Azapisać 1 ( Wypróbuj online! ).
Pan Xcoder
@ Mr.Xcoder Ooh nice. Tak, zrozumiałem sztuczkę! = Po zrobieniu tego lol. Dzięki!
HyperNeutrino
1

Retina 0.8.2 , 27 bajtów

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

Wypróbuj online! Wyprowadza ułamek. Objaśnienie: Pierwsza grupa przechwytuje, oa druga grupa przechwytuje każdy wpis v, podczas gdy warunek zapewnia, że ​​trzecia grupa przechwytuje tylko wtedy, gdy głosowanie jest odmienne. Następnie $#konstrukcja zwraca liczbę odpowiednich przechwyceń zgodnie z potrzebami.

Neil
źródło
1

Wiąz 0,19, 48 bajtów

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

Demo online tutaj .

OOBalance
źródło
1

C (gcc) , 62 bajty

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

Wypróbuj online!

Jak zadzwonić f(int o, int *v, int length_of_v).

pizzapanty184
źródło
0

Java 8, 47 bajtów

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

Wypróbuj online.

lub alternatywnie:

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

Wypróbuj online.

Dla obu danych wejściowych znajduje się Supplier<DoubleStream>lista głosów vi doubległosowanie o.

Wyjaśnienie:

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
źródło
0

Wspólne Lisp 49 bajtów

Rozwiązanie:

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

Wypróbuj online

Wyjaśnienie:

(defun c(o v)
  (abs (- o (/ (reduce '+ v) (length v)))))
  • redukcja stosuje funkcję do wszystkich elementów listy (+ w tym przypadku)
  • reszta jest tylko funkcją podstawową, abs (o - średnia (v))
David Horák
źródło
0

Pyth, 4 bajty

aE.O

Wyjaśnienie:

       ( 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)

Dane wejściowe mają format:

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

z tablicą głosów na pierwszym miejscu, a kandydatem na drugim miejscu.

Wypróbuj online!

RK.
źródło