查找投票的C因子


11

在此挑战中,您将通过找出一个称为C因子的数字来确定给定其他投票的情况下投票的争议性。你问什么是C因子?

好吧,假设您在一次选举中获得了多张选票。我们将使用10接受挑战的缘故代表在选举中两个不同的候选人。这是我们的示例选举中的十票:

0110111011

现在,假设我们想找到候选人的任何投票的C因子0。我们可以使用以下功能来做到这一点:

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

fo是我们要确定其C因子v的投票,并且是一组投票。因此,使用我们的函数,获取候选人的任何投票的C因子0

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

较低的C因数表明,该投票与其他投票相比没有争议。因此,对候选人的投票0与对其他候选人的投票相比,与其他投票的区别更大1。相比之下,候选1票的C因子为0.3,因此争议较少,因为它更像其他票。

挑战

给定投票结果,编写函数f(o,v)确定投票的C因子。ov

  • o必须是0或的整数1

  • v 必须是包含零和一的任意长度的数组(或类似的容器类型,取决于语言规范)。

  • 给定功能参数的情况下,该函数应使用上面的公式或修改的方法将结果C因子返回或打印到控制台。

祝好运!最少的字节数获胜(五天内选择获胜者)。


mean(v)在您的示例中不等于0.7吗?
HyperNeutrino

@HyperNeutrino是的。怎么了
connectyourcharger

怎么abs(0 - 0.7)等于0.3
HyperNeutrino

啊。修复了示例。我颠倒了两个数字
connectyourcharger

哦好的。感谢您的澄清!
HyperNeutrino

Answers:


6

果冻,3个字节

ạÆm

在线尝试!

从字面上看只是“绝对差的意思”。

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

如果您反转参数,则可以反转原子。


10

R,23个字节

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

在线尝试!

挑战归结为计算与(即)v不同的价值比例。因此,我们可以避免使用。omean(xor(o,v))abs


2
也适用于整齐的任意表决代表。
刑事

6

APL(Dyalog Unicode)9 8 5字节

≠⌹⊢=⊢

在线尝试!

匿名火车。感谢@Adám节省了一个字节,感谢@ngn节省了3个字节!

怎么样:

≠⌹⊢=⊢  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
⌹:你能做到这一点在5暗示
NGN


3

05AB1E,3个字节

ÅAα

在线尝试!


2
我30秒为时已晚。我的顺序是不同的,虽然,第一αÅA,P
凯文Cruijssen

2
@KevinCruijssen我看着您的解决方案实时出现,我开始发表评论,并在30秒内将其删除。搞笑!
connectyourcharger

@KevinCruijssen我不太了解这两个命令是如何工作的... :-)我的05AB1E知识不是很好
Luis

1
@KevinCruijssen啊,我明白了。令我困惑的是,这两种方法对于任意数字给出的结果都不相同;但是对于0/1输入,他们似乎同意。示例
Luis Mendo

2
@LuisMendo啊,是的,你的确是对的。我用其他一些整数对其进行了测试,但无论顺序如何,这些整数也给出了相同的结果(但您的测试用例0.8确实有所不同)。如果输入中可能包含0/ 以外的其他内容1,则在我们将其与挑战说明中的公式进行比较时,首先求平均值然后绝对差的方法是正确的。仅使用0s / 1s,也可以使用一些替代的3字节字节,例如ÊÅA
凯文·克鲁伊森


2

附件11 8字节

Mean@`/=

在线尝试!将参数视为f[o, v]

没有什么太原始了。

替代方法

11个字节: Average@`/=

11个字节: ${1-x~y/#y}计算xin 的出现次数y除以的长度 y,然后从中减去1

11个字节:( {1-_2~_/#_}此参数取反)

15个字节: ${Sum[x/=y]/#y}上述内容的更明确的版本,不包含Average



1

质子,26字节

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

在线尝试!

输出是零星的,因为Proton使用sympy而不是常规的Python数字来提高精度。

(-7个字节;表示平均值的abs-diff比表示abs-diff的平均值短;我实际上很笨)

-1字节感谢Rod


@Rod我试图弄清楚如何针对1/0输入限制进行优化,但是失败了。谢谢!
HyperNeutrino

1

Perl 6,20个字节

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

在线尝试!

* X!= *是一个匿名函数,它使用两个参数的不等于叉积。它产生一系列布尔值;例如,1 X!= (1, 0, 1)计算为(False, True, False)

{ @_.sum / @_ }是另一个匿名函数,返回其参数的平均值。布尔值的True取值为1数字,取值False0

o操作者构成这两个功能合为一体。


1

征募,3个字节

nÆm

在线尝试!

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

该语言受到Jelly的极大启发,以至于它可能更像我尝试重新创建用我自己的代码解析Jelly的结构的尝试。

-1字节感谢Xcoder先生


您可以使用n而不是_...A保存1(在线尝试!)。
Xcoder先生

@ Mr.Xcoder哦,太好了。是的,我在做出这个大声笑后才意识到!=技巧。谢谢!
HyperNeutrino

1

视网膜0.8.2,27字节

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

在线尝试!输出分数。说明:第一组捕获o,第二组捕获的每个条目v,而条件确保第三组仅在投票不同时进行捕获。$#然后,该构造将根据需要返回相关捕获的计数。








0

Java 8,47字节

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

在线尝试。

或者:

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

在线尝试。

对于这两个输入,都是Supplier<DoubleStream>用于投票列表vdouble投票的o

说明:

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 49字节

解:

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

在线尝试

说明:

(defun c(o v)
  (abs (- o (/ (reduce '+ v) (length v)))))
  • reduce对所有列表元素应用函数(在这种情况下为+)
  • 其余只是基本函数abs(o-mean(v))


0

Pyth,4个字节

aE.O

说明:

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

输入格式为:

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

首先是选票,第二是候选人。

在线尝试!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.