Получение среднего из списка (например [2,6,7]
)
- Получить длину списка:
[2,6,7] -> 3
- Суммировать числа в списке:
2 + 6 + 7 = 15
. - Разделите сумму на их подсчета:
15 / 3 = 5
.
Вы должны сравнить средние значения двух списков натуральных чисел N и M , возвращая значение, если N имеет более высокое среднее значение, другое значение, если M имеет более высокое среднее значение, и другое значение в случае связи.
Правила ввода / вывода
Все стандартные методы ввода и вывода разрешены.
вход
Вы можете использовать входные данные в виде двух отдельных списков, вложенного списка или чего-либо еще, что вы считаете подходящим для этой задачи. Пожалуйста, укажите формат.
Выход
Указанные значения должны быть различны и состоять как минимум из одного непробельного символа. Кроме того, они должны быть согласованы между прогонами (одно значение для N , одно значение для M , одно значение для Tie ). Пожалуйста, укажите это в своем ответе. Значения могут быть непустыми строками, значениями типа Bool, целыми числами или чем угодно, что вы считаете подходящим.
Спекуляции
Списки не обязательно будут иметь одинаковую длину.
Вам гарантировано, что списки не являются пустыми.
Тестовые случаи
Я выбрал значения N wins
, M wins
и Tie
, которые в значительной степени самоочевидны.
N, M -> Выход (в среднем) [7], [6] -> N выигрывает (N имеет 7, M имеет 6) [4,5], [4,4] -> N побед (N имеет 4,5, M имеет 4) [2,3,4], [4,5,6] -> M выигрывает (N имеет 3, M имеет 5) [4,1,3], [7,3,2,1,1,2] -> Tie (оба имеют 2,666 ...) [100,390,1], [89,82,89] -> N побед (N имеет 163,666 ..., M имеет 86,666 ...) [92,892], [892,92] -> Галстук (списки в основном идентичны) [10,182], [12,78,203,91] -> Галстук (оба имеют 96)
Применяются стандартные лазейки . Пояснения приветствуются! Это код-гольф , поэтому выигрывает самый короткий код в байтах!
источник
Ответы:
На самом деле , 5 байтов
Попробуйте онлайн!
1
дляN > M
,0
дляN = M
,-1
дляN < M
.Объяснение:
источник
Mathematica, 15 байт
Попробуйте онлайн!
Function
который ожидает список из двух списков.Mean/@#
принимает среднее арифметическое каждого списка во входных данных, затем передаются эти средниеOrder
, которые возвращаются,-1
если выигрывает первый список,0
если есть связь, и1
если выигрывает второй список.источник
JavaScript (ES6),
5250 байт(Сохранено 2 байта благодаря @Shaggy.)
Вот два 50-байтовых решения:
Возвращает бесконечность для N, бесконечность для M и NaN для связи.
Первое решение может потребовать небольшого объяснения из-за рекурсии:
При первом вызове функции
a
инициализируется как среднее значениеN
массива:M
имеет значение в этой точке, поэтому первая часть условного выражения называется:M ? (a-f(M))/0 : a ----------
Эта функция вызывается в этом выражении, на этот раз с заменой
M
наN
.При этом втором вызове функции
a
инициализируется как среднее значениеN
––, которое былоM
в предыдущем вызове.Поскольку во время этого вызова функции нет второго параметра, запускается вторая часть условного выражения, которая возвращает среднее значение:
M ? (a-f(M))/0 : a --
Теперь мы можем лучше понять выражение:
Это:
Разница между средними значениями будет положительным числом, отрицательным числом или 0.
Разделение разницы на 0 приводит к бесконечности , -Infinity или NaN - предоставляя три различных значения по мере необходимости.
Тестовые случаи:
Показать фрагмент кода
источник
A
к параметрам функции?Mathematica, 21 байт
1 для
#
побед, -1 для#2
побед, 0 для ничьей.источник
Sign[#-#2&@@Mean/@#]&
MATL , 8 байт
Тааак много модификаторов (
Y
аZ
). Я не могу найти способ сделать это короче.sum / number_of_elements
это три байта. Это может быть лучший способ сделать-ZS
, но я не могу найти один.Попробуйте онлайн!
Возвращает,
1
если первый вход больше,0
если они связаны, и-1
если второй вход больше.источник
05AB1E , 9 байтов
1 если
M
победит, -1 еслиN
победит и 0 для ничьей.Попробуйте онлайн!
объяснение
источник
Юлия , 27 байт
Попробуйте онлайн!
Возвращает,
1
если первое среднее значение больше,-1
если второе, и0
если они связаны.источник
Python 2 , 43 байта
Попробуйте онлайн!
источник
Октава , 27 байт
Попробуйте онлайн!
Принимает два вектора в
x.y
качестве входных данных, принимаетmean
оба вектора и вычитает один из другого. Получите знак этого, чтобы получить1
,0
и-1
для трех различных альтернатив.источник
Python 2, 49 байт
Попробуйте онлайн
источник
APL (Дьялог) , 11 байт
Запрашивает список из двух списков. Печатается,
1
если левое имеет более высокое среднее значение, 0, если у них одинаковое среднее значение, а¯1
если справа - более высокое среднее.Попробуйте онлайн!
⎕
незамедлительный(
…)¨
Применить следующую молчаливую функцию к каждому:+/
сумма÷
деленное на≢
подсчет-/
вставить (и оценить) минус между ними×
сигнумисточник
Javascript,
81665856 байтспас 15 байтов благодаря Люку
сэкономил 2 байта благодаря Джастину Маринеру
Галстук равен 0, М равен 1 и N равен -1. Вызывается с использованием синтаксиса карри, например.
f([7])([6])
источник
eval(a.join`+`)
.a=>(b=a.map(c=>eval(c.join`+`)/c.length))[0]-b[1]?b[0]>b[1]:0
для 61 байта. Он принимает входные данные в виде массива массивов и выходные данные0
для связи,true
для M иfalse
для N.a
) в первый раз , он используется:n=>m=>Math.sign((a=b=>eval(b.join`+`)/b.length)(m)-a(n))
.PHP , 68 байт
Попробуйте онлайн!
PHP , 69 байт
Попробуйте онлайн!
оператор космического корабля -1 меньше, 0 галстук, 1 больше, чем
источник
Хаскелл,
6543 байтаСохранено 22 байта благодаря NIMI!
Должен быть намного лучший способ ... Но преобразования типа меня облажали.использование
Возвращает,
GT
если побеждает первый аргумент,LT
если побеждает второй аргумент, иEQ
связывают ли они.Попробуйте онлайн!
источник
sum$x
сf.
. Кроме того :length x
может быть замененsum[1|_<-x]
, так что вы можете избавиться отf
полностью:a x=sum x/sum[1|_<-x]
.#
:...(a x)$a y
.(.a).compare.a
. Использование:( (.a).compare.a ) [7] [6]
.[1|_<-x]
же, как(1<$x)
.J, 10 байт
Один список дан слева, один справа. Вернет _1, если левое среднее меньше, 1, если оно больше, и 0, если они равны
(+/%#)
стандартный J-форк для вычисления среднего по списку&
предоставляет вариацию на диадической вилке. он применяет правую часть (в данном случае средний глагол) к обоим аргументам, а затем передает их глаголу с левой стороны, который в этом случае ...*@-
вычитание с последующим «знаком»: таким образом, правое среднее значение вычитается из левого, и нам дается знак результата - _1, 1 или 0источник
Pyth,
10876 байтовСпасибо @isaacg за сохранение байта
Ввод принимается как вложенный список
[N, M]
. Выходы-1
еслиN < M
,1
еслиN > M
и0
если они равны.Попробуйте онлайн
источник
h.+
на-F
TI-Basic,
2521131210 байт-2 байта благодаря lirtosiast
источник
Ans
вместоC
:mean(L₁)>mean(L₂:Ans+3(mean(L₁)=mean(L₂
21 байта.(
и)
.Желе , 7 байт
Монадическая ссылка, принимающая список из двух списков,
N,M
который возвращает:[-1]
forN
;[1]
дляM
; и[0]
для галстука.В полной программе печатает результат (списки единичной статьи печатать их содержание только, так
-1
,1
или0
).Попробуйте онлайн!
Как?
источник
S÷L
, а затем вы преобразуете его в одноканальную, черезS÷¥L$
которую можно сократить,S÷Lµ
поскольку она находится на в самом начале программы, а затем вы€
сразу же добавляете карту, а затем, поскольку нет встроенной функции для сравнения, которую вы бы использовали,_/Ṡ
но вы можете сократить ее,IṠ
так как это все еще 3 различных вывода cmp ... да, почти наверняка это не может быть сделано в 5. Также 5 не поможет, так как я FGITW'd. :)Perl 6 , 25 байт
Попробуйте онлайн!
Принимает один аргумент, двухэлементный список списков чисел. Возвращает,
1
если первый список имеет большее среднее значение,-1
если второй список имеет, и0
если средние значения равны.источник
JavaScript (ES6), 60 байт
Выходы
0
дляTie
,true
дляN
иfalse
дляM
.источник
JavaScript (ES6),
6054 байта-6 байт благодаря @Luke и @Neil
Принимает ввод как массив из 2 элементов
[N, M]
. Выходыtrue
,0
, илиfalse
дляN
,Tie
илиM
, соответственно.объяснение
Тестовый фрагмент
Введите числа, разделенные пробелами / запятыми.
Показать фрагмент кода
источник
Math.sign(y-x)
наy-x?x>y:0
. Выходы0
дляTie
,true
дляN
иfalse
дляM
.x-y&&x>y
возможно?Пип , 13 байт
Это функция, которая принимает список списков. Возвращает,
1
если первое среднее значение больше,-1
если второе больше,0
если оно связано. Запустите все тесты здесь.Фон
В этом решении интенсивно используются два метаоператора Пипа:
$
, сложите. Возьмите бинарный оператор и примените его между элементами списка. Например,+
сложение, но$+
суммирует список. Обратите внимание, что$
бинарный оператор превращается в унарный оператор.*
, карта. Возьмите унарный оператор и примените его к каждому элементу списка. Например,#
дает длину списка, но#*
дает (список) длины элементов списка.$+*
карты складываются / складываются по списку, суммируя каждый из элементов списка.Еще одна вещь, которую нужно знать о Pip, это то, что многие операторы по умолчанию работают со списками по пунктам. Например,
[1 2 3] * 5
дает[5 10 15]
;[1 2 3] * [2 3 4]
дает[2 6 12]
; и[[1 2] [3 4]] * [5 6]
дает[[5 10] [18 24]]
.объяснение
Мы будем использовать пример ввода
[[2 3 4] [2 3 4 6]]
:{...}
Определяет функцию. (Первый) аргумент связан с локальной переменной
a
.#*a
Сопоставьте
#
с аргументом функции, получая длины подсписков. Результат:[3 4]
a/#*a
Разделите (элементы) подсписки
a
на их соответствующие длины. Результат:[[0.667 1 1.333] [0.5 0.75 1 1.5]]
$+*a/#*a
Карта
$+
(сложить при добавлении) к этому результату, суммируя подсписки. Результат:[3 3.75]
$CM$+*a/#*a
Сложите
CM
, что дает-1
,0
или в1
зависимости от сравнения двух его операндов (например, Pythoncmp
). Результат:-1
(потому что3
меньше чем3.75
).Вы также можете определить функции в Pip, написав выражения, содержащие функцию тождества
_
. Например,_*_
это функция, которая возводит в квадрат свой аргумент - синтаксический сахар{a*a}
и меньше байтов. Однако в текущей версии интерпретатора есть ошибка, которая мешает_
работе с*
метаоператором. Как только это будет фиксированной, это решение может быть 11 байт :$CM$+*_/#*_
.источник
C (gcc), 91
98байтовНеправильное место для C и, вероятно, единственный ответ, который не нуждается в делении. По крайней мере, код отображается без слайдера.
Возвращение 0,1,2 для
M>N
,M=N
,M<N
соответственно. Принимает входной сигнал , какlength of M
,length of N
,M
,N
.источник
Брахилог , 8 байт
Попробуйте онлайн!
Выводы,
1
если первый список имеет большее среднее значение,-1
если второй список имеет большее среднее значение, и0
если они связаны.объяснение
источник
Java, 105 байт
Лямбда, которая принимает вложенный список, согласно допустимым входам.
Потоки списка списков, преобразует оба в их средние значения, а затем возвращает знак разницы.
1
если первый список больше,-1
если второй список больше,0
для связи.источник
Stream
s напрямую, как я .R
3834 байтаФункция, которая принимает в качестве входных данных два числовых вектора. Возвращает 1, если первое среднее значение списка выше, 0, если они одинаковые, и -1, если второе среднее значение списка выше.
источник
f=
.{}
из тела функции.MATL , 6 байтов
Не будь таким злым! *
Порядок ввода стека:
Выход:
Попробуйте онлайн!
* Этот ответ был в гольфе, не будучи злым для бедных, беззащитных чисел.
источник
Java (OpenJDK 8) ,
7662 байтаПопробуйте онлайн!
Поскольку вход может быть любым, я решил взять
IntStream
s в качестве ввода. Вы можете получить такой вход от стандартаint[]
сArrays.stream(array)
.Выход
1
для «N побед»,-1
для «М выигрышей» и0
для ничьей.Сохраняет
источник
java.util.Arrays.stream(array).map(java.util.Arrays::stream)
). Только когда я перечитал вопрос сегодня, я подумал, что этот формат ввода так же действителен, как и любой другой..orElse(0)
ли жизнеспособное сокращение.getAsDouble()
?(a,b)->Math.signum(a.average().orElse(0)-b.average().orElse(0));
это 64 байтаDyalog APL, 14 байтов
1
если левый больше,¯1
если правый и0
на галстуке.Как?
¨∘⊢
для каждого списка+/÷≢
рассчитать среднее (+/
сумма÷
делится на≢
длину)-/
вычесть средние×
признак результатаисточник
Common Lisp ,
7471 байтПопробуйте онлайн!
источник