Знайдіть коефіцієнт С голосу


11

У цьому виклику ви визначатимете, наскільки суперечливим є голосування, маючи ряд інших голосів, вирахувавши число, яке називається С-коефіцієнтом. Що ви запитуєте?

Ну, уявіть, ви отримали кілька голосів на виборах. Ми використаємо 1і 0заради завдання, щоб представляти двох різних кандидатів на виборах. Ось десять голосів на наших вибіркових виборах:

0110111011

Тепер, скажімо, ми хочемо знайти коефіцієнт С будь-якого голосу за кандидата 0. Це можна зробити за допомогою наступної функції:

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

В , це голосування , ми хочемо визначити C-фактор для, і є масивом голосів. Отож, використовуючи нашу функцію, отримати C-фактор будь-якого голосу за кандидата :fov0

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

Нижчий коефіцієнт С показує, що голосування було менш суперечливим порівняно з іншими голосами. Отже, голосування за кандидата 0сильніше відрізняється від інших голосів, ніж голосування за кандидата 1. Для порівняння, коефіцієнт С для 1голосу кандидата становить , тому він є менш суперечливим, оскільки він більше схожий на інші голоси.0.3

Змагання

Напишіть функцію щоб визначити коефіцієнт С голосу за даними результатів голосування .f(o,v)ov

  • oмає бути цілим числом, 0або 1.

  • v повинен бути масив (або подібний тип контейнера залежно від мовних специфікацій) довільної довжини, що містить нулі та одиниці.

  • Функція повинна повернути або надрукувати на консолі отриманий C-коефіцієнт з урахуванням параметрів функції, використовуючи формулу вище або модифікований метод.

Удачі! Виграє найменше байтів (переможця вибирають за п’ять днів).


Чи не mean(v)дорівнює 0,7 у вашому прикладі?
HyperNeutrino

@HyperNeutrino Так. У чому проблема?
connectyourcharger

Як abs(0 - 0.7)дорівнює 0.3?
HyperNeutrino

Ага. Виправлено приклад. Я перевернув два числа
connectyourcharger

О, гаразд. Дякуємо за уточнення!
HyperNeutrino

Відповіді:




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

2
Я 30 секунд надто пізно .. Мій замовлення було іншим , хоча, перше αто ÅA, р
Кевін Cruijssen

2
@KevinCruijssen Я спостерігав, як ваше рішення надходить в режимі реального часу, я почав коментувати, і його було видалено, і все це було приблизно за 30 секунд. Веселий!
connectyourcharger

@KevinCruijssen Я не дуже розумію, як обидва замовлення працюють однаково ... :-) Мої знання 05AB1E не дуже хороші
Луїс Мендо

1
@KevinCruijssen Ах, бачу. Мене бентежить те, що два підходи дають різні результати для довільних чисел; але для входів 0/1 вони, схоже, згодні. Приклад
Луїс Мендо

2
@LuisMendo Ага, так, ти справді правий. Я тестував його з кількома іншими цілими числами, але ті дали і ті самі результати, незалежно від порядку (але ваш тестовий випадок з 0,8 справді відрізняється). Якщо введення могло б містити щось інше, окрім 0/ 1, ваш підхід спочатку отримати середнє значення, а потім абсолютна різниця є правильним, коли ми порівнюємо його з формулою в описі завдання. З лише 0s / 1s можливі і деякі альтернативні 3-байтові ÊÅA.
Kevin Cruijssen


2

Attache , 11 8 байт

Mean@`/=

Спробуйте в Інтернеті! Приймає аргументи як f[o, v].

Нічого жахливо оригінального.

Альтернативні підходи

11 байт: Average@`/=

11 байт: ${1-x~y/#y} Вважає входження xв 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 Я намагався розібратися, як оптимізувати обмеження введення 1/0, але не вдалося. Дякую!
HyperNeutrino

1

Perl 6 , 20 байт

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

Спробуйте в Інтернеті!

* X!= *це анонімна функція, яка приймає нерівне поперечне добуток двох її аргументів. Він створює послідовність булевих; наприклад, 1 X!= (1, 0, 1)оцінює до (False, True, False).

{ @_.sum / @_ }- це ще одна анонімна функція, яка повертає середнє значення її аргументів. Булева Trueобчислюється 1чисельно, і Falseдо 0.

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 розбирається з моїм власним кодом.

-1 байт завдяки спадару Xcoder


Ви можете використовувати nзамість того, _...Aщоб зберегти 1 ( Спробуйте це в Інтернеті! ).
Містер Xcoder

@ Mr.Xcoder Ой приємно. Так, я зрозумів, що фокус! = Після створення цього лол. Дякую!
HyperNeutrino

1

Сітківка 0,8,2 , 27 байт

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

Спробуйте в Інтернеті! Виводить дріб. Пояснення: Перша група фіксує, oа друга група фіксує кожен запис v, тоді як умовна гарантує, що третя група здійснює захоплення лише тоді, коли голосування відрізняються. Потім $#конструкція повертає кількість відповідних захоплень за бажанням.




1

В'яз 0,19, 48 байт

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

Демонстрація в Інтернеті тут .





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

з масивом голосів перший, а кандидат другий.

Спробуйте в Інтернеті!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.