投票のCファクターを見つける


11

この課題では、Cファクターと呼ばれる数を把握することにより、他の一連の投票が与えられた場合、投票がいかに物議を醸すかを決定します。Cファクターとは何ですか?

まあ、あなたが選挙で複数の票を持っていると想像してください。選挙では、2つの異なる候補者を代表して使用することに1します0。これが私たちのサンプル選挙での10票です:

0110111011

ここで、候補者の投票のCファクターを見つけたいとしましょう0。次の関数でそれを行うことができます:

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

で、我々はC-係数を決定したいの投票で、投票の配列です。したがって、私たちの関数を使用して、候補者の投票のCファクターを取得します。fov0

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

Cファクターが低いことは、投票が他の投票と比較して物議を醸しにくいことを示しています。したがって、候補者への投票は、候補者へ0の投票よりも他の投票とは異なり1ます。比較すると、候補者1投票のCファクターはであり、他の投票に似ているため、議論の余地はあまりありません。0.3

チャレンジ

関数を記述して、投票の結果から投票のCファクターを決定します。f(o,v)ov

  • o0またはのいずれかである必要があります1

  • v ゼロと1を含む任意の長さの配列(または言語仕様に応じて同様のコンテナー型)である必要があります。

  • 関数は、上記の式または変更されたメソッドを使用して、関数パラメーターが指定された結果のCファクターをコンソールに返すか、出力する必要があります。

幸運を!最小バイトが勝ちます(5日間で勝者が選択されます)。


mean(v)あなたの例では0.7に等しくありませんか?
HyperNeutrino

@HyperNeutrinoはい。問題は何ですか?
connectyourcharger

どのようにabs(0 - 0.7)等しい0.3ですか?
HyperNeutrino

ああ。例を修正しました。2つの数字を逆にしました
connectyourcharger

ああ大丈夫。明確にしていただきありがとうございます!
HyperNeutrino

回答:




6

APL(Dyalog Unicode)9 8 5バイト

≠⌹⊢=⊢

オンラインでお試しください!

匿名の電車。節約されたバイトについては@Adámに、3バイトについては@ngnに感謝します。

どうやって:

≠⌹⊢=⊢  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

2
私は30秒遅すぎます。私の注文は異なりましたが、最初αÅA; p
Kevin Cruijssen

2
@KevinCruijssen私はあなたのソリューションがリアルタイムで入ってくるのを見ました、私はコメントし始めました、そしてそれはすべて約30秒以内に削除されました。陽気な、こっけいな!
connectyourcharger

@KevinCruijssen 2つの注文が同じように機能する方法がよくわかりません... :-)私の05AB1Eの知識はあまりよくありません
Luis Mendo

1
@KevinCruijssenああ、なるほど。私を混乱させたのは、2つのアプローチが任意の数値に対して異なる結果を与えることです。しかし、0/1入力の場合、それらは一致するようです。
Luis Mendo

2
@LuisMendoああ、そうです、あなたは本当に正しいです。他のいくつかの整数でテストしましたが、順序に関係なく同じ結果が得られました(ただし、0.8のテストケースは実際には異なります)。入力に0/ 以外の何かが含まれている可能性がある場合は1、最初に平均を取得し、次に、絶対値の差がチャレンジの説明の式と比較するときに正しい差を求めるアプローチです。0s / 1sだけで、のようないくつかの代替3バイトも可能ÊÅAです。
Kevin Cruijssen


2

アタッシェ11 8バイト

Mean@`/=

オンラインでお試しください!として引数を取りますf[o, v]

ひどくオリジナルではありません。

代替アプローチ

11バイト: Average@`/=

11バイト: in ${1-x~y/#y}の出現回数をの長さxy除算して カウントしy、それをから減算し1ます。

11バイト:( {1-_2~_/#_}これは引数が逆になります)

15バイト: ${Sum[x/=y]/#y}上記のより明示的なバージョンAverage



1

プロトン、26バイト

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

オンラインでお試しください!

Protonは精度を高めるために通常のPython数値の代わりにsympyを使用するため、出力は小数です。

(-7バイト;平均へのabs-diffはabs-diffの平均より短い;私は実際にはばかげている)

ロッドのおかげで-1バイト


@Rod 1/0入力制限を最適化する方法を見つけようとしていたが失敗した。ありがとう!
HyperNeutrino

1

Perl 6、20バイト

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

オンラインでお試しください!

* X!= *は、2つの引数の等しくない外積をとる無名関数です。ブール値のシーケンスを生成します。たとえば、はに1 X!= (1, 0, 1)評価され(False, True, False)ます。

{ @_.sum / @_ }は、引数の平均を返す別の無名関数です。ブールTrueに評価され1、数値、およびFalse0

oオペレータは、一つに、これら二つの機能を構成します。


1

Enlist、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に非常に強く影響を受けています。

Xcoder氏のおかげで-1バイト


n代わりに_...Aを使用して1を保存できます(オンラインでお試しください!)。
Xcoder氏

@ Mr.Xcoder Oohいいね。ええ、私はこれを笑った後に!=トリックに気付きました。ありがとう!
HyperNeutrino

1

Retina 0.8.2、27バイト

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

オンラインでお試しください!分数を出力します。説明:最初のグループがキャプチャoし、2番目のグループがの各エントリをキャプチャしますがv、条件付きでは、投票が異なる場合にのみ3番目のグループがキャプチャを行うことが保証されます。次に、$#構造は必要に応じて関連するキャプチャの数を返します。








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>票のリストについては、vおよびdouble投票のために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

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

投票の配列を最初に、候補者を2番目にします。

オンラインでお試しください!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.