ค้นหา C-factor ของการโหวต


11

ในการท้าทายนี้คุณจะพิจารณาว่าการลงคะแนนเสียงเป็นอย่างไรให้คะแนนแบบอื่นโดยการหาตัวเลขที่เรียกว่า C-factor C-factor คืออะไรคุณถาม?

ลองจินตนาการว่าคุณได้รับการโหวตหลายครั้งจากการเลือกตั้ง เราจะใช้1และ0เพื่อความท้าทายในการเป็นตัวแทนผู้สมัครที่แตกต่างกันสองคนในการเลือกตั้ง นี่คือสิบคะแนนโหวตในการเลือกตั้งตัวอย่างของเรา:

0110111011

ตอนนี้บอกว่าเราต้องการที่จะหา C-ปัจจัยการโหวตใด ๆ 0สำหรับผู้สมัคร เราสามารถทำได้ด้วยฟังก์ชั่นต่อไปนี้:

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

ในf , oเป็นคะแนนเสียงที่เราต้องการที่จะตรวจสอบ C-ปัจจัยและvเป็นอาร์เรย์ของคะแนนเสียง ดังนั้นโดยใช้ฟังก์ชั่นของเราเพื่อรับ C-factor ของการโหวตสำหรับผู้สมัคร0:

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

C-factor ที่ต่ำกว่าแสดงให้เห็นว่าการโหวตนั้นมีความขัดแย้งน้อยกว่าเมื่อเปรียบเทียบกับการโหวตอื่น ๆ ดังนั้นการลงคะแนนเสียงให้ผู้สมัคร0มีมากขึ้นแตกต่างจากคะแนนโหวตอื่น ๆ 1นอกเหนือจากการลงคะแนนสำหรับผู้สมัคร ในการเปรียบเทียบปัจจัย C สำหรับการ1ลงคะแนนเสียงของผู้สมัครคือ0.3ดังนั้นจึงเป็นเรื่องที่ถกเถียงกันน้อยลงเพราะมันเหมือนกับการโหวตอื่น

ความท้าทาย

เขียนฟังก์ชั่นf(o,v)ในการกำหนด C-ปัจจัยของการลงคะแนนผลการได้รับการโหวตov

  • oต้องเป็นจำนวนเต็มทั้งหรือ01

  • v จะต้องเป็นอาร์เรย์ (หรือประเภทภาชนะที่คล้ายกันขึ้นอยู่กับข้อกำหนดของภาษา) ของความยาวโดยพลการที่มีศูนย์และคน

  • ฟังก์ชั่นควรส่งคืนหรือพิมพ์ไปยังคอนโซลด้วยผลลัพธ์ C-factor ที่กำหนดพารามิเตอร์ของฟังก์ชันโดยใช้สูตรด้านบนหรือวิธีการแก้ไข

โชคดี! ไบต์ที่น้อยที่สุดชนะ (เลือกผู้ชนะในห้าวัน)


mean(v)ในตัวอย่างของคุณไม่เท่ากับ 0.7 ใช่ไหม
HyperNeutrino

@HyperNeutrino ใช่ มีปัญหาอะไร
connectyourcharger

วิธีการคือabs(0 - 0.7)เท่ากับ0.3?
HyperNeutrino

อา. แก้ไขตัวอย่าง ฉันกลับหมายเลขสองตัว
connectyourcharger

ตกลง. ขอบคุณสำหรับการชี้แจง!
HyperNeutrino

คำตอบ:



10

R , 23 ไบต์

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

ลองออนไลน์!

