Trouver le facteur C d'un vote


11

Dans ce défi, vous déterminerez à quel point un vote est controversé, compte tenu d'un éventail d'autres votes, en déterminant un nombre appelé le facteur C. Quel est le facteur C, demandez-vous?

Eh bien, imaginez que vous avez plusieurs votes sur une élection. Nous allons utiliser 1et 0pour le défi de représenter deux candidats différents lors d'une élection. Voici les dix votes de notre exemple d'élection:

0110111011

Maintenant, disons que nous voulons trouver le facteur C de tout vote pour un candidat 0. Nous pouvons le faire avec la fonction suivante:

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

En f , oest le vote pour lequel nous voulons déterminer le facteur C, et vest un tableau de votes. Donc, en utilisant notre fonction, pour obtenir le facteur C de tout vote pour le candidat 0:

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

Un facteur C inférieur montre que le vote a été moins controversé par rapport aux autres votes. Ainsi, un vote pour un candidat 0est plus différent des autres votes qu'un vote pour un candidat 1. En comparaison, le facteur C pour un 1vote de candidat est de 0.3 , il est donc moins controversé car il ressemble davantage aux autres votes.

Le défi

Écrivez une fonction f(o,v) pour déterminer le facteur C d'un vote ocompte tenu des résultats d'un vote v.

  • odoit être un entier, 0ou 1.

  • v doit être un tableau (ou un type de conteneur similaire selon les spécifications de la langue) de longueur arbitraire contenant des zéros et des uns.

  • La fonction doit renvoyer ou imprimer à la console le facteur C résultant en fonction des paramètres de la fonction, en utilisant la formule ci-dessus ou une méthode modifiée.

Bonne chance! Le moins d'octets l'emporte (gagnant choisi en cinq jours).


N'est-il pas mean(v)égal à 0,7 dans votre exemple?
HyperNeutrino

@HyperNeutrino Oui. Quel est le problème?
connectyourcharger le

Comment est abs(0 - 0.7)égal à 0.3?
HyperNeutrino

Ah. Correction de l'exemple. J'ai inversé les deux nombres
connectyourcharger

Ah d'accord. Merci de clarifier!
HyperNeutrino

Réponses:


6

Gelée , 3 octets

ạÆm

Essayez-le en ligne!

Littéralement juste "différence absolue pour signifier".

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

Si vous inversez les arguments, vous pouvez inverser les atomes.


10

R , 23 octets

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

Essayez-le en ligne!

Le défi se résume à calculer la proportion de valeurs vdifférentes de o(ie mean(xor(o,v))). On peut donc éviter d'utiliser abs.


2
Fonctionne également pour les représentations de vote arbitraires, soigné.
CriminallyVulgar

6

APL (Dyalog Unicode) , 9 8 5 octets

≠⌹⊢=⊢

Essayez-le en ligne!

Train anonyme. Merci à @ Adám pour un octet enregistré et merci à @ngn pour 3 octets!

Comment:

≠⌹⊢=⊢  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
vous pouvez le faire en 5. indice: ⌹
ngn


3

05AB1E , 3 octets

ÅAα

Essayez-le en ligne!


2
Je suis 30 secondes trop tard .. Ma commande était différent mais, d' abord , αpuis ÅA, p
Kevin Cruijssen

2
@KevinCruijssen J'ai vu votre solution arriver en temps réel, j'ai commencé à commenter, et elle a été supprimée, le tout en 30 secondes environ. Hilarant!
connectyourcharger le

@KevinCruijssen Je ne comprends pas vraiment comment les deux commandes fonctionnent de la même manière: :-) Mes connaissances 05AB1E ne sont pas très bonnes
Luis Mendo

1
@KevinCruijssen Ah, je vois. Ce qui m'a dérouté, c'est que les deux approches donnent des résultats différents pour des nombres arbitraires; mais pour les entrées 0/1, ils semblent d'accord. Exemple
Luis Mendo

