Tìm hệ số C của phiếu bầu


11

Trong thử thách này, bạn sẽ xác định mức độ gây tranh cãi của một phiếu bầu, được đưa ra một loạt các phiếu bầu khác, bằng cách tìm ra một số gọi là yếu tố C. Yếu tố C là gì, bạn yêu cầu?

Chà, hãy tưởng tượng bạn đã có nhiều phiếu trong một cuộc bầu cử. Chúng tôi sẽ sử dụng 10vì lợi ích của thách thức để đại diện cho hai ứng cử viên khác nhau trong một cuộc bầu cử. Dưới đây là mười phiếu trong cuộc bầu cử mẫu của chúng tôi:

0110111011

Bây giờ, giả sử chúng tôi muốn tìm yếu tố C của bất kỳ phiếu bầu nào cho ứng cử viên 0. Chúng ta có thể làm điều đó với chức năng sau:

f(o,v)= =mộtbS(o-memộtn(v))

Trong , là phiếu bầu mà chúng tôi muốn xác định yếu tố C và là một loạt phiếu bầu. Vì vậy, bằng cách sử dụng chức năng của chúng tôi, để có được yếu tố C của bất kỳ phiếu bầu nào cho ứng cử viên :fov0

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

Một yếu tố C thấp hơn cho thấy rằng phiếu bầu ít gây tranh cãi hơn so với các phiếu khác. Vì vậy, một phiếu bầu cho ứng cử viên 0khác với các phiếu bầu khác hơn là một phiếu bầu cho ứng cử viên 1. So sánh, hệ số C cho 1phiếu bầu của ứng cử viên là , do đó ít gây tranh cãi hơn vì nó giống với các phiếu khác.0,3

Các thách thức

Viết hàm để xác định hệ số C của phiếu bầu cho kết quả bỏ phiếu .f(o,v)ov

  • ophải là một số nguyên, 0hoặc 1.

  • v phải là một mảng (hoặc loại thùng chứa tương tự tùy thuộc vào thông số kỹ thuật ngôn ngữ) có độ dài tùy ý chứa số không và số không.

  • Hàm sẽ trả về hoặc in ra bàn điều khiển hệ số C kết quả được cung cấp cho các tham số chức năng, sử dụng công thức trên hoặc phương thức sửa đổi.

Chúc may mắn! Chiến thắng ít nhất byte (người chiến thắng được chọn trong năm ngày).


Không mean(v)bằng 0 trong ví dụ của bạn?
HyperNeutrino

@HyperNeutrino Vâng. Vấn đề là gì?
Trình kết nối

Làm thế nào là abs(0 - 0.7)bằng 0.3?
HyperNeutrino

Ah. Đã sửa ví dụ. Tôi đã đảo ngược hai số
Connectyourcharger

Ờ được rồi. Cảm ơn đã làm rõ!
HyperNeutrino

Câu trả lời:


6

Thạch , 3 byte

ạÆm

Hãy thử trực tuyến!

Nghĩa đen chỉ là "sự khác biệt tuyệt đối với ý nghĩa".

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

Nếu bạn đảo ngược các đối số, bạn có thể đảo ngược các nguyên tử.


10

R , 23 byte

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

Hãy thử trực tuyến!

Thách thức tập trung vào việc tính toán tỷ lệ các giá trị vkhác với o(nghĩa là mean(xor(o,v))). Do đó chúng ta có thể tránh sử dụng abs.


2
Cũng hoạt động cho các đại diện bỏ phiếu tùy ý, gọn gàng.
CriminallyVulgar

6

APL (Dyalog Unicode) , 9 8 5 byte

≠⌹⊢=⊢

Hãy thử trực tuyến!

Tàu vô danh. Cảm ơn @ Adám đã lưu byte và cảm ơn @ngn vì 3 byte!

Làm sao:

≠⌹⊢=⊢  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
bạn có thể làm điều đó trong 5. gợi ý:
ngn


3

2
Tôi trễ 30 giây .. Mặc dù vậy, đơn hàng của tôi đã khác trước, αsau đó ÅA, p
Kevin Cruijssen

2
@KevinCruijssen Tôi đã xem giải pháp của bạn xuất hiện trong thời gian thực, tôi bắt đầu bình luận và nó đã bị xóa, tất cả chỉ trong khoảng 30 giây. Vui nhộn!
Trình kết nối

@KevinCruijssen Tôi không thực sự hiểu cách hai đơn đặt hàng hoạt động giống nhau ... :-) Kiến thức 05AB1E của tôi không tốt lắm
Luis Mendo