ความท้าทายดังกล่าวทำให้เกิดการคำนวณสัดส่วนของค่าที่vแตกต่างจากo(เช่นmean(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 วินาที .. ออร์เดอร์ของฉันแตกต่างαจากนั้นก่อนÅAp
Kevin Cruijssen

2
@KevinCruijssen ฉันดูโซลูชันของคุณเป็นแบบเรียลไทม์ฉันเริ่มแสดงความคิดเห็นและมันถูกลบทั้งหมดภายในประมาณ 30 วินาที เฮฮา!
connectyourcharger

@KevinCruijssen ฉันไม่เข้าใจจริง ๆ ว่าทั้งสองคำสั่งทำงานอย่างไร ... :-) ความรู้ 05AB1E ของฉันไม่ดีมาก
Luis Mendo

1
@KevinCruijssen อ่าฉันเข้าใจแล้ว สิ่งที่ทำให้ฉันสับสนก็คือทั้งสองวิธีให้ผลลัพธ์ที่แตกต่างกันสำหรับตัวเลขโดยพลการ แต่สำหรับอินพุต 0/1 พวกเขาดูเหมือนจะเห็นด้วย ตัวอย่าง
Luis Mendo

2
@ LuisMendo อาใช่คุณพูดถูก ฉันทดสอบด้วยจำนวนเต็มอื่น ๆ สองสามตัว แต่ผลลัพธ์เหล่านั้นให้ผลลัพธ์เหมือนกันโดยไม่คำนึงถึงคำสั่งซื้อ (แต่กรณีทดสอบของคุณที่มี 0.8 ต่างกัน) หากการป้อนข้อมูลอาจมีอย่างอื่นนอกเหนือจาก0/ 1วิธีการของคุณในการหาค่าเฉลี่ยก่อนจากนั้นความแตกต่างแบบสัมบูรณ์จะถูกต้องเมื่อเราเปรียบเทียบกับสูตรในคำอธิบายการท้าทาย ด้วย 0s เท่านั้น / 1S บางทางเลือกที่ 3 byters ÊÅAที่เป็นไปได้เช่นกันเช่น
Kevin Cruijssen


2

ทูต , 11 8 ไบต์

Mean@`/=

ลองออนไลน์! f[o, v]ใช้อาร์กิวเมนต์เป็น

ไม่มีอะไรเป็นต้นฉบับอย่างมาก

วิธีการทางเลือก

11 ไบต์: Average@`/=

11 ไบต์: ${1-x~y/#y}นับการเกิดขึ้นของxในyหารด้วยความยาวของ แล้วลบที่มาจากy1

11 ไบต์: {1-_2~_/#_} (อาร์กิวเมนต์นี้ถูกย้อนกลับสำหรับอันนี้)

ไบต์ 15: รุ่นที่ชัดเจนมากขึ้นดังกล่าวข้างต้นโดยไม่ต้อง${Sum[x/=y]/#y}Average



1

โปรตอน 26 ไบต์

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

ลองออนไลน์!

ผลลัพธ์เป็นเศษส่วนเนื่องจาก Proton ใช้ sympy แทนหมายเลข Python ปกติเพื่อความแม่นยำที่ดีขึ้น

(-7 bytes; abs-diff to mean สั้นกว่าค่าเฉลี่ยของ 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

ภาษาได้รับแรงบันดาลใจอย่างมากจากเจลลี่จนถึงจุดที่อาจเป็นมากกว่าที่ฉันกำลังทดลองเพื่อพยายามสร้างโครงสร้างของวิธีการแยกวิเคราะห์เจลลี่ด้วยรหัสของฉันเอง

-1 ไบต์ขอบคุณ Mr. Xcoder


คุณสามารถใช้nแทน_...Aการบันทึก 1 ( ลองออนไลน์ได้! )
Mr. Xcoder

@ Mr.Xcoder Ooh ดี ใช่ฉันรู้! = เคล็ดลับหลังจากทำ lol นี้ ขอบคุณ!
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>รายชื่อลงคะแนนvและสำหรับการลงคะแนนเสียงdoubleo

คำอธิบาย:

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)))))
  • ลดใช้ฟังก์ชั่นมากกว่าองค์ประกอบรายการทั้งหมด (+ ในกรณีนี้)
  • ส่วนที่เหลือเป็นเพียงฟังก์ชันพื้นฐาน, 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

ด้วยการโหวตก่อนและผู้สมัครที่สอง

ลองออนไลน์!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.