2
@LuisMendo Ah, oui, vous avez bien raison. Je l'ai testé avec quelques autres entiers, mais ceux-ci ont également donné les mêmes résultats quel que soit l'ordre (mais votre cas de test avec 0.8 diffère en effet). Si l'entrée aurait pu contenir autre chose que 0/ 1, votre approche consistant à obtenir d'abord la moyenne puis la différence absolue est correcte lorsque nous la comparons à la formule dans la description du défi. Avec seulement 0s / 1s, quelques 3 octets alternatifs sont également possibles, comme ÊÅA.
Kevin Cruijssen


2

Attaché , 11 8 octets

Mean@`/=

Essayez-le en ligne! Prend les arguments comme f[o, v].

Rien de terriblement original.

Approches alternatives

11 octets: Average@`/=

11 octets: ${1-x~y/#y} compte les occurrences de xdans ydivisé par la longueur de y, puis soustrait celle de 1.

11 octets: {1-_2~_/#_} (Les arguments sont inversés pour celui-ci)

15 octets: ${Sum[x/=y]/#y} une version plus explicite de ce qui précède, sans Average.



1

Proton , 26 octets

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

Essayez-le en ligne!

La sortie est une fraction car Proton utilise sympy au lieu des nombres Python réguliers pour une meilleure précision.

(-7 octets; abs-diff signifie plus court que la moyenne de abs-diff; je suis en fait stupide)

-1 octet grâce à Rod


@Rod J'essayais de comprendre comment optimiser la restriction d'entrée 1/0, mais j'ai échoué. Merci!
HyperNeutrino

1

Perl 6 , 20 octets

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

Essayez-le en ligne!

* X!= *est une fonction anonyme qui prend le produit croisé non égal de ses deux arguments. Il produit une séquence de booléens; par exemple, 1 X!= (1, 0, 1)évalue à (False, True, False).

{ @_.sum / @_ }est une autre fonction anonyme qui renvoie la moyenne de ses arguments. Boolean Trueévalue à 1numériquement et Falseà 0.

L' oopérateur compose ces deux fonctions en une seule.


1

Inscrire , 3 octets

nÆm

Essayez-le en ligne!

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

Le langage est très fortement inspiré par Jelly au point que c'est probablement plus comme moi d'expérimenter pour essayer de recréer la structure de la façon dont Jelly est analysée avec mon propre code.

-1 octet merci à M. Xcoder


Vous pouvez utiliser nau lieu de _...Apour enregistrer 1 ( Essayez-le en ligne! ).
M. Xcoder

@ Mr.Xcoder Ooh sympa. Ouais j'ai réalisé l'astuce! = Après avoir fait ce lol. Merci!
HyperNeutrino

1

Retina 0.8.2 , 27 octets

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

Essayez-le en ligne! Produit une fraction. Explication: Le premier groupe capture oet le deuxième groupe capture chaque entrée de v, tandis que le conditionnel garantit que le troisième groupe ne fait une capture que lorsque le vote est différent. La $#construction renvoie ensuite le nombre de captures pertinentes comme souhaité.




1

Orme 0,19, 48 octets

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

Démo en ligne ici .





0

Java 8, 47 octets

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

Essayez-le en ligne.

Ou bien:

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

Essayez-le en ligne.

Pour les deux, les entrées sont un Supplier<DoubleStream>pour la liste des votes vet doublepour le vote o.

Explication:

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

Lisp commun 49 octets

Solution:

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

Essayez-le en ligne

Explication:

(defun c(o v)
  (abs (- o (/ (reduce '+ v) (length v)))))
  • réduire applique une fonction sur tous les éléments de la liste (+ dans ce cas)
  • le repos est juste la fonction de base, abs (o - moyenne (v))


0

Pyth, 4 octets

aE.O

Explication:

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

L'entrée est au format:

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

avec la gamme de votes en premier, et le candidat en second.

Essayez-le en ligne!

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.