1
@KevinCruijssen À, tôi hiểu rồi. Điều khiến tôi bối rối là hai cách tiếp cận cho kết quả khác nhau đối với các số tùy ý; nhưng đối với đầu vào 0/1 dường như họ đồng ý. Ví dụ
Luis Mendo

2
@LuisMendo À, đúng rồi, bạn thực sự đúng. Tôi đã thử nghiệm nó với một vài số nguyên khác, nhưng những số nguyên này cũng cho kết quả tương tự bất kể thứ tự (nhưng trường hợp thử nghiệm của bạn với 0,8 thực sự khác nhau). Nếu đầu vào có thể chứa thứ gì khác ngoài 0/ 1, cách tiếp cận đầu tiên của bạn là giá trị trung bình và sau đó sự khác biệt tuyệt đối là chính xác khi chúng ta so sánh nó với công thức trong mô tả thử thách. Chỉ với 0s / 1s, một số 3-byters thay thế cũng có thể, như thế ÊÅA.
Kevin Cruijssen


2

Tùy viên , 11 8 byte

Mean@`/=

Hãy thử trực tuyến! Đưa ra lập luận như f[o, v].

Không có gì khủng khiếp ban đầu.

Cách tiếp cận khác

11 byte: Average@`/=

11 byte: ${1-x~y/#y} Đếm lần xuất hiện của xtrong ychia cho chiều dài y, sau đó trừ rằng từ 1.

11 byte: {1-_2~_/#_} (Đối số được đảo ngược cho cái này)

15 byte: ${Sum[x/=y]/#y} Một phiên bản rõ ràng hơn ở trên, không có Average.



1

Proton , 26 byte

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

Hãy thử trực tuyến!

Đầu ra là một phân số vì Proton sử dụng sympy thay vì số Python thông thường để có độ chính xác tốt hơn.

(-7 byte; abs-diff có nghĩa là ngắn hơn trung bình của abs-diff; tôi thực sự bị câm)

-1 byte nhờ Rod


@Rod Tôi đã cố gắng tìm ra cách tối ưu hóa cho hạn chế đầu vào 1/0 nhưng không thành công. Cảm ơn!
HyperNeutrino

1

Perl 6 , 20 byte

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

Hãy thử trực tuyến!

* X!= *là một hàm ẩn danh lấy sản phẩm chéo không bằng của hai đối số của nó. Nó tạo ra một chuỗi Booleans; ví dụ, 1 X!= (1, 0, 1)đánh giá để (False, True, False).

{ @_.sum / @_ }là một hàm ẩn danh khác trả về mức trung bình của các đối số của nó. Boolean Trueđánh giá lại để 1số lượng, và Falseđể 0.

Các onhà điều hành soạn những hai chức năng thành một.


1

Nhập ngũ , 3 byte

nÆm

Hãy thử trực tuyến!

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

Ngôn ngữ được Jelly truyền cảm hứng rất nhiều đến mức có lẽ giống như tôi đang thử nghiệm để cố gắng tạo lại cấu trúc của cách Jelly được phân tích cú pháp bằng mã của riêng tôi.

-1 byte nhờ ông Xcoder


Bạn có thể sử dụng nthay vì _...Ađể lưu 1 ( Dùng thử trực tuyến! ).
Ông Xcoder

@ Mr.Xcoder Ôi đẹp quá. Vâng tôi đã nhận ra! = Thủ thuật sau khi thực hiện lol này. Cảm ơn!
HyperNeutrino

1

Võng mạc 0.8.2 , 27 byte

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

Hãy thử trực tuyến! Đầu ra một phần. Giải thích: Nhóm đầu tiên chụp ovà nhóm thứ hai chụp từng mục v, trong khi điều kiện đảm bảo rằng nhóm thứ ba chỉ thực hiện chụp khi phiếu không giống nhau. Việc $#xây dựng sau đó trả về số lượng các ảnh chụp có liên quan như mong muốn.








0

Java 8, 47 byte

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

Hãy thử trực tuyến.

Hay cách khác:

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

Hãy thử trực tuyến.

Đối với cả hai đầu vào là một Supplier<DoubleStream>danh sách phiếu bầu vdoublecho phiếu bầu o.

Giải trình:

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 byte phổ biến

Giải pháp:

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

Dùng thử trực tuyến

Giải trình:

(defun c(o v)
  (abs (- o (/ (reduce '+ v) (length v)))))
  • giảm áp dụng một hàm trên tất cả các thành phần danh sách (+ trong trường hợp này)
  • phần còn lại chỉ là hàm cơ sở, abs (o - mean (v))


0

Bình thường, 4 byte

aE.O

Giải trình:

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

Đầu vào có định dạng:

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

với các phiếu bầu đầu tiên, và ứng cử viên thứ hai.

Hãy thử trực tuyến!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.