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


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:



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.


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.

4
możesz to zrobić w 5. podpowiedź: ⌹
ngn


3

05AB1E , 3 bajty

ÅAα

Wypróbuj online!


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.



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


@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.


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


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.








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`

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


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!

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.